diff --git a/README.md b/README.md index 8221b47d8494b1a1bdb36e2becf1cdbf311eb438..9311ccdd6c74899be0ca43b9f6bc24205334bf3a 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,10 @@ title: Starry emoji: ✨ colorFrom: blue -colorTo: yellow +colorTo: pink sdk: docker pinned: false license: bsd -short_description: Online sheet music recognition and editing platform. app_port: 7860 --- diff --git a/backend/omr-service/src/lib/zero-client.ts b/backend/omr-service/src/lib/zero-client.ts index 81c227c8d8038957d79e7052a8ccd145be669e6b..a7c8a2b348ae11922c5a7575e65251bec2537509 100644 --- a/backend/omr-service/src/lib/zero-client.ts +++ b/backend/omr-service/src/lib/zero-client.ts @@ -1,6 +1,7 @@ -import * as zmq from 'zeromq'; import { pack, unpack } from 'msgpackr'; +import * as zmq from 'zeromq'; import { config, PredictorType } from '../config.js'; +import type { PageLayoutDetection } from '../types/layout.js'; interface ZeroResponse { code: number; @@ -75,11 +76,7 @@ export async function closeAllPredictors(): Promise { // High-level predictor functions export interface LayoutResult { - detection: { - boxes: number[][]; - labels: string[]; - scores: number[]; - }; + detection: PageLayoutDetection; theta: number; interval: number; sourceSize?: { diff --git a/backend/omr-service/src/routes/predictor.ts b/backend/omr-service/src/routes/predictor.ts index cc4e8cf1a553afb4c70b82b482265557789a7662..5928cf7fcf97372c30311891b93fdd5c34340bc8 100644 --- a/backend/omr-service/src/routes/predictor.ts +++ b/backend/omr-service/src/routes/predictor.ts @@ -1,5 +1,6 @@ import { FastifyInstance } from 'fastify'; import { getPredictor } from '../lib/zero-client.js'; +import { ensureSerializableLayoutResult } from '../types/layout.js'; /** * Synchronous predictor routes that accept base64 images @@ -44,7 +45,7 @@ export default async function predictorRoutes(fastify: FastifyInstance) { return { code: 0, - data: results.map((result) => convertBufferImages(result)), + data: results.map((result) => ensureSerializableLayoutResult(convertBufferImages(result))), }; }); diff --git a/backend/omr-service/src/services/predictor.service.ts b/backend/omr-service/src/services/predictor.service.ts index aa7423403ea61fa01f90fb0486417f89638fe9b7..ac6a5b6f5634c7751129a02b687e0b536b98024d 100644 --- a/backend/omr-service/src/services/predictor.service.ts +++ b/backend/omr-service/src/services/predictor.service.ts @@ -26,6 +26,12 @@ export interface PredictWithLayoutOptions { * Extract staff image buffers from layout detection result. * Layout detection includes PNG-encoded staff images in detection.areas[].staff_images[].image. */ +function staffImageToBuffer(image: any): Buffer { + if (Buffer.isBuffer(image)) return image; + if (typeof image === 'string') return Buffer.from(image); + return Buffer.from(image.data); +} + function extractStaffImages(layout: LayoutResult): Buffer[] { const staffImages: Buffer[] = []; if (layout?.detection?.areas) { @@ -33,7 +39,7 @@ function extractStaffImages(layout: LayoutResult): Buffer[] { if (area.staff_images) { for (const si of area.staff_images) { if (si.image) { - staffImages.push(Buffer.from(si.image)); + staffImages.push(staffImageToBuffer(si.image)); } } } diff --git a/backend/omr-service/src/services/score.service.ts b/backend/omr-service/src/services/score.service.ts index 63bab0fb897d5ebf8a17e52ab91cbc406280907b..a658c0a9dabc0b66aaea3c65df3ff80efd4f4f95 100644 --- a/backend/omr-service/src/services/score.service.ts +++ b/backend/omr-service/src/services/score.service.ts @@ -1,5 +1,5 @@ -import { v4 as uuidv4 } from 'uuid'; -import { query, transaction } from '../db/client.js'; +import { query } from '../db/client.js'; +import { ensureSerializablePredictionResult, ensureSerializableScorePageLayouts } from '../types/layout.js'; export interface Score { id: string; @@ -34,24 +34,36 @@ export interface UpdateScoreInput { data?: Record; } +function normalizeScore(score: Score | null | undefined): Score | null { + if (!score) return null; + ensureSerializableScorePageLayouts(score.data); + return score; +} + +function normalizePage(page: Page | null | undefined): Page | null { + if (!page) return null; + ensureSerializablePredictionResult(page.data); + return page; +} + export async function createScore(input: CreateScoreInput): Promise { const { rows } = await query( `INSERT INTO scores (title, source_url, data) VALUES ($1, $2, $3) RETURNING *`, - [input.title || null, input.source_url || null, JSON.stringify(input.data || {})] + [input.title || null, input.source_url || null, JSON.stringify(ensureSerializableScorePageLayouts(input.data || {}))] ); - return rows[0]; + return normalizeScore(rows[0])!; } export async function getScore(id: string): Promise { const { rows } = await query('SELECT * FROM scores WHERE id = $1', [id]); - return rows[0] || null; + return normalizeScore(rows[0]); } export async function listScores(limit = 50, offset = 0): Promise { const { rows } = await query('SELECT * FROM scores ORDER BY created_at DESC LIMIT $1 OFFSET $2', [limit, offset]); - return rows; + return rows.map((score) => normalizeScore(score)!); } export async function updateScore(id: string, input: UpdateScoreInput): Promise { @@ -69,7 +81,7 @@ export async function updateScore(id: string, input: UpdateScoreInput): Promise< } if (input.data !== undefined) { updates.push(`data = $${paramIndex++}`); - values.push(JSON.stringify(input.data)); + values.push(JSON.stringify(ensureSerializableScorePageLayouts(input.data))); } if (updates.length === 0) { @@ -80,7 +92,7 @@ export async function updateScore(id: string, input: UpdateScoreInput): Promise< values.push(id); const { rows } = await query(`UPDATE scores SET ${updates.join(', ')} WHERE id = $${paramIndex} RETURNING *`, values); - return rows[0] || null; + return normalizeScore(rows[0]); } export async function deleteScore(id: string): Promise { @@ -116,26 +128,26 @@ export async function createPage( [scoreId] ); - return rows[0]; + return normalizePage(rows[0])!; } export async function getPages(scoreId: string): Promise { const { rows } = await query('SELECT * FROM pages WHERE score_id = $1 ORDER BY page_index', [scoreId]); - return rows; + return rows.map((page) => normalizePage(page)!); } export async function getPage(scoreId: string, pageIndex: number): Promise { const { rows } = await query('SELECT * FROM pages WHERE score_id = $1 AND page_index = $2', [scoreId, pageIndex]); - return rows[0] || null; + return normalizePage(rows[0]); } export async function updatePageData(scoreId: string, pageIndex: number, data: Record): Promise { const { rows } = await query(`UPDATE pages SET data = $3 WHERE score_id = $1 AND page_index = $2 RETURNING *`, [ scoreId, pageIndex, - JSON.stringify(data), + JSON.stringify(ensureSerializablePredictionResult(data)), ]); - return rows[0] || null; + return normalizePage(rows[0]); } // Upsert score data — creates if not exists, updates if exists @@ -145,9 +157,9 @@ export async function upsertScoreData(id: string, data: Record): Pr VALUES ($1, $2) ON CONFLICT (id) DO UPDATE SET data = $2, updated_at = NOW() RETURNING *`, - [id, JSON.stringify(data)] + [id, JSON.stringify(ensureSerializableScorePageLayouts(data))] ); - return rows[0]; + return normalizeScore(rows[0])!; } // Batch import score data from music_sets JSON files diff --git a/backend/omr-service/src/services/task.service.ts b/backend/omr-service/src/services/task.service.ts index e6912903a40619cb48443f3bd7167909705d39e5..8bb17daf51b982dba54dd83a17fe1c5f47fb4135 100644 --- a/backend/omr-service/src/services/task.service.ts +++ b/backend/omr-service/src/services/task.service.ts @@ -1,4 +1,5 @@ import { query } from '../db/client.js'; +import { ensureSerializablePredictionResult } from '../types/layout.js'; export type TaskStatus = 'pending' | 'running' | 'completed' | 'failed'; export type TaskType = 'predict_page' | 'predict_all' | 'predict_custom'; @@ -89,7 +90,7 @@ export async function setTaskResult(id: string, result: Record): Pr const { rows } = await query( `UPDATE tasks SET result = $2, status = 'completed', progress = 100, completed_at = NOW() WHERE id = $1 RETURNING *`, - [id, JSON.stringify(result)] + [id, JSON.stringify(ensureSerializablePredictionResult(result))] ); return rows[0] || null; } diff --git a/backend/omr-service/src/types/layout.ts b/backend/omr-service/src/types/layout.ts new file mode 100644 index 0000000000000000000000000000000000000000..267fc30c44b956204effccb02be45919c0009267 --- /dev/null +++ b/backend/omr-service/src/types/layout.ts @@ -0,0 +1,100 @@ +type Constructor = new (...args: any[]) => T; + +function assignSerializable(target: T, data?: Record) { + if (data) Object.assign(target, data); + return target; +} + +function serializableToJSON(instance: object): Record { + const cls = instance.constructor as { blackKeys?: string[]; serializedKeys?: string[] }; + const keys = cls.serializedKeys ?? Object.keys(instance).filter((key) => !cls.blackKeys?.includes(key)); + return Object.fromEntries(keys.map((key) => [key, (instance as Record)[key]])); +} + +export interface StaffImageData { + hash: string | null; + image?: string | Buffer | { type: 'Buffer'; data: number[] }; + position: { + x: number; + y: number; + width: number; + height: number; + }; +} + +export interface StavesDetectionData { + interval: number; + phi1: number; + phi2: number; + middleRhos: number[]; +} + +export class LayoutArea { + static blackKeys = ['staff_images']; + + x!: number; + y!: number; + width!: number; + height!: number; + staves?: StavesDetectionData; + staff_images?: StaffImageData[]; + + constructor(data?: Record) { + assignSerializable(this, data); + } + + toJSON() { + return serializableToJSON(this); + } +} + +export class PageLayoutDetection { + areas!: LayoutArea[]; + + constructor(data?: Record) { + assignSerializable(this, data); + this.areas = this.areas?.map((area) => ensureSerializable(area, LayoutArea)) ?? []; + } + + toJSON() { + return serializableToJSON(this); + } +} + +function ensureSerializable(value: T, Class: Constructor): T { + return value instanceof Class ? value : (new Class(value) as T); +} + +export function ensureSerializableLayoutDetection | null | undefined>(layout: T): T { + if (!layout?.areas) return layout; + return ensureSerializable(layout, PageLayoutDetection) as T; +} + +export function ensureSerializableLayoutResult | null | undefined>(layoutResult: T): T { + if (!layoutResult?.detection) return layoutResult; + layoutResult.detection = ensureSerializableLayoutDetection(layoutResult.detection); + return layoutResult; +} + +export function ensureSerializableScorePageLayouts | null | undefined>(scoreData: T): T { + if (!Array.isArray(scoreData?.pages)) return scoreData; + + for (const page of scoreData.pages) { + if (page?.layout) page.layout = ensureSerializableLayoutDetection(page.layout); + } + + return scoreData; +} + +export function ensureSerializablePredictionLayout | null | undefined>(predictionData: T): T { + if (predictionData?.layout) predictionData.layout = ensureSerializableLayoutResult(predictionData.layout); + return predictionData; +} + +export function ensureSerializablePredictionResult | null | undefined>(result: T): T { + ensureSerializablePredictionLayout(result); + if (Array.isArray(result?.pages)) { + for (const page of result.pages) ensureSerializablePredictionLayout(page); + } + return result; +} diff --git a/backend/omr/dist/gauge-server.js b/backend/omr/dist/gauge-server.js index e7528933e498a724ecdf7cd9feaff3ef69998091..3bbe58bde6d2357dbc0688f8850f7ae3ce0a1295 100644 --- a/backend/omr/dist/gauge-server.js +++ b/backend/omr/dist/gauge-server.js @@ -1,2 +1,2 @@ -"use strict";var e=require("yargs"),t=require("msgpackr"),i=require("zeromq"),r=require("skia-canvas");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(require("gl"));globalThis.ImageData=r.ImageData;const o=e=>{const t=[];for(const i of e)for(const e of i)t.push(e);return t};class GLCanvas{constructor(e){this._width=256,this._height=192,this.ctx=e}get width(){return this._width}set width(e){this._width=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(e,this.height)}get height(){return this._height}set height(e){this._height=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(this.width,e)}addEventListener(e){}async toBuffer(){const e=new Uint8Array(this.width*this.height*4);this.ctx.readPixels(0,0,this.width,this.height,this.ctx.RGBA,this.ctx.UNSIGNED_BYTE,e);const t=new r.Canvas(this.width,this.height);return t.getContext("2d").putImageData(new r.ImageData(new Uint8ClampedArray(e),this.width,this.height),0,0),t.toBuffer("png")}}const s=a.default(512,192,{antialias:!0});const h=new class GaugeRenderer{constructor(e){this.width=256,this.height=192,this.source=e.source,this.gauge=e.gauge,this.canvas=new GLCanvas(s),s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT),s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT),s.getExtension("OES_element_index_uint"),this.program=s.createProgram();const t=s.createShader(s.VERTEX_SHADER);s.shaderSource(t,"//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n"),s.compileShader(t);const i=s.getShaderInfoLog(t);i&&console.warn("vs log:",i);const r=s.createShader(s.FRAGMENT_SHADER);s.shaderSource(r,"//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n"),s.compileShader(r);const n=s.getShaderInfoLog(r);n&&console.warn("fs log:",n),s.attachShader(this.program,t),s.attachShader(this.program,r),s.linkProgram(this.program);const a=s.getProgramInfoLog(this.program);a&&console.warn("program log:",a),s.deleteShader(t),s.deleteShader(r);const{name:o}=s.getActiveUniform(this.program,0),h=s.getUniformLocation(this.program,o),{name:c}=s.getActiveUniform(this.program,1),g=s.getUniformLocation(this.program,c),{name:f}=s.getActiveUniform(this.program,2),d=s.getUniformLocation(this.program,f),{name:u}=s.getActiveUniform(this.program,3),l=s.getUniformLocation(this.program,u),{name:m}=s.getActiveUniform(this.program,4),E=s.getUniformLocation(this.program,m),{name:p}=s.getActiveUniform(this.program,5),v=s.getUniformLocation(this.program,p);s.useProgram(this.program),s.uniformMatrix4fv(g,!1,new Float32Array([.002739726100116968,0,0,0,0,.010416666977107525,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1])),s.uniformMatrix4fv(h,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1,1])),s.uniformMatrix3fv(d,!1,new Float32Array([1,0,0,0,1,0,0,0,1])),s.uniform3f(l,1,1,1),s.uniform1f(E,1),s.uniform1i(v,0),this.texture=s.createTexture(),s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,this.texture),s.pixelStorei(37440,!0),s.pixelStorei(37441,!1),s.pixelStorei(s.UNPACK_ALIGNMENT,4),s.pixelStorei(37443,0),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.disable(s.CULL_FACE),s.depthMask(!0),s.colorMask(!0,!0,!0,!0),s.disable(s.STENCIL_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),this.pos=s.createBuffer(),this.uv=s.createBuffer(),this.ib=s.createBuffer();const A=s.getAttribLocation(this.program,"position"),_=s.getAttribLocation(this.program,"uv");s.enableVertexAttribArray(A),s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.vertexAttribPointer(A,3,s.FLOAT,!1,0,0),s.enableVertexAttribArray(_),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.vertexAttribPointer(_,2,s.FLOAT,!1,0,0)}updateMaterial({width:e=null,sw:t=this.width,sh:i=this.height}={}){if(t!==this.width||i!==this.height){Number.isFinite(e)?this.width=e:this.width=Math.round(this.height*t/i),this.canvas.width=this.width,this.canvas.height=this.height,s.viewport(0,0,this.width,this.height);const r=s.getUniformLocation(this.program,"projectionMatrix");s.uniformMatrix4fv(r,!1,new Float32Array([2/this.width,0,0,0,0,2/this.height,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1]))}const n=new r.Canvas(this.source.width,this.source.height);n.getContext("2d").drawImage(this.source,0,0),s.bindTexture(s.TEXTURE_2D,this.texture),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,n),s.generateMipmap(s.TEXTURE_2D)}updateGeometry(e=null){const{width:t,height:i}=this.gauge,n=new r.Canvas(t,i).getContext("2d");n.drawImage(this.gauge,0,0);const{data:a}=n.getImageData(0,0,t,i),h=this.width/t;e=Math.round(Number.isFinite(e)?e:i/2),e=Math.max(0,Math.min(i-1,e));const c=Array(i).fill(null).map((e,r)=>Array(t).fill(null).map((e,n)=>({uv:[(n+.5)/t,1-(r+.5)/i],position:[(n-t/2)*h,(a[4*(r*t+n)]+a[4*(r*t+n)+2]/256-128)/h,0]})));for(let i=e;i>0;--i)for(let e=0;ee.uv)),f=o(o(c).map(e=>e.position)),d=Array(i-1).fill(null).map((e,i)=>Array(t-1).fill(null).map((e,r)=>[i*t+r,i*t+r+1,(i+1)*t+r,(i+1)*t+r,(i+1)*t+r+1,i*t+r+1])),u=o(o(d));s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.bufferData(s.ARRAY_BUFFER,new Float32Array(f),s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.bufferData(s.ARRAY_BUFFER,new Float32Array(g),s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this.ib),s.bufferData(s.ELEMENT_ARRAY_BUFFER,new Uint32Array(u),s.STATIC_DRAW),this.primitiveCount=u.length}render(){return s.clearColor(1,1,1,1),s.clear(s.COLOR_BUFFER_BIT),s.drawElements(s.TRIANGLES,this.primitiveCount,s.UNSIGNED_INT,0),this.canvas.toBuffer()}dispose(){s.deleteBuffer(this.pos),s.deleteBuffer(this.uv),s.deleteBuffer(this.ib),s.deleteProgram(this.program),s.deleteTexture(this.texture)}}({source:new r.Image,gauge:new r.Image});console.info("%cstarry-omr%c v1.0.0 2026-04-23T11:21:07.532Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;");const c=["bind","constructor","toString","toJSON"];class GaugeServer{async bind(e){this.socket=new i.Reply,await this.socket.bind(e),console.log(`gauge server listening at ${e}`);try{for await(const[e]of this.socket){const{method:i,args:r,kwargs:n}=t.unpack(e)??{};if(console.log(`request: ${i}`),!c.includes(i)&&this[i])try{const e=await(this[i]?.(r,n));console.log(`success: ${i}`),await this.socket.send(t.pack({code:0,msg:"success",data:e}))}catch(e){console.error(`fail: ${i}, error: ${e}`),await this.socket.send(t.pack({code:-1,msg:`Error: ${JSON.stringify(e)}`,data:null}))}else console.error(`fail: ${i}, error: no method`),await this.socket.send(t.pack({code:-1,msg:`no method: ${i}`,data:null}))}}catch(t){console.log("restarting gauge server..",t.stack),await this.socket.close(),await this.bind(e)}}async predict(e,t){let i,n,a;return e&&([i,n,a]=e),t&&({source:i,gauge:n,baseY:a}=t),(async(e,t,i)=>{const n=await r.loadImage(e),a=await r.loadImage(t);return h.source=n,h.gauge=a,h.updateMaterial({width:a.width,sw:n.width,sh:n.height}),h.updateGeometry(i),console.log(process.memoryUsage().heapUsed),{buffer:await h.render(),size:{width:h.width,height:h.height}}})(i,n,a)}}!async function(){const t=new GaugeServer;await t.bind(`tcp://*:${e.argv.port}`)}(); +"use strict";var e=require("yargs"),t=require("msgpackr"),i=require("zeromq"),r=require("skia-canvas");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=n(require("gl"));globalThis.ImageData=r.ImageData;const o=e=>{const t=[];for(const i of e)for(const e of i)t.push(e);return t};class GLCanvas{constructor(e){this._width=256,this._height=192,this.ctx=e}get width(){return this._width}set width(e){this._width=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(e,this.height)}get height(){return this._height}set height(e){this._height=e;this.ctx.getExtension("STACKGL_resize_drawingbuffer").resize(this.width,e)}addEventListener(e){}async toBuffer(){const e=new Uint8Array(this.width*this.height*4);this.ctx.readPixels(0,0,this.width,this.height,this.ctx.RGBA,this.ctx.UNSIGNED_BYTE,e);const t=new r.Canvas(this.width,this.height);return t.getContext("2d").putImageData(new r.ImageData(new Uint8ClampedArray(e),this.width,this.height),0,0),t.toBuffer("png")}}const s=a.default(512,192,{antialias:!0});const h=new class GaugeRenderer{constructor(e){this.width=256,this.height=192,this.source=e.source,this.gauge=e.gauge,this.canvas=new GLCanvas(s),s.getShaderPrecisionFormat(s.VERTEX_SHADER,s.HIGH_FLOAT),s.getShaderPrecisionFormat(s.FRAGMENT_SHADER,s.HIGH_FLOAT),s.getExtension("OES_element_index_uint"),this.program=s.createProgram();const t=s.createShader(s.VERTEX_SHADER);s.shaderSource(t,"//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n"),s.compileShader(t);const i=s.getShaderInfoLog(t);i&&console.warn("vs log:",i);const r=s.createShader(s.FRAGMENT_SHADER);s.shaderSource(r,"//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n"),s.compileShader(r);const n=s.getShaderInfoLog(r);n&&console.warn("fs log:",n),s.attachShader(this.program,t),s.attachShader(this.program,r),s.linkProgram(this.program);const a=s.getProgramInfoLog(this.program);a&&console.warn("program log:",a),s.deleteShader(t),s.deleteShader(r);const{name:o}=s.getActiveUniform(this.program,0),h=s.getUniformLocation(this.program,o),{name:c}=s.getActiveUniform(this.program,1),g=s.getUniformLocation(this.program,c),{name:f}=s.getActiveUniform(this.program,2),d=s.getUniformLocation(this.program,f),{name:u}=s.getActiveUniform(this.program,3),l=s.getUniformLocation(this.program,u),{name:m}=s.getActiveUniform(this.program,4),E=s.getUniformLocation(this.program,m),{name:p}=s.getActiveUniform(this.program,5),v=s.getUniformLocation(this.program,p);s.useProgram(this.program),s.uniformMatrix4fv(g,!1,new Float32Array([.002739726100116968,0,0,0,0,.010416666977107525,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1])),s.uniformMatrix4fv(h,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1,1])),s.uniformMatrix3fv(d,!1,new Float32Array([1,0,0,0,1,0,0,0,1])),s.uniform3f(l,1,1,1),s.uniform1f(E,1),s.uniform1i(v,0),this.texture=s.createTexture(),s.activeTexture(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,this.texture),s.pixelStorei(37440,!0),s.pixelStorei(37441,!1),s.pixelStorei(s.UNPACK_ALIGNMENT,4),s.pixelStorei(37443,0),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_WRAP_T,s.CLAMP_TO_EDGE),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MAG_FILTER,s.LINEAR),s.texParameteri(s.TEXTURE_2D,s.TEXTURE_MIN_FILTER,s.LINEAR_MIPMAP_LINEAR),s.disable(s.CULL_FACE),s.depthMask(!0),s.colorMask(!0,!0,!0,!0),s.disable(s.STENCIL_TEST),s.disable(s.POLYGON_OFFSET_FILL),s.disable(s.SAMPLE_ALPHA_TO_COVERAGE),this.pos=s.createBuffer(),this.uv=s.createBuffer(),this.ib=s.createBuffer();const A=s.getAttribLocation(this.program,"position"),_=s.getAttribLocation(this.program,"uv");s.enableVertexAttribArray(A),s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.vertexAttribPointer(A,3,s.FLOAT,!1,0,0),s.enableVertexAttribArray(_),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.vertexAttribPointer(_,2,s.FLOAT,!1,0,0)}updateMaterial({width:e=null,sw:t=this.width,sh:i=this.height}={}){if(t!==this.width||i!==this.height){Number.isFinite(e)?this.width=e:this.width=Math.round(this.height*t/i),this.canvas.width=this.width,this.canvas.height=this.height,s.viewport(0,0,this.width,this.height);const r=s.getUniformLocation(this.program,"projectionMatrix");s.uniformMatrix4fv(r,!1,new Float32Array([2/this.width,0,0,0,0,2/this.height,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1]))}const n=new r.Canvas(this.source.width,this.source.height);n.getContext("2d").drawImage(this.source,0,0),s.bindTexture(s.TEXTURE_2D,this.texture),s.texImage2D(s.TEXTURE_2D,0,s.RGBA,s.RGBA,s.UNSIGNED_BYTE,n),s.generateMipmap(s.TEXTURE_2D)}updateGeometry(e=null){const{width:t,height:i}=this.gauge,n=new r.Canvas(t,i).getContext("2d");n.drawImage(this.gauge,0,0);const{data:a}=n.getImageData(0,0,t,i),h=this.width/t;e=Math.round(Number.isFinite(e)?e:i/2),e=Math.max(0,Math.min(i-1,e));const c=Array(i).fill(null).map((e,r)=>Array(t).fill(null).map((e,n)=>({uv:[(n+.5)/t,1-(r+.5)/i],position:[(n-t/2)*h,(a[4*(r*t+n)]+a[4*(r*t+n)+2]/256-128)/h,0]})));for(let i=e;i>0;--i)for(let e=0;ee.uv)),f=o(o(c).map(e=>e.position)),d=Array(i-1).fill(null).map((e,i)=>Array(t-1).fill(null).map((e,r)=>[i*t+r,i*t+r+1,(i+1)*t+r,(i+1)*t+r,(i+1)*t+r+1,i*t+r+1])),u=o(o(d));s.bindBuffer(s.ARRAY_BUFFER,this.pos),s.bufferData(s.ARRAY_BUFFER,new Float32Array(f),s.STATIC_DRAW),s.bindBuffer(s.ARRAY_BUFFER,this.uv),s.bufferData(s.ARRAY_BUFFER,new Float32Array(g),s.STATIC_DRAW),s.bindBuffer(s.ELEMENT_ARRAY_BUFFER,this.ib),s.bufferData(s.ELEMENT_ARRAY_BUFFER,new Uint32Array(u),s.STATIC_DRAW),this.primitiveCount=u.length}render(){return s.clearColor(1,1,1,1),s.clear(s.COLOR_BUFFER_BIT),s.drawElements(s.TRIANGLES,this.primitiveCount,s.UNSIGNED_INT,0),this.canvas.toBuffer()}dispose(){s.deleteBuffer(this.pos),s.deleteBuffer(this.uv),s.deleteBuffer(this.ib),s.deleteProgram(this.program),s.deleteTexture(this.texture)}}({source:new r.Image,gauge:new r.Image});console.info("%cstarry-omr%c v1.0.0 2026-04-30T10:34:07.391Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;");const c=["bind","constructor","toString","toJSON"];class GaugeServer{async bind(e){this.socket=new i.Reply,await this.socket.bind(e),console.log(`gauge server listening at ${e}`);try{for await(const[e]of this.socket){const{method:i,args:r,kwargs:n}=t.unpack(e)??{};if(console.log(`request: ${i}`),!c.includes(i)&&this[i])try{const e=await(this[i]?.(r,n));console.log(`success: ${i}`),await this.socket.send(t.pack({code:0,msg:"success",data:e}))}catch(e){console.error(`fail: ${i}, error: ${e}`),await this.socket.send(t.pack({code:-1,msg:`Error: ${JSON.stringify(e)}`,data:null}))}else console.error(`fail: ${i}, error: no method`),await this.socket.send(t.pack({code:-1,msg:`no method: ${i}`,data:null}))}}catch(t){console.log("restarting gauge server..",t.stack),await this.socket.close(),await this.bind(e)}}async predict(e,t){let i,n,a;return e&&([i,n,a]=e),t&&({source:i,gauge:n,baseY:a}=t),(async(e,t,i)=>{const n=await r.loadImage(e),a=await r.loadImage(t);return h.source=n,h.gauge=a,h.updateMaterial({width:a.width,sw:n.width,sh:n.height}),h.updateGeometry(i),console.log(process.memoryUsage().heapUsed),{buffer:await h.render(),size:{width:h.width,height:h.height}}})(i,n,a)}}!async function(){const t=new GaugeServer;await t.bind(`tcp://*:${e.argv.port}`)}(); //# sourceMappingURL=gauge-server.js.map diff --git a/backend/omr/dist/gauge-server.js.map b/backend/omr/dist/gauge-server.js.map index 6a489d5a97d368d1e740b8ec04aa865815ce9b4a..1c5c980ed8172154ae102f39e881eb7364c04eba 100644 --- a/backend/omr/dist/gauge-server.js.map +++ b/backend/omr/dist/gauge-server.js.map @@ -1 +1 @@ -{"version":3,"file":"gauge-server.js","sources":["../../libs/gauge-renderer.ts","../../../src/pages/playground/scripts/shaders.ts","../src/gauge-server.ts"],"sourcesContent":["/* global cv */\nimport { Canvas, Image, loadImage, ImageData } from 'skia-canvas';\n// threejs内部使用了OffscreenCanvas\n//(globalThis as any).OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\nglobalThis.ImageData = ImageData;\n\nimport createContext from 'gl';\n\nimport * as SHADER_SOURCE from '../../src/pages/playground/scripts/shaders';\n\n//const cc = (a: T[][]): T[] => a.flat(1);\t// This is slower!\nconst cc = (a: T[][]): T[] => {\n\tconst result: T[] = [];\n\tfor (const x of a) {\n\t\tfor (const e of x) result.push(e);\n\t}\n\n\treturn result;\n};\n\ntype RenderContext = ReturnType;\n\nclass GLCanvas {\n\tctx: RenderContext;\n\t_width: number = 256;\n\t_height: number = 192;\n\n\tresizeBuffer: number[];\n\n\tconstructor(context: RenderContext) {\n\t\tthis.ctx = context;\n\t}\n\n\tget width() {\n\t\treturn this._width;\n\t}\n\n\tset width(width: number) {\n\t\tthis._width = width;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(width, this.height);\n\t}\n\n\tget height() {\n\t\treturn this._height;\n\t}\n\n\tset height(height: number) {\n\t\tthis._height = height;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(this.width, height);\n\t}\n\n\t/*// @ts-ignore\n\tgetContext(type, options) {\n\t\tif (type === 'webgl') {\n\t\t\tthis.ctx = createContext(200, 300, options);\n\n\t\t\treturn this.ctx;\n\t\t}\n\n\t\treturn null as WebGLRenderingContext;\n\t}*/\n\n\taddEventListener(evt: 'webglcontextlost') {}\n\n\tasync toBuffer() {\n\t\tconst pixels = new Uint8Array(this.width * this.height * 4);\n\t\tthis.ctx.readPixels(0, 0, this.width, this.height, this.ctx.RGBA, this.ctx.UNSIGNED_BYTE, pixels);\n\n\t\tconst canvas = new Canvas(this.width, this.height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.putImageData(new ImageData(new Uint8ClampedArray(pixels), this.width, this.height), 0, 0);\n\n\t\treturn canvas.toBuffer('png');\n\t}\n}\n\ninterface GaugeRendererInitOptions {\n\tsource: HTMLImageElement;\n\tgauge: HTMLImageElement;\n}\n\nconst gl = createContext(512, 192, { antialias: true });\n\nexport default class GaugeRenderer {\n\tsource: Image; // base64 string\n\tgauge: Image;\n\tcanvas: GLCanvas;\n\n\tprogram: WebGLProgram;\n\ttexture: WebGLTexture;\n\tpos: WebGLBuffer;\n\tuv: WebGLBuffer;\n\tib: WebGLBuffer;\n\tprimitiveCount: number;\n\n\twidth: number = 256;\n\theight: number = 192;\n\n\tconstructor(options: GaugeRendererInitOptions) {\n\t\tthis.source = options.source;\n\t\tthis.gauge = options.gauge;\n\t\tthis.canvas = new GLCanvas(gl);\n\n\t\tgl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n\t\tgl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n\n\t\tgl.getExtension('OES_element_index_uint');\n\n\t\t// initial program\n\t\tthis.program = gl.createProgram();\n\n\t\tconst vsShader = gl.createShader(gl.VERTEX_SHADER);\n\t\tgl.shaderSource(vsShader, SHADER_SOURCE.vs);\n\t\tgl.compileShader(vsShader);\n\t\tconst logVs = gl.getShaderInfoLog(vsShader);\n\t\tlogVs && console.warn('vs log:', logVs);\n\n\t\tconst fsShader = gl.createShader(gl.FRAGMENT_SHADER);\n\t\tgl.shaderSource(fsShader, SHADER_SOURCE.fs);\n\t\tgl.compileShader(fsShader);\n\t\tconst logFs = gl.getShaderInfoLog(fsShader);\n\t\tlogFs && console.warn('fs log:', logFs);\n\n\t\tgl.attachShader(this.program, vsShader);\n\t\tgl.attachShader(this.program, fsShader);\n\t\tgl.linkProgram(this.program);\n\n\t\tconst logProgram = gl.getProgramInfoLog(this.program);\n\t\tlogProgram && console.warn('program log:', logProgram);\n\n\t\tgl.deleteShader(vsShader);\n\t\tgl.deleteShader(fsShader);\n\n\t\tconst { name: nameModelView } = gl.getActiveUniform(this.program, 0);\n\t\tconst modelMat = gl.getUniformLocation(this.program, nameModelView);\n\t\tconst { name: nameProj } = gl.getActiveUniform(this.program, 1);\n\t\tconst projMat = gl.getUniformLocation(this.program, nameProj);\n\t\tconst { name: nameUV } = gl.getActiveUniform(this.program, 2);\n\t\tconst uvMat = gl.getUniformLocation(this.program, nameUV);\n\t\tconst { name: nameDiffuse } = gl.getActiveUniform(this.program, 3);\n\t\tconst diffuse = gl.getUniformLocation(this.program, nameDiffuse);\n\t\tconst { name: nameOpacity } = gl.getActiveUniform(this.program, 4);\n\t\tconst opacity = gl.getUniformLocation(this.program, nameOpacity);\n\t\tconst { name: nameMap } = gl.getActiveUniform(this.program, 5);\n\t\tconst map = gl.getUniformLocation(this.program, nameMap);\n\n\t\tgl.useProgram(this.program);\n\n\t\tgl.uniformMatrix4fv(\n\t\t\tprojMat,\n\t\t\tfalse,\n\t\t\t//new Float32Array([0.0026385225355625153, 0, 0, 0, 0, -0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\tnew Float32Array([0.002739726100116968, 0, 0, 0, 0, 0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t);\n\t\tgl.uniformMatrix4fv(modelMat, false, new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -1, 1]));\n\t\tgl.uniformMatrix3fv(uvMat, false, new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]));\n\t\tgl.uniform3f(diffuse, 1, 1, 1);\n\t\tgl.uniform1f(opacity, 1);\n\t\tgl.uniform1i(map, 0);\n\n\t\t// texture\n\t\tthis.texture = gl.createTexture();\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.pixelStorei(37440, true);\n\t\tgl.pixelStorei(37441, false);\n\t\tgl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n\t\tgl.pixelStorei(37443, 0);\n\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n\n\t\tgl.disable(gl.CULL_FACE);\n\t\tgl.depthMask(true);\n\t\tgl.colorMask(true, true, true, true);\n\t\tgl.disable(gl.STENCIL_TEST);\n\t\tgl.disable(gl.POLYGON_OFFSET_FILL);\n\t\tgl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\n\n\t\t// buffers\n\t\tthis.pos = gl.createBuffer();\n\t\tthis.uv = gl.createBuffer();\n\t\tthis.ib = gl.createBuffer();\n\n\t\tconst iPos = gl.getAttribLocation(this.program, 'position');\n\t\tconst iUV = gl.getAttribLocation(this.program, 'uv');\n\t\t//console.log('indices:', iPos, iUV);\n\n\t\tgl.enableVertexAttribArray(iPos);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.vertexAttribPointer(iPos, 3, gl.FLOAT, false, 0, 0);\n\n\t\tgl.enableVertexAttribArray(iUV);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.vertexAttribPointer(iUV, 2, gl.FLOAT, false, 0, 0);\n\t}\n\n\tupdateMaterial({ width = null, sw = this.width, sh = this.height } = {}) {\n\t\tif (sw !== this.width || sh !== this.height) {\n\t\t\tif (Number.isFinite(width)) {\n\t\t\t\tthis.width = width;\n\t\t\t} else {\n\t\t\t\tthis.width = Math.round((this.height * sw) / sh);\n\t\t\t}\n\n\t\t\tthis.canvas.width = this.width;\n\t\t\tthis.canvas.height = this.height;\n\n\t\t\tgl.viewport(0, 0, this.width, this.height);\n\n\t\t\tconst projMat = gl.getUniformLocation(this.program, 'projectionMatrix');\n\t\t\tgl.uniformMatrix4fv(\n\t\t\t\tprojMat,\n\t\t\t\tfalse,\n\t\t\t\tnew Float32Array([2 / this.width, 0, 0, 0, 0, 2 / this.height, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\t);\n\t\t}\n\n\t\t// image to canvas\n\t\tconst sourceCanvas = new Canvas(this.source.width, this.source.height);\n\t\tsourceCanvas.getContext('2d').drawImage(this.source, 0, 0);\n\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, sourceCanvas as any);\n\t\tgl.generateMipmap(gl.TEXTURE_2D);\n\t}\n\n\tupdateGeometry(baseY = null) {\n\t\tconst { width, height } = this.gauge;\n\t\tconst canvas = new Canvas(width, height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.drawImage(this.gauge, 0, 0);\n\t\tconst { data: buffer } = ctx.getImageData(0, 0, width, height);\n\n\t\tconst xFactor = this.width / width;\n\n\t\tbaseY = Math.round(Number.isFinite(baseY) ? baseY : height / 2);\n\t\tbaseY = Math.max(0, Math.min(height - 1, baseY));\n\n\t\tconst propertyArray = Array(height)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => ({\n\t\t\t\t\t\tuv: [(x + 0.5) / width, 1 - (y + 0.5) / height],\n\t\t\t\t\t\tposition: [(x - width / 2) * xFactor, (buffer[(y * width + x) * 4] + buffer[(y * width + x) * 4 + 2] / 256 - 128) / xFactor, 0],\n\t\t\t\t\t}))\n\t\t\t);\n\n\t\t// integral X by K\n\t\tfor (let y = baseY; y > 0; --y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y - 1][x].position[0] = propertyArray[y][x].position[0] - ((buffer[(y * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\t\tfor (let y = baseY + 1; y < height; ++y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y][x].position[0] = propertyArray[y - 1][x].position[0] + ((buffer[((y - 1) * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\n\t\tconst uvs = cc(cc(propertyArray).map((p) => p.uv));\n\t\tconst positions = cc(cc(propertyArray).map((p) => p.position));\n\n\t\tconst faces = Array(height - 1)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width - 1)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => [y * width + x, y * width + x + 1, (y + 1) * width + x, (y + 1) * width + x, (y + 1) * width + x + 1, y * width + x + 1])\n\t\t\t);\n\t\tconst indices = cc(cc(faces));\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(uvs), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(indices), gl.STATIC_DRAW);\n\n\t\tthis.primitiveCount = indices.length;\n\t}\n\n\trender() {\n\t\tgl.clearColor(1, 1, 1, 1);\n\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\n\t\t//gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\n\t\tgl.drawElements(gl.TRIANGLES, this.primitiveCount, gl.UNSIGNED_INT, 0);\n\n\t\treturn this.canvas.toBuffer();\n\t}\n\n\tdispose() {\n\t\tgl.deleteBuffer(this.pos);\n\t\tgl.deleteBuffer(this.uv);\n\t\tgl.deleteBuffer(this.ib);\n\n\t\tgl.deleteProgram(this.program);\n\t\tgl.deleteTexture(this.texture);\n\t}\n}\n\nconst gaugeRenderer = new GaugeRenderer({\n\tsource: new Image(),\n\tgauge: new Image(),\n});\n\nexport const renderGaugeImage = async (sourceURL: string | Buffer, gaugeURL: string | Buffer, baseY?: number) => {\n\tconst source = await loadImage(sourceURL);\n\tconst gauge = await loadImage(gaugeURL);\n\n\tgaugeRenderer.source = source;\n\tgaugeRenderer.gauge = gauge;\n\n\tgaugeRenderer.updateMaterial({\n\t\twidth: gauge.width,\n\t\tsw: source.width,\n\t\tsh: source.height,\n\t});\n\n\tgaugeRenderer.updateGeometry(baseY);\n\n\tconsole.log(process.memoryUsage().heapUsed);\n\n\treturn {\n\t\tbuffer: await gaugeRenderer.render(),\n\t\tsize: {\n\t\t\twidth: gaugeRenderer.width,\n\t\t\theight: gaugeRenderer.height,\n\t\t},\n\t};\n};\n\n// renderGaugeImage('./images/source.png', './images/gauge.png');\n","export const vs = `//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n`;\n\nexport const fs = `//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n`;\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-23T11:21:07.532Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport { argv } from 'yargs';\nimport { pack, unpack } from 'msgpackr';\nimport { Reply } from 'zeromq';\nimport { renderGaugeImage } from '../../libs/gauge-renderer';\n\ninterface Params {\n\tmethod: string;\n\targs: any[];\n\tkwargs: Record;\n}\n\nconst unsafeMethods = ['bind', 'constructor', 'toString', 'toJSON'];\n\nclass GaugeServer {\n\tprivate socket: Reply;\n\n\tasync bind(port?: string) {\n\t\tthis.socket = new Reply();\n\t\tawait this.socket.bind(port);\n\n\t\tconsole.log(`gauge server listening at ${port}`);\n\n\t\ttry {\n\t\t\tfor await (const [data] of this.socket) {\n\t\t\t\tconst { method, args, kwargs } = (unpack(data) as Params) ?? {};\n\n\t\t\t\tconsole.log(`request: ${method}`);\n\n\t\t\t\tif (!unsafeMethods.includes(method) && this[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst data = await this[method]?.(args, kwargs);\n\t\t\t\t\t\tconsole.log(`success: ${method}`);\n\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\tmsg: 'success',\n\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconsole.error(`fail: ${method}, error: ${err}`);\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\t\tmsg: `Error: ${JSON.stringify(err)}`,\n\t\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`fail: ${method}, error: no method`);\n\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\tmsg: `no method: ${method}`,\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log('restarting gauge server..', err.stack);\n\t\t\tawait this.socket.close();\n\t\t\tawait this.bind(port);\n\t\t}\n\t}\n\n\tasync predict(args?: any[], kwargs?: Record) {\n\t\tlet source, gauge, baseY;\n\n\t\tif (args) {\n\t\t\t[source, gauge, baseY] = args;\n\t\t}\n\n\t\tif (kwargs) {\n\t\t\t({ source, gauge, baseY } = kwargs);\n\t\t}\n\n\t\treturn renderGaugeImage(source, gauge, baseY);\n\t}\n}\n\nasync function main() {\n\tconst server = new GaugeServer();\n\n\tawait server.bind(`tcp://*:${argv.port}`);\n}\n\nmain();\n"],"names":["globalThis","ImageData","cc","a","result","x","e","push","GLCanvas","constructor","context","this","_width","_height","ctx","width","getExtension","resize","height","addEventListener","evt","toBuffer","pixels","Uint8Array","readPixels","RGBA","UNSIGNED_BYTE","canvas","Canvas","getContext","putImageData","Uint8ClampedArray","gl","createContext","antialias","gaugeRenderer","GaugeRenderer","options","source","gauge","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","program","createProgram","vsShader","createShader","shaderSource","compileShader","logVs","getShaderInfoLog","console","warn","fsShader","logFs","attachShader","linkProgram","logProgram","getProgramInfoLog","deleteShader","name","nameModelView","getActiveUniform","modelMat","getUniformLocation","nameProj","projMat","nameUV","uvMat","nameDiffuse","diffuse","nameOpacity","opacity","nameMap","map","useProgram","uniformMatrix4fv","Float32Array","uniformMatrix3fv","uniform3f","uniform1f","uniform1i","texture","createTexture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_ALIGNMENT","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","disable","CULL_FACE","depthMask","colorMask","STENCIL_TEST","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","pos","createBuffer","uv","ib","iPos","getAttribLocation","iUV","enableVertexAttribArray","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","FLOAT","updateMaterial","sw","sh","Number","isFinite","Math","round","viewport","sourceCanvas","drawImage","texImage2D","generateMipmap","updateGeometry","baseY","data","buffer","getImageData","xFactor","max","min","propertyArray","Array","fill","_","y","position","uvs","p","positions","faces","indices","bufferData","STATIC_DRAW","ELEMENT_ARRAY_BUFFER","Uint32Array","primitiveCount","length","render","clearColor","clear","COLOR_BUFFER_BIT","drawElements","TRIANGLES","UNSIGNED_INT","dispose","deleteBuffer","deleteProgram","deleteTexture","Image","info","unsafeMethods","GaugeServer","bind","port","socket","Reply","log","method","args","kwargs","unpack","includes","send","pack","code","msg","err","error","JSON","stringify","stack","close","predict","async","sourceURL","gaugeURL","loadImage","process","memoryUsage","heapUsed","size","renderGaugeImage","server","argv","main"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gauge-server.js","sources":["../../libs/gauge-renderer.ts","../../../src/pages/playground/scripts/shaders.ts","../src/gauge-server.ts"],"sourcesContent":["/* global cv */\nimport { Canvas, Image, loadImage, ImageData } from 'skia-canvas';\n// threejs内部使用了OffscreenCanvas\n//(globalThis as any).OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\nglobalThis.ImageData = ImageData;\n\nimport createContext from 'gl';\n\nimport * as SHADER_SOURCE from '../../src/pages/playground/scripts/shaders';\n\n//const cc = (a: T[][]): T[] => a.flat(1);\t// This is slower!\nconst cc = (a: T[][]): T[] => {\n\tconst result: T[] = [];\n\tfor (const x of a) {\n\t\tfor (const e of x) result.push(e);\n\t}\n\n\treturn result;\n};\n\ntype RenderContext = ReturnType;\n\nclass GLCanvas {\n\tctx: RenderContext;\n\t_width: number = 256;\n\t_height: number = 192;\n\n\tresizeBuffer: number[];\n\n\tconstructor(context: RenderContext) {\n\t\tthis.ctx = context;\n\t}\n\n\tget width() {\n\t\treturn this._width;\n\t}\n\n\tset width(width: number) {\n\t\tthis._width = width;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(width, this.height);\n\t}\n\n\tget height() {\n\t\treturn this._height;\n\t}\n\n\tset height(height: number) {\n\t\tthis._height = height;\n\t\tconst ext = this.ctx.getExtension('STACKGL_resize_drawingbuffer');\n\t\text.resize(this.width, height);\n\t}\n\n\t/*// @ts-ignore\n\tgetContext(type, options) {\n\t\tif (type === 'webgl') {\n\t\t\tthis.ctx = createContext(200, 300, options);\n\n\t\t\treturn this.ctx;\n\t\t}\n\n\t\treturn null as WebGLRenderingContext;\n\t}*/\n\n\taddEventListener(evt: 'webglcontextlost') {}\n\n\tasync toBuffer() {\n\t\tconst pixels = new Uint8Array(this.width * this.height * 4);\n\t\tthis.ctx.readPixels(0, 0, this.width, this.height, this.ctx.RGBA, this.ctx.UNSIGNED_BYTE, pixels);\n\n\t\tconst canvas = new Canvas(this.width, this.height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.putImageData(new ImageData(new Uint8ClampedArray(pixels), this.width, this.height), 0, 0);\n\n\t\treturn canvas.toBuffer('png');\n\t}\n}\n\ninterface GaugeRendererInitOptions {\n\tsource: HTMLImageElement;\n\tgauge: HTMLImageElement;\n}\n\nconst gl = createContext(512, 192, { antialias: true });\n\nexport default class GaugeRenderer {\n\tsource: Image; // base64 string\n\tgauge: Image;\n\tcanvas: GLCanvas;\n\n\tprogram: WebGLProgram;\n\ttexture: WebGLTexture;\n\tpos: WebGLBuffer;\n\tuv: WebGLBuffer;\n\tib: WebGLBuffer;\n\tprimitiveCount: number;\n\n\twidth: number = 256;\n\theight: number = 192;\n\n\tconstructor(options: GaugeRendererInitOptions) {\n\t\tthis.source = options.source;\n\t\tthis.gauge = options.gauge;\n\t\tthis.canvas = new GLCanvas(gl);\n\n\t\tgl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n\t\tgl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n\n\t\tgl.getExtension('OES_element_index_uint');\n\n\t\t// initial program\n\t\tthis.program = gl.createProgram();\n\n\t\tconst vsShader = gl.createShader(gl.VERTEX_SHADER);\n\t\tgl.shaderSource(vsShader, SHADER_SOURCE.vs);\n\t\tgl.compileShader(vsShader);\n\t\tconst logVs = gl.getShaderInfoLog(vsShader);\n\t\tlogVs && console.warn('vs log:', logVs);\n\n\t\tconst fsShader = gl.createShader(gl.FRAGMENT_SHADER);\n\t\tgl.shaderSource(fsShader, SHADER_SOURCE.fs);\n\t\tgl.compileShader(fsShader);\n\t\tconst logFs = gl.getShaderInfoLog(fsShader);\n\t\tlogFs && console.warn('fs log:', logFs);\n\n\t\tgl.attachShader(this.program, vsShader);\n\t\tgl.attachShader(this.program, fsShader);\n\t\tgl.linkProgram(this.program);\n\n\t\tconst logProgram = gl.getProgramInfoLog(this.program);\n\t\tlogProgram && console.warn('program log:', logProgram);\n\n\t\tgl.deleteShader(vsShader);\n\t\tgl.deleteShader(fsShader);\n\n\t\tconst { name: nameModelView } = gl.getActiveUniform(this.program, 0);\n\t\tconst modelMat = gl.getUniformLocation(this.program, nameModelView);\n\t\tconst { name: nameProj } = gl.getActiveUniform(this.program, 1);\n\t\tconst projMat = gl.getUniformLocation(this.program, nameProj);\n\t\tconst { name: nameUV } = gl.getActiveUniform(this.program, 2);\n\t\tconst uvMat = gl.getUniformLocation(this.program, nameUV);\n\t\tconst { name: nameDiffuse } = gl.getActiveUniform(this.program, 3);\n\t\tconst diffuse = gl.getUniformLocation(this.program, nameDiffuse);\n\t\tconst { name: nameOpacity } = gl.getActiveUniform(this.program, 4);\n\t\tconst opacity = gl.getUniformLocation(this.program, nameOpacity);\n\t\tconst { name: nameMap } = gl.getActiveUniform(this.program, 5);\n\t\tconst map = gl.getUniformLocation(this.program, nameMap);\n\n\t\tgl.useProgram(this.program);\n\n\t\tgl.uniformMatrix4fv(\n\t\t\tprojMat,\n\t\t\tfalse,\n\t\t\t//new Float32Array([0.0026385225355625153, 0, 0, 0, 0, -0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\tnew Float32Array([0.002739726100116968, 0, 0, 0, 0, 0.010416666977107525, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t);\n\t\tgl.uniformMatrix4fv(modelMat, false, new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -1, 1]));\n\t\tgl.uniformMatrix3fv(uvMat, false, new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]));\n\t\tgl.uniform3f(diffuse, 1, 1, 1);\n\t\tgl.uniform1f(opacity, 1);\n\t\tgl.uniform1i(map, 0);\n\n\t\t// texture\n\t\tthis.texture = gl.createTexture();\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.pixelStorei(37440, true);\n\t\tgl.pixelStorei(37441, false);\n\t\tgl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n\t\tgl.pixelStorei(37443, 0);\n\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n\n\t\tgl.disable(gl.CULL_FACE);\n\t\tgl.depthMask(true);\n\t\tgl.colorMask(true, true, true, true);\n\t\tgl.disable(gl.STENCIL_TEST);\n\t\tgl.disable(gl.POLYGON_OFFSET_FILL);\n\t\tgl.disable(gl.SAMPLE_ALPHA_TO_COVERAGE);\n\n\t\t// buffers\n\t\tthis.pos = gl.createBuffer();\n\t\tthis.uv = gl.createBuffer();\n\t\tthis.ib = gl.createBuffer();\n\n\t\tconst iPos = gl.getAttribLocation(this.program, 'position');\n\t\tconst iUV = gl.getAttribLocation(this.program, 'uv');\n\t\t//console.log('indices:', iPos, iUV);\n\n\t\tgl.enableVertexAttribArray(iPos);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.vertexAttribPointer(iPos, 3, gl.FLOAT, false, 0, 0);\n\n\t\tgl.enableVertexAttribArray(iUV);\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.vertexAttribPointer(iUV, 2, gl.FLOAT, false, 0, 0);\n\t}\n\n\tupdateMaterial({ width = null, sw = this.width, sh = this.height } = {}) {\n\t\tif (sw !== this.width || sh !== this.height) {\n\t\t\tif (Number.isFinite(width)) {\n\t\t\t\tthis.width = width;\n\t\t\t} else {\n\t\t\t\tthis.width = Math.round((this.height * sw) / sh);\n\t\t\t}\n\n\t\t\tthis.canvas.width = this.width;\n\t\t\tthis.canvas.height = this.height;\n\n\t\t\tgl.viewport(0, 0, this.width, this.height);\n\n\t\t\tconst projMat = gl.getUniformLocation(this.program, 'projectionMatrix');\n\t\t\tgl.uniformMatrix4fv(\n\t\t\t\tprojMat,\n\t\t\t\tfalse,\n\t\t\t\tnew Float32Array([2 / this.width, 0, 0, 0, 0, 2 / this.height, 0, 0, 0, 0, -0.20202019810676575, 0, 0, 0, -1.0202020406723022, 1])\n\t\t\t);\n\t\t}\n\n\t\t// image to canvas\n\t\tconst sourceCanvas = new Canvas(this.source.width, this.source.height);\n\t\tsourceCanvas.getContext('2d').drawImage(this.source, 0, 0);\n\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, sourceCanvas as any);\n\t\tgl.generateMipmap(gl.TEXTURE_2D);\n\t}\n\n\tupdateGeometry(baseY = null) {\n\t\tconst { width, height } = this.gauge;\n\t\tconst canvas = new Canvas(width, height);\n\t\tconst ctx = canvas.getContext('2d');\n\t\tctx.drawImage(this.gauge, 0, 0);\n\t\tconst { data: buffer } = ctx.getImageData(0, 0, width, height);\n\n\t\tconst xFactor = this.width / width;\n\n\t\tbaseY = Math.round(Number.isFinite(baseY) ? baseY : height / 2);\n\t\tbaseY = Math.max(0, Math.min(height - 1, baseY));\n\n\t\tconst propertyArray = Array(height)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => ({\n\t\t\t\t\t\tuv: [(x + 0.5) / width, 1 - (y + 0.5) / height],\n\t\t\t\t\t\tposition: [(x - width / 2) * xFactor, (buffer[(y * width + x) * 4] + buffer[(y * width + x) * 4 + 2] / 256 - 128) / xFactor, 0],\n\t\t\t\t\t}))\n\t\t\t);\n\n\t\t// integral X by K\n\t\tfor (let y = baseY; y > 0; --y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y - 1][x].position[0] = propertyArray[y][x].position[0] - ((buffer[(y * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\t\tfor (let y = baseY + 1; y < height; ++y) {\n\t\t\tfor (let x = 0; x < width; ++x)\n\t\t\t\tpropertyArray[y][x].position[0] = propertyArray[y - 1][x].position[0] + ((buffer[((y - 1) * width + x) * 4 + 1] - 128) * xFactor) / 127;\n\t\t}\n\n\t\tconst uvs = cc(cc(propertyArray).map((p) => p.uv));\n\t\tconst positions = cc(cc(propertyArray).map((p) => p.position));\n\n\t\tconst faces = Array(height - 1)\n\t\t\t.fill(null)\n\t\t\t.map((_, y) =>\n\t\t\t\tArray(width - 1)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, x) => [y * width + x, y * width + x + 1, (y + 1) * width + x, (y + 1) * width + x, (y + 1) * width + x + 1, y * width + x + 1])\n\t\t\t);\n\t\tconst indices = cc(cc(faces));\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.pos);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.uv);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, new Float32Array(uvs), gl.STATIC_DRAW);\n\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint32Array(indices), gl.STATIC_DRAW);\n\n\t\tthis.primitiveCount = indices.length;\n\t}\n\n\trender() {\n\t\tgl.clearColor(1, 1, 1, 1);\n\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\n\t\t//gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.ib);\n\n\t\tgl.drawElements(gl.TRIANGLES, this.primitiveCount, gl.UNSIGNED_INT, 0);\n\n\t\treturn this.canvas.toBuffer();\n\t}\n\n\tdispose() {\n\t\tgl.deleteBuffer(this.pos);\n\t\tgl.deleteBuffer(this.uv);\n\t\tgl.deleteBuffer(this.ib);\n\n\t\tgl.deleteProgram(this.program);\n\t\tgl.deleteTexture(this.texture);\n\t}\n}\n\nconst gaugeRenderer = new GaugeRenderer({\n\tsource: new Image(),\n\tgauge: new Image(),\n});\n\nexport const renderGaugeImage = async (sourceURL: string | Buffer, gaugeURL: string | Buffer, baseY?: number) => {\n\tconst source = await loadImage(sourceURL);\n\tconst gauge = await loadImage(gaugeURL);\n\n\tgaugeRenderer.source = source;\n\tgaugeRenderer.gauge = gauge;\n\n\tgaugeRenderer.updateMaterial({\n\t\twidth: gauge.width,\n\t\tsw: source.width,\n\t\tsh: source.height,\n\t});\n\n\tgaugeRenderer.updateGeometry(baseY);\n\n\tconsole.log(process.memoryUsage().heapUsed);\n\n\treturn {\n\t\tbuffer: await gaugeRenderer.render(),\n\t\tsize: {\n\t\t\twidth: gaugeRenderer.width,\n\t\t\theight: gaugeRenderer.height,\n\t\t},\n\t};\n};\n\n// renderGaugeImage('./images/source.png', './images/gauge.png');\n","export const vs = `//#version 300 es\n//#define attribute in\n//#define varying out\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define VERTEX_TEXTURES\n#define USE_MAP\n#define USE_UV\n#define BONE_TEXTURE\n#define DOUBLE_SIDED\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform vec3 cameraPosition;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\n\n#ifdef USE_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n\nvoid main() {\n#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif\n\n\tvec3 transformed = vec3( position );\n\n\tvec4 mvPosition = vec4( transformed, 1.0 );\n\tmvPosition = modelViewMatrix * mvPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n}\n`;\n\nexport const fs = `//#version 300 es\n//#define varying in\n//out highp vec4 pc_fragColor;\n//#define gl_FragColor pc_fragColor\n//#define texture2D texture\n\nprecision highp float;\nprecision highp int;\n\n#define HIGH_PRECISION\n#define SHADER_NAME MeshBasicMaterial\n#define USE_MAP\n#define USE_UV\n#define DOUBLE_SIDED\nuniform vec3 cameraPosition;\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); }\n\nuniform vec3 diffuse;\nuniform float opacity;\n\n#if defined( USE_UV )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n\n\nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n\n\tgl_FragColor = diffuseColor;\n}\n`;\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-30T10:34:07.391Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport { argv } from 'yargs';\nimport { pack, unpack } from 'msgpackr';\nimport { Reply } from 'zeromq';\nimport { renderGaugeImage } from '../../libs/gauge-renderer';\n\ninterface Params {\n\tmethod: string;\n\targs: any[];\n\tkwargs: Record;\n}\n\nconst unsafeMethods = ['bind', 'constructor', 'toString', 'toJSON'];\n\nclass GaugeServer {\n\tprivate socket: Reply;\n\n\tasync bind(port?: string) {\n\t\tthis.socket = new Reply();\n\t\tawait this.socket.bind(port);\n\n\t\tconsole.log(`gauge server listening at ${port}`);\n\n\t\ttry {\n\t\t\tfor await (const [data] of this.socket) {\n\t\t\t\tconst { method, args, kwargs } = (unpack(data) as Params) ?? {};\n\n\t\t\t\tconsole.log(`request: ${method}`);\n\n\t\t\t\tif (!unsafeMethods.includes(method) && this[method]) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst data = await this[method]?.(args, kwargs);\n\t\t\t\t\t\tconsole.log(`success: ${method}`);\n\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: 0,\n\t\t\t\t\t\t\t\tmsg: 'success',\n\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconsole.error(`fail: ${method}, error: ${err}`);\n\t\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\t\tmsg: `Error: ${JSON.stringify(err)}`,\n\t\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(`fail: ${method}, error: no method`);\n\t\t\t\t\tawait this.socket.send(\n\t\t\t\t\t\tpack({\n\t\t\t\t\t\t\tcode: -1,\n\t\t\t\t\t\t\tmsg: `no method: ${method}`,\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log('restarting gauge server..', err.stack);\n\t\t\tawait this.socket.close();\n\t\t\tawait this.bind(port);\n\t\t}\n\t}\n\n\tasync predict(args?: any[], kwargs?: Record) {\n\t\tlet source, gauge, baseY;\n\n\t\tif (args) {\n\t\t\t[source, gauge, baseY] = args;\n\t\t}\n\n\t\tif (kwargs) {\n\t\t\t({ source, gauge, baseY } = kwargs);\n\t\t}\n\n\t\treturn renderGaugeImage(source, gauge, baseY);\n\t}\n}\n\nasync function main() {\n\tconst server = new GaugeServer();\n\n\tawait server.bind(`tcp://*:${argv.port}`);\n}\n\nmain();\n"],"names":["globalThis","ImageData","cc","a","result","x","e","push","GLCanvas","constructor","context","this","_width","_height","ctx","width","getExtension","resize","height","addEventListener","evt","toBuffer","pixels","Uint8Array","readPixels","RGBA","UNSIGNED_BYTE","canvas","Canvas","getContext","putImageData","Uint8ClampedArray","gl","createContext","antialias","gaugeRenderer","GaugeRenderer","options","source","gauge","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","program","createProgram","vsShader","createShader","shaderSource","compileShader","logVs","getShaderInfoLog","console","warn","fsShader","logFs","attachShader","linkProgram","logProgram","getProgramInfoLog","deleteShader","name","nameModelView","getActiveUniform","modelMat","getUniformLocation","nameProj","projMat","nameUV","uvMat","nameDiffuse","diffuse","nameOpacity","opacity","nameMap","map","useProgram","uniformMatrix4fv","Float32Array","uniformMatrix3fv","uniform3f","uniform1f","uniform1i","texture","createTexture","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","pixelStorei","UNPACK_ALIGNMENT","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","disable","CULL_FACE","depthMask","colorMask","STENCIL_TEST","POLYGON_OFFSET_FILL","SAMPLE_ALPHA_TO_COVERAGE","pos","createBuffer","uv","ib","iPos","getAttribLocation","iUV","enableVertexAttribArray","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","FLOAT","updateMaterial","sw","sh","Number","isFinite","Math","round","viewport","sourceCanvas","drawImage","texImage2D","generateMipmap","updateGeometry","baseY","data","buffer","getImageData","xFactor","max","min","propertyArray","Array","fill","_","y","position","uvs","p","positions","faces","indices","bufferData","STATIC_DRAW","ELEMENT_ARRAY_BUFFER","Uint32Array","primitiveCount","length","render","clearColor","clear","COLOR_BUFFER_BIT","drawElements","TRIANGLES","UNSIGNED_INT","dispose","deleteBuffer","deleteProgram","deleteTexture","Image","info","unsafeMethods","GaugeServer","bind","port","socket","Reply","log","method","args","kwargs","unpack","includes","send","pack","code","msg","err","error","JSON","stringify","stack","close","predict","async","sourceURL","gaugeURL","loadImage","process","memoryUsage","heapUsed","size","renderGaugeImage","server","argv","main"],"mappings":"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"} \ No newline at end of file diff --git a/backend/omr/dist/index.d.ts b/backend/omr/dist/index.d.ts index 58fa6c07d6fdf8eb783759a6c6444e658cadf24b..eca6a9e82993679b3e28524cdacbfca71c3355e3 100644 --- a/backend/omr/dist/index.d.ts +++ b/backend/omr/dist/index.d.ts @@ -1363,6 +1363,12 @@ declare namespace EquationPolicy { export {}; } declare namespace starry { + const recoverJSON: (json: string | object, classDict: any) => T; + class SimpleClass { + assign(data?: object): void; + toJSON(): any; + deepCopy(): this; + } // implicit note (from expressive marks) types enum ImplicitType { None = 0, @@ -1731,12 +1737,6 @@ declare namespace starry { get width(): number; set width(value: number); } - const recoverJSON: (json: string | object, classDict: any) => T; - class SimpleClass { - assign(data?: object): void; - toJSON(): any; - deepCopy(): this; - } const WHOLE_DURATION: number; enum AccessoryDirection { Up = "^", @@ -2367,24 +2367,85 @@ declare namespace starry { // page general Other = "Other" } - interface Logger { - debug(message?: any, ...optionalParams: any[]): void; - info(message?: any, ...optionalParams: any[]): void; - warn(message?: any, ...optionalParams: any[]): void; - group(...label: any[]): void; - groupCollapsed(...label: any[]): void; - groupEnd(): void; - assert(expr: boolean, ...optionalParams: any[]): void; + enum EventElementType { + PAD = 0, + BOS = 1, + EOS = 2, + CHORD = 3, + REST = 4 } - class DummyLogger implements Logger { - debug(..._: any[]): void; - group(..._: any[]): void; - groupCollapsed(..._: any[]): void; - groupEnd(): void; - info(..._: any[]): void; - warn(..._: any[]): void; - assert(..._: any[]): void; + interface EventElement { + href?: string; + disposed?: boolean; + index?: number; + voice?: number; + type: EventElementType; + staff: number; + x: number; + y1: number; + y2: number; + feature: EventFeature; + pivotX?: number; + headY?: number; + // targets + tick?: number; + division?: number; + dots?: number; + beam?: StemBeam; + stemDirection?: string; + grace?: boolean; + tremoloCatcher?: boolean; + timeWarped?: boolean; + fullMeasure?: boolean; // full measure rest + fake?: boolean; + order?: number; + predisposition?: EventPredisposition; + } + type Matrix = number[][]; + interface Annotation { + loss: number; + grant: boolean; + patched: boolean; // from manually solved measure + } + class EventCluster extends SimpleClass { + static className: string; + static blackKeys: string[]; + id?: string; // for db access + index?: number; + duration?: number; + staffY0?: number; // the first staff top + staffY + signatureDuration: number; + elements: EventElement[]; + matrixH?: Matrix; // matrix N x N, [next][prev] + backgroundImages?: BackgroundImage[]; + annotation?: Annotation; + constructor(data: object); + get regular(): boolean; + get grant(): boolean; + get feature(): Partial; + get estimatedDuration(): number; + assignPrediction(prediction: any): void; + } + class EventClusterSet extends SimpleClass { + static className: string; + name?: string; + clusters: EventCluster[]; + constructor(data: object); + trimIrregular(): number; + } + interface EventRectification { + id: number; + division?: number; + dots?: number; } + class MeasureRectification { + events: EventRectification[]; + constructor(data: any); + toString(): string; + static default(events: EventTerm[]): MeasureRectification; + static roll(events: EventTerm[]): MeasureRectification; + } + const genMeasureRectifications: (measure: SpartitoMeasure) => Generator; class PatchMeasure extends SimpleClass { static className: string; measureIndex: number; @@ -2643,136 +2704,443 @@ declare namespace starry { }; const hashSemanticPoint: (systemIndex: number, staffIndex: number, point: SemanticPoint) => string; const hashPageSemanticPoint: (pageName: string, point: SemanticPoint) => string; - class SemanticGraph extends SimpleClass { + interface SemanticPointInMeasure extends SemanticPoint { + staff: number; + // y1 y2 in system coordinate + sy1: number; + sy2: number; + } + interface GraphMeasure { + measureIndex: number; + left: number; + right: number; + points: SemanticPointInMeasure[]; + } + interface TimewiseGraph { + measures: GraphMeasure[]; + } + type Matrix$0 = number[][]; + type TickMap = Map; + interface SolutionStatistics { + loss?: number; + solverCredits?: number; + solverTimes?: number; + } + class SpartitoMeasure extends SimpleClass { static className: string; - points: SemanticPoint[]; - constructor(data?: any); - /*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph { - const tokens = [].concat(...staff.measures.map(measure => measure.tokens)); - - const voltaRightXs = []; - - const points = []; - tokens.forEach(token => { - const def = hashTable[token.hash]; - - if (token.glyph) { - const glyph = token.glyph as string; - let semantic = null; - - const isKey = /^\\key/.test(token.source) || token.is("KEY"); - let { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 }; - if (token.scale2) { - cx *= token.scale2.x; - cy *= token.scale2.y; - } - - let x = token.x + cx; - const y = token.y + cy; - - switch (glyph) { - case "rests.0": - if (/^R/.test(token.source)) - semantic = "Rest0W"; - else - semantic = "Rest0"; - - break; - case "accidentals.flat": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "accidentals.natural": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "accidentals.sharp": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "dots.dot": - if (token.is("VOLTA")) { - x += 0.24; // dot glyph center X offset - if (token.is("LEFT")) - semantic = SemanticType.VoltaLeft; - else if (token.is("RIGHT")) { - voltaRightXs.push(x); - semantic = SemanticType.VoltaRight; - } - } - else - semantic = "Dot"; - - break; - case "zero": - case "one": - case "two": - case "three": - case "four": - case "five": - case "six": - case "seven": - case "eight": - case "nine": { - const upper = glyph[0].toUpperCase() + glyph.substr(1); - semantic = token.is("TIME_SIG") ? "Timesig" + upper : upper; - } - - break; - default: - semantic = glyphSemanticMapping[glyph]; - } - - if (semantic) { - points.push({ - semantic, - x, - y, - }); - } - - if (token.is("TEMPO_NOTEHEAD")) { - points.push({ - semantic: SemanticType.TempoNotehead, - x, - y, - }); - } - - // grace noteheads - if (token.is("NOTEHEAD") && Number.isFinite(token.scale) && token.scale < 0.75) { - points.push({ - semantic: SemanticType.GraceNotehead, - x, - y, - }); - } - } - - // semantic from token symbol - let semantic = null; - const cx = 0; + static blackKeys: string[]; + measureIndex: number; + staffMask: number; + staffGroups: number[][]; + originalRegulationHash?: string; + measureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures + patched: boolean; + discard: boolean; + position: { + systemIndex: number; + localIndex: number; // the measure local index in its system + left: number; + right: number; + staffYs?: number[]; + staffYsFull?: number[]; + }; + backgroundImages: BackgroundImage[]; + events: EventTerm[]; + endEvent: Partial; // the placeholder for end tick + contexts: ContextedTerm[][]; // [staff] + marks: MarkTerm[]; + duration: number; + voices?: number[][]; // [voice, id] + break?: boolean; + pageBreak?: boolean; + basics?: StaffBasic[]; // [staff] + voltaBegin: boolean; + voltaEnd: boolean; + alternative: boolean; + barTypes: Record; + indent: boolean; + solutionStat?: SolutionStatistics; + matrixH: Matrix$0; // matrix N x N [right][left] + matrixV: Matrix$0; // matrix N x N + estimatedDuration: number; + graph: GraphMeasure; + deposit: Record; + static reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[]; + constructor(data: any); + get timeSignature(): Fraction$0; + get keySignature(): number; + get timeSignatureChanged(): boolean; + get doubtfulTimesig(): boolean; + get regulated(): boolean; + get validRegulated(): boolean; + get rows(): EventMeasure[]; + get eventStartX(): number; + get startX(): number; + get width(): number; + get tickMap(): TickMap; + get tickToX(): { + [tick: number]: number; + }; + get tickRates(): number[]; + get tickRatesInStaves(): number[]; + get tickRatesInGroups(): number[]; + get tickTwist(): number; + get eventMap(): Record; + get empty(): boolean; + get hasIllEvent(): boolean; + get brief(): string; + get regulationHash(): string; + // prefer use originalRegulationHash + get regulationHash0(): string; + get regulationHashes(): string[]; + get featureWords(): string[][] | null; + get barType(): MeasureBarType; + get partialDuration(): boolean; + postRegulate(): void; + updateRoundX(): void; + updateContextTick(): void; + asSolution(ref?: SpartitoMeasure): RegulationSolution; + applySolution(solution: RegulationSolution): void; + cleanupRegulation(): void; + regulateTest(): void; + regulateSimple(): void; + regulateEquations(options: EquationPolicy.RegulatorOptions): Promise; + // compute event.tick, event.tickGroup, event.timeWarp, voices, duration + regulate({ policy, ...options }?: RegulationOptions): Promise; + createPatch(): PatchMeasure; + createClusters(): EventCluster[]; + applyClusters(clusters: EventCluster[]): void; + } + // NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI + interface EventUIAgent { + readonly id: number; + readonly duration: number; + //ys: number[]; + pitches: TermPitch[]; + rest: RestType; + division: number; + dots: number; + stemDirection: string; + tying: boolean; + tied: boolean; + grace: boolean; // + beam: StemBeam; + timeWarp: string; // + tremolo: number; + tremoloLink: TremoloLink; + glissando: boolean; + arpeggioStyle: ArpeggioStyle; + tick: number; + } + interface MeasureUIAgent { + readonly measureIndex: number; + timeSignature: Fraction$0; + doubtfulTimesig: boolean; + keySignature: number; + //readonly events: EventUIAgent[]; + duration: number; + readonly voices: number[][]; + } + class EditableEvent extends EventTerm { + voice: number; + constructor(data: any); + get agent(): EventUIAgent; + } + class EditableMeasure extends SpartitoMeasure { + static className: string; + static blackKeys: any[]; + events: EditableEvent[]; + constructor(data: any); + syncVoiceToEvents(): void; + syncVoiceFromEvents(): void; + get agent(): MeasureUIAgent; + makeMIDI(bpm?: number): MIDI.MidiData; + } + // Compact display/playback-only score payload. It intentionally excludes editing, + // recognition, regulation, and semantic reconstruction state. + type LiveScoreScalar = string | number | boolean | null; + type LiveScoreTokenId = string | number; + type LiveScoreMidiEventType = "program" | "note-on" | "note-off" | "control" | "pitch-bend" | "aftertouch"; + interface LiveScore { + format: "LiveScore"; + version: 1; + pages: LiveScorePage[]; + playback?: LiveScorePlayback; + metadata?: LiveScoreMetadata; + staffLayout?: string; + } + interface LiveScoreMetadata { + title?: string; + composer?: string; + [key: string]: LiveScoreScalar | LiveScoreScalar[] | undefined; + } + interface LiveScorePage { + w: number; + h: number; + systems: LiveScoreSystem[]; + source?: LiveScoreSourceImage; + } + interface LiveScoreSourceImage { + url: string; + w: number; + h: number; + interval?: number; + matrix?: number[]; + } + interface LiveScoreSystem { + x: number; + y: number; + w: number; + staves: LiveScoreStaff[]; + bars?: number[]; + measures?: LiveScoreSystemMeasure[]; + staffMask?: number; + } + interface LiveScoreSystemMeasure { + i: number; + x1: number; + x2: number; + t1?: number; + t2?: number; + } + interface LiveScoreStaff { + y: number; + staffY: number; + additionalLines?: LiveScoreAdditionalLine[]; + measures?: LiveScoreMeasure[]; + image?: LiveScoreStaffImage; + } + interface LiveScoreStaffImage { + url: string; + x: number; + y: number; + width: number; + height: number; + } + interface LiveScoreAdditionalLine { + left: number; + right: number; + n: number; + } + interface LiveScoreMeasure { + tokens?: LiveScoreToken[]; + } + interface LiveScoreToken { + id?: LiveScoreTokenId; + t: string; + x: number; + y: number; + } + interface LiveScorePlayback { + ticksPerBeat: number; + endTick: number; + tempos?: LiveScoreTempo[]; + measures?: LiveScorePlaybackMeasure[]; + events: LiveScorePlaybackEvent[]; + positions?: LiveScorePlaybackPosition[]; + } + interface LiveScorePlaybackPosition { + id: LiveScoreTokenId; + system: number; + measure: number; + x: number; + endX?: number; + } + interface LiveScoreTempo { + tick: number; + tempo: number; + } + interface LiveScorePlaybackMeasure { + i: number; + t1: number; + t2: number; + } + interface LiveScorePlaybackEvent { + tick: number; + type: LiveScoreMidiEventType; + track?: number; + channel?: number; + note?: number; + velocity?: number; + program?: number; + controller?: number; + value?: number; + ids?: LiveScoreTokenId[]; + } + interface MeasureEvaluation { + events: number; + validEvents: number; + voiceRugged: boolean; + nullEvents: number; + fakeEvents: number; + warpedEvents: number; + complicatedTimewarp: boolean; + spaceTime: number; + surplusTime: number; + durationRate: number; + beamBroken: boolean; + fractionalWarp: boolean; + irregularWarpsN: number; + irregularTick: boolean; + tickTwist: number; + tickOverlapped: boolean; + graceInVoice: boolean; + graceN: number; + graceDominant: boolean; + perfect: boolean; + fine: boolean; + error: boolean; + qualityScore: number; + } + const evaluateMeasure: (measure: SpartitoMeasure) => MeasureEvaluation; + interface Logger { + debug(message?: any, ...optionalParams: any[]): void; + info(message?: any, ...optionalParams: any[]): void; + warn(message?: any, ...optionalParams: any[]): void; + group(...label: any[]): void; + groupCollapsed(...label: any[]): void; + groupEnd(): void; + assert(expr: boolean, ...optionalParams: any[]): void; + } + class DummyLogger implements Logger { + debug(..._: any[]): void; + group(..._: any[]): void; + groupCollapsed(..._: any[]): void; + groupEnd(): void; + info(..._: any[]): void; + warn(..._: any[]): void; + assert(..._: any[]): void; + } + class SemanticGraph extends SimpleClass { + static className: string; + points: SemanticPoint[]; + constructor(data?: any); + /*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph { + const tokens = [].concat(...staff.measures.map(measure => measure.tokens)); + + const voltaRightXs = []; + + const points = []; + tokens.forEach(token => { + const def = hashTable[token.hash]; + + if (token.glyph) { + const glyph = token.glyph as string; + let semantic = null; + + const isKey = /^\\key/.test(token.source) || token.is("KEY"); + let { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 }; + if (token.scale2) { + cx *= token.scale2.x; + cy *= token.scale2.y; + } + + let x = token.x + cx; + const y = token.y + cy; + + switch (glyph) { + case "rests.0": + if (/^R/.test(token.source)) + semantic = "Rest0W"; + else + semantic = "Rest0"; + + break; + case "accidentals.flat": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } + + break; + case "accidentals.natural": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } + + break; + case "accidentals.sharp": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } + + break; + case "dots.dot": + if (token.is("VOLTA")) { + x += 0.24; // dot glyph center X offset + if (token.is("LEFT")) + semantic = SemanticType.VoltaLeft; + else if (token.is("RIGHT")) { + voltaRightXs.push(x); + semantic = SemanticType.VoltaRight; + } + } + else + semantic = "Dot"; + + break; + case "zero": + case "one": + case "two": + case "three": + case "four": + case "five": + case "six": + case "seven": + case "eight": + case "nine": { + const upper = glyph[0].toUpperCase() + glyph.substr(1); + semantic = token.is("TIME_SIG") ? "Timesig" + upper : upper; + } + + break; + default: + semantic = glyphSemanticMapping[glyph]; + } + + if (semantic) { + points.push({ + semantic, + x, + y, + }); + } + + if (token.is("TEMPO_NOTEHEAD")) { + points.push({ + semantic: SemanticType.TempoNotehead, + x, + y, + }); + } + + // grace noteheads + if (token.is("NOTEHEAD") && Number.isFinite(token.scale) && token.scale < 0.75) { + points.push({ + semantic: SemanticType.GraceNotehead, + x, + y, + }); + } + } + + // semantic from token symbol + let semantic = null; + const cx = 0; let cy = 0; if (token.is("OCTAVE")) { if (token.is("_8")) { @@ -3254,287 +3622,101 @@ declare namespace starry { TimeD8 = 21, TimeN1 = 22, TimeN2 = 23, - TimeN3 = 24, - TimeN4 = 25, - TimeN5 = 26, - TimeN6 = 27, - TimeN7 = 28, - TimeN8 = 29, - TimeN9 = 30, - TimeN10 = 31, - TimeN11 = 32, - TimeN12 = 33 - } - const ELEMENT_TOKEN_NAMES: { - 0: string; - 2: string; - 3: string; - 4: string; - 5: string; - 7: string; - 8: string; - 9: string; - 10: string; - 11: string; - 12: string; - 13: string; - 14: string; - 15: string; - 16: string; - 17: string; - 18: string; - }; - const NOTEHEAD_ELEMENT_TYPES: SemanticElementType[]; - const NOTE_ELEMENT_TYPES: SemanticElementType[]; - interface SemanticElement { - type: SemanticElementType; - staff: number; - x: number; - y1: number; - y2: number; - index?: number; - tick?: number; - id?: string; - } - type Matrix = number[][]; - const BOS_ELEMENT: SemanticElement; - const fractionToElems: (fraction: Fraction$0) => SemanticElement[]; - class SemanticCluster extends SimpleClass { - index?: number; - elements: SemanticElement[]; - matrixH?: Matrix; // matrix N x N - _matrixV?: Matrix; // matrix N x N - groupsV?: number[][]; // ids array - masks?: [ - boolean[], - boolean[], - boolean[] - ]; // the masks for: [jointer source, jointer target, V] - static elementToJSON(elem: SemanticElement): object; - constructor(data: object); - get sourceMask(): boolean[]; - get targetMask(): boolean[]; - get vMask(): boolean[]; - get compactMatrixH(): Matrix; - set compactMatrixH(value: Matrix); - get compactMatrixV(): number[]; - set compactMatrixV(value: number[]); - get matrixV(): Matrix; - set matrixV(value: Matrix); - toJSON(): any; - static mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][]; - mergeOverlapping(): void; - overlappedNoteheads(): [ - number, - number - ][]; - getEvents(): ChordColumn[]; - } - interface SemanticClusterSetData { - vocab?: string[]; - clusters: SemanticCluster[]; - } - class SemanticClusterSet { - clusters: SemanticCluster[]; - constructor(data?: SemanticClusterSetData); - toJSON(): { - __prototype: string; - vocab: string[]; - clusters: any[]; - }; - } - const expandMatrixByMasks: (matrix: number[], masks: [ - boolean[], - boolean[] - ]) => Matrix; - const expandMatrixByMaskTriu: (matrix: number[], mask: boolean[]) => Matrix; - const matrixFromGroups: (len: number, groups: number[][]) => Matrix; - enum EventElementType { - PAD = 0, - BOS = 1, - EOS = 2, - CHORD = 3, - REST = 4 - } - interface EventElement { - href?: string; - disposed?: boolean; - index?: number; - voice?: number; - type: EventElementType; - staff: number; - x: number; - y1: number; - y2: number; - feature: EventFeature; - pivotX?: number; - headY?: number; - // targets - tick?: number; - division?: number; - dots?: number; - beam?: StemBeam; - stemDirection?: string; - grace?: boolean; - tremoloCatcher?: boolean; - timeWarped?: boolean; - fullMeasure?: boolean; // full measure rest - fake?: boolean; - order?: number; - predisposition?: EventPredisposition; - } - type Matrix$0 = number[][]; - interface Annotation { - loss: number; - grant: boolean; - patched: boolean; // from manually solved measure - } - class EventCluster extends SimpleClass { - static className: string; - static blackKeys: string[]; - id?: string; // for db access - index?: number; - duration?: number; - staffY0?: number; // the first staff top + staffY - signatureDuration: number; - elements: EventElement[]; - matrixH?: Matrix$0; // matrix N x N, [next][prev] - backgroundImages?: BackgroundImage[]; - annotation?: Annotation; - constructor(data: object); - get regular(): boolean; - get grant(): boolean; - get feature(): Partial; - get estimatedDuration(): number; - assignPrediction(prediction: any): void; - } - class EventClusterSet extends SimpleClass { - static className: string; - name?: string; - clusters: EventCluster[]; - constructor(data: object); - trimIrregular(): number; - } - interface EventRectification { - id: number; - division?: number; - dots?: number; - } - class MeasureRectification { - events: EventRectification[]; - constructor(data: any); - toString(): string; - static default(events: EventTerm[]): MeasureRectification; - static roll(events: EventTerm[]): MeasureRectification; + TimeN3 = 24, + TimeN4 = 25, + TimeN5 = 26, + TimeN6 = 27, + TimeN7 = 28, + TimeN8 = 29, + TimeN9 = 30, + TimeN10 = 31, + TimeN11 = 32, + TimeN12 = 33 } - const genMeasureRectifications: (measure: SpartitoMeasure) => Generator; - interface SemanticPointInMeasure extends SemanticPoint { + const ELEMENT_TOKEN_NAMES: { + 0: string; + 2: string; + 3: string; + 4: string; + 5: string; + 7: string; + 8: string; + 9: string; + 10: string; + 11: string; + 12: string; + 13: string; + 14: string; + 15: string; + 16: string; + 17: string; + 18: string; + }; + const NOTEHEAD_ELEMENT_TYPES: SemanticElementType[]; + const NOTE_ELEMENT_TYPES: SemanticElementType[]; + interface SemanticElement { + type: SemanticElementType; staff: number; - // y1 y2 in system coordinate - sy1: number; - sy2: number; - } - interface GraphMeasure { - measureIndex: number; - left: number; - right: number; - points: SemanticPointInMeasure[]; - } - interface TimewiseGraph { - measures: GraphMeasure[]; + x: number; + y1: number; + y2: number; + index?: number; + tick?: number; + id?: string; } type Matrix$1 = number[][]; - type TickMap = Map; - interface SolutionStatistics { - loss?: number; - solverCredits?: number; - solverTimes?: number; + const BOS_ELEMENT: SemanticElement; + const fractionToElems: (fraction: Fraction$0) => SemanticElement[]; + class SemanticCluster extends SimpleClass { + index?: number; + elements: SemanticElement[]; + matrixH?: Matrix$1; // matrix N x N + _matrixV?: Matrix$1; // matrix N x N + groupsV?: number[][]; // ids array + masks?: [ + boolean[], + boolean[], + boolean[] + ]; // the masks for: [jointer source, jointer target, V] + static elementToJSON(elem: SemanticElement): object; + constructor(data: object); + get sourceMask(): boolean[]; + get targetMask(): boolean[]; + get vMask(): boolean[]; + get compactMatrixH(): Matrix$1; + set compactMatrixH(value: Matrix$1); + get compactMatrixV(): number[]; + set compactMatrixV(value: number[]); + get matrixV(): Matrix$1; + set matrixV(value: Matrix$1); + toJSON(): any; + static mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][]; + mergeOverlapping(): void; + overlappedNoteheads(): [ + number, + number + ][]; + getEvents(): ChordColumn[]; } - class SpartitoMeasure extends SimpleClass { - static className: string; - static blackKeys: string[]; - measureIndex: number; - staffMask: number; - staffGroups: number[][]; - originalRegulationHash?: string; - measureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures - patched: boolean; - discard: boolean; - position: { - systemIndex: number; - localIndex: number; // the measure local index in its system - left: number; - right: number; - staffYs?: number[]; - staffYsFull?: number[]; - }; - backgroundImages: BackgroundImage[]; - events: EventTerm[]; - endEvent: Partial; // the placeholder for end tick - contexts: ContextedTerm[][]; // [staff] - marks: MarkTerm[]; - duration: number; - voices?: number[][]; // [voice, id] - break?: boolean; - pageBreak?: boolean; - basics?: StaffBasic[]; // [staff] - voltaBegin: boolean; - voltaEnd: boolean; - alternative: boolean; - barTypes: Record; - indent: boolean; - solutionStat?: SolutionStatistics; - matrixH: Matrix$1; // matrix N x N [right][left] - matrixV: Matrix$1; // matrix N x N - estimatedDuration: number; - graph: GraphMeasure; - deposit: Record; - static reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[]; - constructor(data: any); - get timeSignature(): Fraction$0; - get keySignature(): number; - get timeSignatureChanged(): boolean; - get doubtfulTimesig(): boolean; - get regulated(): boolean; - get validRegulated(): boolean; - get rows(): EventMeasure[]; - get eventStartX(): number; - get startX(): number; - get width(): number; - get tickMap(): TickMap; - get tickToX(): { - [tick: number]: number; + interface SemanticClusterSetData { + vocab?: string[]; + clusters: SemanticCluster[]; + } + class SemanticClusterSet { + clusters: SemanticCluster[]; + constructor(data?: SemanticClusterSetData); + toJSON(): { + __prototype: string; + vocab: string[]; + clusters: any[]; }; - get tickRates(): number[]; - get tickRatesInStaves(): number[]; - get tickRatesInGroups(): number[]; - get tickTwist(): number; - get eventMap(): Record; - get empty(): boolean; - get hasIllEvent(): boolean; - get brief(): string; - get regulationHash(): string; - // prefer use originalRegulationHash - get regulationHash0(): string; - get regulationHashes(): string[]; - get featureWords(): string[][] | null; - get barType(): MeasureBarType; - get partialDuration(): boolean; - postRegulate(): void; - updateRoundX(): void; - updateContextTick(): void; - asSolution(ref?: SpartitoMeasure): RegulationSolution; - applySolution(solution: RegulationSolution): void; - cleanupRegulation(): void; - regulateTest(): void; - regulateSimple(): void; - regulateEquations(options: EquationPolicy.RegulatorOptions): Promise; - // compute event.tick, event.tickGroup, event.timeWarp, voices, duration - regulate({ policy, ...options }?: RegulationOptions): Promise; - createPatch(): PatchMeasure; - createClusters(): EventCluster[]; - applyClusters(clusters: EventCluster[]): void; } + const expandMatrixByMasks: (matrix: number[], masks: [ + boolean[], + boolean[] + ]) => Matrix$1; + const expandMatrixByMaskTriu: (matrix: number[], mask: boolean[]) => Matrix$1; + const matrixFromGroups: (len: number, groups: number[][]) => Matrix$1; const emptyVoiceFromStaffMeasure: (staff: TermMeasure, chiefVoice?: boolean) => VoiceMeasure; class Spartito extends SimpleClass { static className: string; @@ -3655,51 +3837,6 @@ declare namespace starry { splitToSingleScoresGen(): Generator; splitToSingleScores(): Score[]; } - // NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI - interface EventUIAgent { - readonly id: number; - readonly duration: number; - //ys: number[]; - pitches: TermPitch[]; - rest: RestType; - division: number; - dots: number; - stemDirection: string; - tying: boolean; - tied: boolean; - grace: boolean; // - beam: StemBeam; - timeWarp: string; // - tremolo: number; - tremoloLink: TremoloLink; - glissando: boolean; - arpeggioStyle: ArpeggioStyle; - tick: number; - } - interface MeasureUIAgent { - readonly measureIndex: number; - timeSignature: Fraction$0; - doubtfulTimesig: boolean; - keySignature: number; - //readonly events: EventUIAgent[]; - duration: number; - readonly voices: number[][]; - } - class EditableEvent extends EventTerm { - voice: number; - constructor(data: any); - get agent(): EventUIAgent; - } - class EditableMeasure extends SpartitoMeasure { - static className: string; - static blackKeys: any[]; - events: EditableEvent[]; - constructor(data: any); - syncVoiceToEvents(): void; - syncVoiceFromEvents(): void; - get agent(): MeasureUIAgent; - makeMIDI(bpm?: number): MIDI.MidiData; - } const mod7: (x: any) => number; /* Coordinates: @@ -3749,32 +3886,39 @@ declare namespace starry { yToPitch(y: number): number; yToPitchName(y: number): string; } - interface MeasureEvaluation { - events: number; - validEvents: number; - voiceRugged: boolean; - nullEvents: number; - fakeEvents: number; - warpedEvents: number; - complicatedTimewarp: boolean; - spaceTime: number; - surplusTime: number; - durationRate: number; - beamBroken: boolean; - fractionalWarp: boolean; - irregularWarpsN: number; - irregularTick: boolean; - tickTwist: number; - tickOverlapped: boolean; - graceInVoice: boolean; - graceN: number; - graceDominant: boolean; - perfect: boolean; - fine: boolean; - error: boolean; - qualityScore: number; + interface BeadPicker { + n_seq: number; + quota: number; + cost: number; // duration in milliseconds + predictCluster(cluster: EventCluster, tip: number): Promise; } - const evaluateMeasure: (measure: SpartitoMeasure) => MeasureEvaluation; + interface ClusterEvaluation { + tickErr: number; + twist: number; + residue: number; + endTick: number; + fatalError: boolean; + voiceN: number; + spaceDuration: number; + pretentiousness: number; + loss: number; + } + const solveCluster: (cluster: EventCluster, picker: BeadPicker, logger: Logger, quota?: number, stopLoss?: number, ptFactor?: number) => Promise; + interface BeadSolverOptions { + picker: BeadPicker; + stopLoss?: number; + quotaMax?: number; + quotaFactor?: number; + ptFactor?: number; + logger?: Logger; + } + const solveMeasure: (measure: SpartitoMeasure, options: BeadSolverOptions) => Promise; + interface GlimpseMeasureOptions { + picker: BeadPicker; + resetSignatureForDoubtfulOnly?: boolean; + } + const glimpseMeasure: (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions) => Promise; + const estimateMeasure: (measure: SpartitoMeasure, picker: BeadPicker) => Promise; } interface ScoreJSON { unitSize: number; diff --git a/backend/omr/dist/index.js b/backend/omr/dist/index.js index 13f95bd373a1022b5bf9a63b9fe594e45a89896f..237ee3329c60f12fa9007408e0e1f4e2416e75ec 100644 --- a/backend/omr/dist/index.js +++ b/backend/omr/dist/index.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("js-sha1"),t=require("lodash/pick"),s=require("lodash"),i=require("math-erf"),r=require("msgpackr"),n=require("zeromq"),a=require("portfinder"),o=require("python-shell"),c=require("skia-canvas"),l=require("weak-lru-cache"),u=require("spark-md5"),h=require("sharp"),m=require("got");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d,p,g,y=f(e),v=f(t),x=f(s),S=f(i),b=f(u),k=f(h),T=f(m);globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary"),function(e){e.ByLines="ByLines",e.ByBlocks="ByBlocks"}(d||(d={})),function(e){e.Title="Title",e.Author="Author",e.TempoText="TempoText",e.TempoNumeral="TempoNumeral",e.TextualMark="TextualMark",e.Lyric="Lyric",e.Instrument="Instrument",e.MeasureNumber="MeasureNumber",e.Times="Times",e.Alternation1="Alternation1",e.Alternation2="Alternation2",e.Chord="Chord",e.PageMargin="PageMargin",e.Other="Other"}(p||(p={})),function(e){e.ClefG="ClefG",e.ClefF="ClefF",e.ClefC="ClefC",e.NoteheadS0="NoteheadS0",e.NoteheadS1="NoteheadS1",e.NoteheadS2="NoteheadS2",e.NoteheadS1stemU="NoteheadS1stemU",e.NoteheadS1stemD="NoteheadS1stemD",e.NoteheadS2stemU="NoteheadS2stemU",e.NoteheadS2stemD="NoteheadS2stemD",e.vline_Stem="vline_Stem",e.Flag3="Flag3",e.BeamLeft="BeamLeft",e.BeamContinue="BeamContinue",e.BeamRight="BeamRight",e.TremoloLeft="TremoloLeft",e.TremoloRight="TremoloRight",e.TremoloMiddle="TremoloMiddle",e.Dot="Dot",e.Rest0="Rest0",e.Rest1="Rest1",e.Rest2="Rest2",e.Rest3="Rest3",e.Rest4="Rest4",e.Rest5="Rest5",e.Rest6="Rest6",e.Rest0W="Rest0W",e.RestM1="RestM1",e.AccNatural="AccNatural",e.AccSharp="AccSharp",e.AccDoublesharp="AccDoublesharp",e.AccFlat="AccFlat",e.AccFlatflat="AccFlatflat",e.vline_VoltaLeft="vline_VoltaLeft",e.vline_VoltaRight="vline_VoltaRight",e.VoltaLeft="VoltaLeft",e.VoltaRight="VoltaRight",e.VoltaAlternativeBegin="VoltaAlternativeBegin",e.BarMeasure="BarMeasure",e.vline_BarMeasure="vline_BarMeasure",e.vline_BarTerminal="vline_BarTerminal",e.vline_BarSegment="vline_BarSegment",e.SlurBegin="SlurBegin",e.SlurEnd="SlurEnd",e.TimesigC44="TimesigC44",e.TimesigC22="TimesigC22",e.TimesigZero="TimesigZero",e.TimesigOne="TimesigOne",e.TimesigTwo="TimesigTwo",e.TimesigThree="TimesigThree",e.TimesigFour="TimesigFour",e.TimesigFive="TimesigFive",e.TimesigSix="TimesigSix",e.TimesigSeven="TimesigSeven",e.TimesigEight="TimesigEight",e.TimesigNine="TimesigNine",e.OctaveShift8va="OctaveShift8va",e.OctaveShift8vb="OctaveShift8vb",e.OctaveShift8="OctaveShift8",e.OctaveShift0="OctaveShift0",e.Zero="Zero",e.One="One",e.Two="Two",e.Three="Three",e.Four="Four",e.Five="Five",e.Six="Six",e.Seven="Seven",e.Eight="Eight",e.Nine="Nine",e.f="f",e.p="p",e.m="m",e.n="n",e.r="r",e.s="s",e.z="z",e.CrescendoBegin="CrescendoBegin",e.CrescendoEnd="CrescendoEnd",e.DecrescendoBegin="DecrescendoBegin",e.DecrescendoEnd="DecrescendoEnd",e.ScriptFermata="ScriptFermata",e.ScriptShortFermata="ScriptShortFermata",e.ScriptSforzato="ScriptSforzato",e.ScriptStaccato="ScriptStaccato",e.ScriptStaccatissimo="ScriptStaccatissimo",e.ScriptTurn="ScriptTurn",e.ScriptTrill="ScriptTrill",e.ScriptSegno="ScriptSegno",e.ScriptCoda="ScriptCoda",e.ScriptArpeggio="ScriptArpeggio",e.ScriptPrall="ScriptPrall",e.ScriptMordent="ScriptMordent",e.ScriptMarcato="ScriptMarcato",e.ScriptTenuto="ScriptTenuto",e.ScriptPortato="ScriptPortato",e.PedalStar="PedalStar",e.PedalPed="PedalPed",e.KeyAcc="KeyAcc",e.TempoNotehead="TempoNotehead",e.GraceNotehead="GraceNotehead",e.SignLined="SignLined",e.SignInterval="SignInterval",e.rect_Text="rect_Text",e.rect_Lyric="rect_Lyric"}(g||(g={}));const w={NoteheadS0:1.826,NoteheadS1:1.264,NoteheadS2:1.198},M={"clefs.F":{x:1.06},"clefs.G":{x:1.3},"clefs.F_change":{x:.87},"clefs.G_change":{x:1.07},"timesig.C44":{x:.9},"timesig.C22":{x:.9},zero:{x:.7,y:-1},one:{x:.7,y:-1},two:{x:.7,y:-1},three:{x:.7,y:-1},four:{x:.7,y:-1},five:{x:.7,y:-1},six:{x:.7,y:-1},seven:{x:.7,y:-1},eight:{x:.7,y:-1},nine:{x:.7,y:-1},"accidentals.sharp":{x:.55},"accidentals.doublesharp":{x:.5},"accidentals.natural":{x:.3},"accidentals.flat":{x:.3},"accidentals.flatflat":{x:.5},"noteheads.s0":{x:w.NoteheadS0/2},"noteheads.s1":{x:w.NoteheadS1/2},"noteheads.s2":{x:w.NoteheadS2/2},"rests.0":{x:.75,y:1},"rests.1":{x:.75},"rests.0o":{x:.75,y:1},"rests.1o":{x:.75},"rests.M1":{x:.75,y:1},"rests.2":{x:.5},"rests.3":{x:.5},"rests.4":{x:.5},"rests.5":{x:.5},"rests.6":{x:.5},f:{x:.6,y:-.5},m:{x:.9,y:-.5},p:{x:.5,y:-.5},r:{x:.5,y:-.5},s:{x:.5,y:-.5},z:{x:.5,y:-.5},"scripts.trill":{y:-.5},"scripts.segno":{x:0,y:0},"scripts.coda":{x:0,y:0},"scripts.arpeggio":{x:.5,y:-.5},"pedal.*":{x:.78,y:-.78},"pedal.Ped":{x:1.6,y:-.7}},E=[g.BarMeasure,g.vline_BarMeasure,g.vline_BarTerminal,g.vline_BarSegment,g.vline_VoltaLeft,g.vline_VoltaRight,g.VoltaAlternativeBegin],N=g,I=[[N.NoteheadS0,N.NoteheadS1,N.NoteheadS2],[N.Zero,N.One,N.Two,N.Three,N.Four,N.Five,N.Six,N.Seven,N.Eight,N.Nine,N.ScriptStaccatissimo],[N.TimesigZero,N.TimesigOne,N.TimesigTwo,N.TimesigThree,N.TimesigFour,N.TimesigFive,N.TimesigSix,N.TimesigSeven,N.TimesigEight,N.TimesigNine],[N.Rest0,N.Rest1,N.Rest2,N.Rest3,N.Rest4,N.Rest5,N.Rest6,N.Rest0W,N.RestM1],[N.SignInterval,N.SignLined],[N.BeamLeft,N.BeamContinue,N.BeamRight]],C=[N.ClefG,N.ClefF,N.ClefC,N.NoteheadS0,N.NoteheadS1,N.NoteheadS2,N.Dot,N.Rest0,N.Rest1,N.Rest2,N.Rest3,N.Rest4,N.Rest5,N.Rest6,N.RestM1,N.AccNatural,N.AccSharp,N.AccDoublesharp,N.AccFlat,N.AccFlatflat,N.TimesigC44,N.TimesigC22,N.TimesigZero,N.TimesigOne,N.TimesigTwo,N.TimesigThree,N.TimesigFour,N.TimesigFive,N.TimesigSix,N.TimesigSeven,N.TimesigEight,N.TimesigNine,N.One,N.Two,N.Three,N.Four,N.Five,N.OctaveShift8,N.OctaveShift0,N.f,N.p,N.m,N.n,N.r,N.s,N.z,N.ScriptFermata,N.ScriptShortFermata,N.ScriptSforzato,N.ScriptStaccato,N.ScriptStaccatissimo,N.ScriptTurn,N.ScriptTrill,N.ScriptSegno,N.ScriptCoda,N.ScriptArpeggio,N.ScriptPrall,N.ScriptMordent,N.ScriptMarcato,N.ScriptTenuto,N.ScriptPortato,N.PedalStar,N.PedalPed],_=(e,t,s)=>{const i=Math.round(10*s.x),r=Math.round(10*s.y),n=`${e}|${t}|${s.semantic}|${i}|${r}`,a=y.default.array(n).slice(12),o=globalThis.btoa(String.fromCharCode(...a)).substring(0,11);return s.id=o,o},O=(e,t)=>{const s=Math.round(t.x),i=Math.round(t.y),r=`p-${e}|${t.semantic}|${s}|${i}`,n=y.default.array(r).slice(12),a=globalThis.btoa(String.fromCharCode(...n)).substring(0,11);return t.id=a,a};var B;!function(e){e.ClefG="clefs-G",e.ClefF="clefs-F",e.ClefC="clefs-C",e.TimesigC44="timesig-C44",e.TimesigC22="timesig-C22",e.TimesigZero="zero|timesig0",e.TimesigOne="one|timesig1",e.TimesigTwo="two|timesig2",e.TimesigThree="three|timesig3",e.TimesigFour="four|timesig4",e.TimesigFive="five|timesig5",e.TimesigSix="six|timesig6",e.TimesigSeven="seven|timesig7",e.TimesigEight="eight|timesig8",e.TimesigNine="nine|timesig9",e.OctaveShift8va="octave-a",e.OctaveShift8vb="octave-b",e.OctaveShift0="octave-0",e.Zero="zero|n0",e.One="one|n1",e.Two="two|n2",e.Three="three|n3",e.Four="four|n4",e.Five="five|n5",e.Six="six|n6",e.Seven="seven|n7",e.Eight="eight|n8",e.Nine="nine|n9",e.AccNatural="accidentals-natural",e.AccSharp="accidentals-sharp",e.AccDoublesharp="accidentals-doublesharp",e.AccFlat="accidentals-flat",e.AccFlatflat="accidentals-flatflat",e.KeyNatural="accidentals-natural|key-natural",e.KeySharp="accidentals-sharp|key-sharp",e.KeyFlat="accidentals-flat|key-flat",e.NoteheadS0="noteheads-s0",e.NoteheadS1="noteheads-s1",e.NoteheadS2="noteheads-s2",e.NoteheadS1stemU="noteheads-s1|noteheads-s1-u",e.NoteheadS1stemD="noteheads-s1|noteheads-s1-d",e.NoteheadS2stemU="noteheads-s2|noteheads-s2-u",e.NoteheadS2stemD="noteheads-s2|noteheads-s2-d",e.Rest0="rests-0o",e.Rest1="rests-1o",e.Rest2="rests-2",e.Rest3="rests-3",e.Rest4="rests-4",e.Rest5="rests-5",e.Rest6="rests-6",e.Rest0W="rests-0",e.RestM1="rests-M1",e.Flag3="flags-u3",e.Flag4="flags-u4",e.Flag5="flags-u5",e.Flag6="flags-u6",e.Flag7="flags-u7",e.Flag8="flags-u8",e.BeamLeft="|beam-left",e.BeamRight="|beam-right",e.BeamContinue="|beam-continue",e.TremoloLeft="|tremolo-left",e.TremoloRight="|tremolo-right",e.TremoloMiddle="|tremolo-middle",e.SlurBegin="|slur-begin",e.SlurEnd="|slur-end",e.TieBegin="|tie-begin",e.TieEnd="|tie-end",e.VoltaLeft="|volta-left",e.VoltaRight="|volta-right",e.VoltaAlternativeBegin="|volta-alter-begin",e.BarTerminal="|bar-terminal",e.BarSegment="|bar-segment",e.Dot="|dot",e.DotDot="|dotdot",e.f="f",e.p="p",e.m="m",e.r="r",e.s="s",e.z="z",e.WedgeCrescendo="|wedge-crescendo",e.WedgeDiminuendo="|wedge-diminuendo",e.WedgeClose="|wedge-close",e.CrescendoBegin="|wedge-crescendo",e.DecrescendoBegin="|wedge-diminuendo",e.CrescendoEnd="|wedge-close",e.DecrescendoEnd="|wedge-close",e.ScriptFermata="scripts-ufermata",e.ScriptShortFermata="scripts-ushortfermata",e.ScriptSforzato="scripts-sforzato",e.ScriptStaccato="scripts-staccato",e.ScriptStaccatissimo="scripts-ustaccatissimo",e.ScriptTurn="scripts-turn",e.ScriptTrill="scripts-trill",e.ScriptSegno="scripts-segno",e.ScriptCoda="scripts-coda",e.ScriptArpeggio="scripts-arpeggio",e.ScriptPrall="scripts-prall",e.ScriptMordent="scripts-mordent",e.ScriptMarcato="scripts-umarcato",e.ScriptTenuto="scripts-tenuto",e.ScriptPortato="scripts-uportato",e.PedalStar="pedal-star",e.PedalPed="pedal-Ped",e.Text="|text",e.GraceNotehead="|grace-notehead"}(B||(B={}));const A=B,P=Object.values(B),R=P.filter(e=>/clefs-/.test(e)),D=P.filter(e=>/timesig/.test(e)),F=P.filter(e=>/timesig-/.test(e)),L=P.filter(e=>/timesig\d/.test(e)),$=P.filter(e=>/octave-/.test(e)),j=P.filter(e=>/n\d/.test(e)),H=P.filter(e=>/accidentals-/.test(e)),V=P.filter(e=>/noteheads-/.test(e)),z=[A.NoteheadS0,A.NoteheadS1,A.NoteheadS2],q=P.filter(e=>/noteheads-.+-[ud]/.test(e)),G=P.filter(e=>/rests-/.test(e)),W=P.filter(e=>/flags-/.test(e)),U=P.filter(e=>/volta-/.test(e)),Y=P.filter(e=>/^[a-z]$/.test(e)),X=P.filter(e=>/scripts-/.test(e)),K=P.filter(e=>/pedal-/.test(e)),Z=[A.Dot,A.DotDot],J=[A.SlurBegin,A.SlurEnd,A.TieBegin,A.TieEnd],Q=P.filter(e=>/beam-/.test(e)),ee=P.filter(e=>/wedge-/.test(e)),te=[...j,...Y,...ee,...K,...J,A.ScriptFermata,A.ScriptShortFermata,A.ScriptSforzato,A.ScriptStaccato,A.ScriptStaccatissimo,A.ScriptTurn,A.ScriptTrill,A.ScriptPrall,A.ScriptMordent,A.ScriptMarcato,A.ScriptTenuto,A.ScriptPortato],se=[...K],ie=[...R,...D,...j,...H,A.NoteheadS0,A.NoteheadS1,A.NoteheadS2,...G,...Y,...X,...K,...Z],re={};R.forEach(e=>re[e]=1),L.forEach(e=>re[e]=1),H.forEach(e=>re[e]=.5),V.forEach(e=>re[e]=.5),G.forEach(e=>re[e]=.5),Z.forEach(e=>re[e]=.5);const ne={};F.forEach(e=>ne[e]=0),U.forEach(e=>ne[e]=0);class Token{constructor(e){Object.assign(this,e)}get typeId(){return this.type.split("|").reverse()[0]}get isPredicted(){return Number.isFinite(this.confidence)}get isNotehead(){return q.includes(this.type)||this.type===B.NoteheadS0}get isContexted(){return R.includes(this.type)||D.includes(this.type)||$.includes(this.type)||H.includes(this.type)}get isAccessory(){return j.includes(this.type)||Y.includes(this.type)||X.includes(this.type)||K.includes(this.type)}get division(){switch(this.type){case A.NoteheadS0:return 0;case A.NoteheadS1stemU:case A.NoteheadS1stemD:return 1;case A.NoteheadS2stemU:case A.NoteheadS2stemD:return 2;case A.Flag3:return 3;case A.Flag4:return 4;case A.Flag5:return 5;case A.Flag6:return 6;case A.Flag7:return 7;case A.Flag8:return 8;case A.RestM1:return-1;case A.Rest0:return 0;case A.Rest1:return 1;case A.Rest2:return 2;case A.Rest3:return 3;case A.Rest4:return 4;case A.Rest5:return 5;case A.Rest6:return 6}return null}get dots(){switch(this.type){case A.Dot:return 1;case A.DotDot:return 2}return null}get direction(){switch(this.type){case A.NoteheadS1stemU:case A.NoteheadS2stemU:return"u";case A.NoteheadS1stemD:case A.NoteheadS2stemD:return"d"}return null}get width(){switch(this.type){case A.NoteheadS0:return w.NoteheadS0;case A.NoteheadS1stemU:case A.NoteheadS1stemD:return w.NoteheadS1;case A.NoteheadS2stemU:case A.NoteheadS2stemD:return w.NoteheadS2}}get left(){switch(this.type){case A.NoteheadS0:return this.x-this.width/2;case A.NoteheadS1stemU:case A.NoteheadS2stemU:return this.x-this.width;case A.NoteheadS1stemD:case A.NoteheadS2stemD:return this.x}return this.x}get right(){switch(this.type){case A.NoteheadS0:return this.x+this.width/2;case A.NoteheadS1stemU:case A.NoteheadS2stemU:return this.x;case A.NoteheadS1stemD:case A.NoteheadS2stemD:return this.x+this.width}return this.x}get voiceIndices(){return!this.voice||this.voice<0?[]:Array(Math.floor(Math.log2(this.voice))+1).fill(null).reduce((e,t,s)=>this.voice&1<("object"==typeof e&&(e=JSON.stringify(e)),JSON.parse(e,(e,s)=>{if(s&&"object"==typeof s&&s.__prototype){const e=t[s.__prototype];if(e){const{__prototype:t,...i}=s;return new e(i)}}return s})),oe=(e,t=null)=>{if((t=t||new Map).get(e))return t.get(e);if(Array.isArray(e)){const s=[];return t.set(e,s),e.forEach(e=>s.push(oe(e,t))),s}if(e&&"object"==typeof e){const s={};return t.set(e,s),Object.entries(e).forEach(([e,i])=>s[e]=oe(i,t)),Object.setPrototypeOf(s,e.__proto__),s}return e};class SimpleClass{assign(e){e&&Object.assign(this,e)}toJSON(){const e=this.constructor,t=e.serializedKeys||e.blackKeys&&Object.keys(this).filter(t=>!e.blackKeys.includes(t)),s=t?v.default(this,t):this;return{__prototype:e.className,...s}}deepCopy(){return oe(this)}}var ce;!function(e){e.Ordinary="ordinary",e.Full="full",e.Conservative="conservative",e.Once="once"}(ce||(ce={}));const le=(e,t=ce.Ordinary)=>[].concat(...e.map(e=>e.serialize(t))),ue=(e,{withBrackets:t=!1}={})=>{let s="",i=!1;for(let t=0;t0&&!i&&(s+=", "),i=!1,s+=e[t].code)}return t?`[${s}]`:s};class SingleMLayout extends SimpleClass{static from(e){const t=new SingleMLayout;return t.measure=e,t}constructor(e=void 0){super(),this.assign(e)}serialize(){return[this.measure]}get seq(){return[this]}get code(){return this.measure.toString()}}SingleMLayout.className="SingleMLayout";class BlockMLayout extends SimpleClass{static trimSeq(e){const t=[];for(const s of e)if(s instanceof BlockMLayout)for(const e of s.seq)t.push(e);else t.push(s);const s=[];let i=null;for(const e of t)e instanceof SingleMLayout?e.measure>i&&(s.push(e),i=e.measure):s.push(e);return s}static fromSeq(e){const t=new BlockMLayout;return t.seq=BlockMLayout.trimSeq(e),t}constructor(e=void 0){super(),this.assign(e)}serialize(e){return le(this.seq,e)}get code(){return ue(this.seq,{withBrackets:!0})}}BlockMLayout.className="BlockMLayout";class VoltaMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=le(this.body);if(this.alternates){const s=this.alternates.map(e=>le(e)),i=s[s.length-1];switch(e){case ce.Ordinary:return t.concat(...s);case ce.Conservative:case ce.Full:return[...[].concat(...Array(this.times-1).fill(null).map((e,i)=>[...t,...s[i%(this.times-1)]])),...t,...i];case ce.Once:return[...t,...i]}}else switch(e){case ce.Ordinary:case ce.Conservative:case ce.Once:return t;case ce.Full:return[].concat(...Array(this.times).fill(null).map(()=>t))}console.warn("the current case not handled:",e,this)}get seq(){const e=this.alternates?this.alternates[this.alternates.length-1]:[];return[...this.body,...e]}get code(){const e=ue(this.body,{withBrackets:!0});let t=`${this.times}*${e}`;return this.alternates&&(t+="{"+this.alternates.map(e=>ue(e,{withBrackets:e.length>1})).join(", ")+"}"),t}}VoltaMLayout.className="VoltaMLayout";class ABAMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=this.main.serialize(e),s=le(this.main.seq,ce.Once),i=le(this.rest,e);switch(e){case ce.Ordinary:return[...t,...i];case ce.Once:return[...i,...s];case ce.Conservative:case ce.Full:return[...t,...i,...s];default:console.warn("the current case not handled:",e,this)}}get seq(){return[this.main,...this.rest]}get code(){return"<"+this.main.code+", "+ue(this.rest)+">"}}ABAMLayout.className="ABAMLayout";var he=Object.freeze({__proto__:null,get LayoutType(){return ce},SingleMLayout:SingleMLayout,BlockMLayout:BlockMLayout,VoltaMLayout:VoltaMLayout,ABAMLayout:ABAMLayout}),me=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,13],s=[1,16],i=[1,15],r=[1,26],n=[1,29],a=[1,28],o=[1,30],c=[5,13,22,27,29],l=[2,15],u=[1,32],h=[5,14,21,22,27,28,29],m={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,measure_layout:4,EOF:5,index_wise_measure_layout:6,"i:":7,"s:":8,segment_wise_measure_layout:9,iw_sequence:10,iw_item:11,range:12,",":13,UNSIGNED:14,"..":15,single:16,iw_block_item:17,iw_volta:18,iw_aba:19,iw_block:20,"[":21,"]":22,"*":23,iw_optional_alternates:24,iw_alternates:25,"{":26,"}":27,"<":28,">":29,sw_sequence:30,sw_item:31,segment:32,sw_block_item:33,sw_volta:34,sw_aba:35,sw_block:36,sw_optional_alternates:37,sw_alternates:38,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"i:",8:"s:",13:",",14:"UNSIGNED",15:"..",21:"[",22:"]",23:"*",26:"{",27:"}",28:"<",29:">"},productions_:[0,[3,2],[4,1],[4,2],[4,2],[6,1],[10,1],[10,1],[10,3],[10,3],[12,3],[11,1],[11,1],[11,1],[11,1],[16,1],[17,1],[20,3],[18,4],[24,0],[24,1],[25,3],[19,5],[9,1],[30,1],[30,2],[31,1],[31,1],[31,1],[31,1],[32,1],[33,1],[36,3],[34,4],[37,0],[37,1],[38,3],[35,4]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:this.$=f(null,n[o]);break;case 3:this.$=f("index-wise",n[o]);break;case 4:this.$=f("segment-wise",b(n[o]));break;case 5:case 23:1===n[o].length&&"BlockMLayout"===n[o][0].__prototype?this.$=n[o][0]:this.$=p(n[o]);break;case 6:case 24:this.$=[n[o]];break;case 7:case 11:case 12:case 13:case 14:case 20:case 27:case 28:case 29:case 35:this.$=n[o];break;case 8:this.$=[...n[o-2],n[o]];break;case 9:this.$=[...n[o-2],...n[o]];break;case 10:this.$=S(n[o-2],n[o]);break;case 15:this.$=d(n[o]);break;case 16:case 31:this.$=p(n[o]);break;case 17:case 32:this.$=n[o-1];break;case 18:case 33:this.$=g(n[o-3],n[o-1],n[o]);break;case 19:case 34:this.$=null;break;case 21:case 36:this.$=x(n[o-1]);break;case 22:this.$=y(n[o-3],n[o-1]);break;case 25:this.$=[...n[o-1],n[o]];break;case 26:this.$=p([n[o]]);break;case 30:this.$=v(n[o]);break;case 37:this.$=y(n[o-2],n[o-1])}},table:[{3:1,4:2,6:3,7:[1,4],8:[1,5],10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[3]},{5:[1,17]},{5:[2,2]},{6:18,10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{9:19,14:r,21:n,28:a,30:20,31:21,32:22,33:23,34:24,35:25,36:27},{5:[2,5],13:o},e(c,[2,6]),e(c,[2,7]),e(c,[2,11]),e(c,[2,12]),e(c,[2,13]),e(c,[2,14]),e(c,l,{15:[1,31],23:u}),e(c,[2,16]),{11:33,14:[1,34],16:9,17:10,18:11,19:12,20:14,21:s,28:i},{10:35,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[2,1]},{5:[2,3]},{5:[2,4]},{5:[2,23],14:r,21:n,28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(h,[2,24]),e(h,[2,26]),e(h,[2,27]),e(h,[2,28]),e(h,[2,29]),e(h,[2,30],{23:[1,37]}),e(h,[2,31]),{14:r,21:n,28:a,31:38,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,28:a,30:39,31:21,32:22,33:23,34:24,35:25,36:27},{11:40,12:41,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{14:[1,42]},{20:43,21:s},{13:[1,44]},{13:l,23:u},{13:o,22:[1,45]},e(h,[2,25]),{21:n,36:46},{14:r,21:n,28:a,30:47,31:21,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,22:[1,48],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,8]),e(c,[2,9]),e(c,[2,10]),e(c,[2,19],{24:49,25:50,26:[1,51]}),{10:52,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},e([5,13,22,26,27,29],[2,17]),e(h,[2,34],{37:53,38:54,26:[1,55]}),{14:r,21:n,28:a,29:[1,56],31:36,32:22,33:23,34:24,35:25,36:27},e([5,14,21,22,26,27,28,29],[2,32]),e(c,[2,18]),e(c,[2,20]),{10:57,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{13:o,29:[1,58]},e(h,[2,33]),e(h,[2,35]),{14:r,21:n,28:a,30:59,31:21,32:22,33:23,34:24,35:25,36:27},e(h,[2,37]),{13:o,27:[1,60]},e(c,[2,22]),{14:r,21:n,27:[1,61],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,21]),e(h,[2,36])],defaultActions:{3:[2,2],17:[2,1],18:[2,3],19:[2,4]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};const f=(e,t)=>({__prototype:"MesaureLayout",type:e,data:t}),d=e=>({__prototype:"SingleMLayout",measure:Number(e)}),p=e=>({__prototype:"BlockMLayout",seq:e}),g=(e,t,s)=>({__prototype:"VoltaMLayout",times:Number(e),body:t,alternates:s}),y=(e,t)=>({__prototype:"ABAMLayout",main:e,rest:t}),v=e=>({segment:!0,length:Number(e)}),x=e=>e.map(e=>"BlockMLayout"===e.__prototype?e.seq:[e]),S=(e,t)=>{if(e=Number(e),!((t=Number(t))>=e))throw new Error(`invalid measure range: ${e}..${t}`);return Array(t+1-e).fill(0).map((t,s)=>d(e+s))},b=(e,t={index:1})=>{const s=e=>[].concat(...e.map(e=>((e,t)=>{if(e.segment){const s=t.index;return t.index+=e.length,Array(e.length).fill(0).map((e,t)=>d(s+t))}return[b(e,t)]})(e,t)));switch(e.__prototype){case"BlockMLayout":e.seq=s(e.seq);break;case"VoltaMLayout":e.body=s(e.body),e.alternates=e.alternates&&e.alternates.map(s);break;case"ABAMLayout":e.main=b(e.main,t),e.rest=s(e.rest)}return e};var k={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:case 3:case 4:return t.yytext;case 2:return 14;case 5:return 5}},rules:[/^(?:\s+)/,/^(?:([*,\[\]<>{}]))/,/^(?:(([1-9])([0-9])*))/,/^(?:(([a-z])+):)/,/^(?:\.\.)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function T(){this.yy={}}return m.lexer=k,T.prototype=m,m.Parser=T,new T}();me.Parser;me.Parser;var fe=function(){return me.parse.apply(me,arguments)};var de,pe;!function(e){e[e.Default=0]="Default",e[e.Brace=1]="Brace",e[e.Bracket=2]="Bracket",e[e.Square=3]="Square"}(de||(de={})),function(e){e[e.Blank=0]="Blank",e[e.Dashed=1]="Dashed",e[e.Solid=2]="Solid"}(pe||(pe={}));const ge=e=>({type:de.Default,staff:e}),ye={"{":de.Brace,"}":de.Brace,"<":de.Bracket,">":de.Bracket,"[":de.Square,"]":de.Square},ve={",":pe.Blank,"-":pe.Solid,".":pe.Dashed},xe=()=>btoa(Math.random().toString().substr(2)).replace(/=/g,"").split("").reverse().slice(0,6).join(""),Se=(e,t)=>{let s=t;for(;s.length;){const t=s.shift(),i=ye[t];if(i){if("}>]".includes(t)&&i===e.type)break;if("{<[".includes(t)){const t={type:i,level:Number.isFinite(e.level)?e.level+1:0};s=Se(t,s),e.subs=e.subs||[],e.subs.push(t)}}else e.subs=e.subs||[],e.subs.push(ge(t))}for(;e.type===de.Default&&e.subs&&1===e.subs.length;){const t=e.subs[0];e.type=t.type,e.subs=t.subs,e.staff=t.staff,e.level=t.level}for(;e.subs&&1===e.subs.length&&e.subs[0].type===de.Default;){const t=e.subs[0];e.subs=t.subs,e.staff=t.staff}return e.grand=e.type===de.Brace&&e.subs&&e.subs.every(e=>e.staff),s},be=e=>e.staff?e.staff:e.subs?be(e.subs[0]):void 0,ke=e=>e.staff?e.staff:e.subs?ke(e.subs[e.subs.length-1]):void 0,Te=(e,t)=>{t[(e=>e.staff?e.staff:e.subs?`${be(e)}-${ke(e)}`:void 0)(e)]=e,e.subs&&e.subs.forEach(e=>Te(e,t))};class StaffLayout{constructor(e){const t=new Set;e.forEach((e,s)=>{e.id=((e,t,s)=>{let i=s;for(i?e.has(i)&&(i+="_"+t.toString()):i=t.toString();e.has(i);)i+="_"+xe();return i})(t,s+1,e.id),t.add(e.id)}),this.staffIds=e.map(e=>e.id),this.conjunctions=e.slice(0,e.length-1).map(e=>e.conjunction?ve[e.conjunction]:pe.Blank);const s=[].concat(...e.map(e=>[...e.leftBounds,e.id,...e.rightBounds]));this.group={type:de.Default},Se(this.group,s);const i={};Te(this.group,i),this.groups=Object.entries(i).map(([e,t])=>{let s=e.split("-");1===s.length&&(s=[s[0],s[0]]);return{group:t,range:s.map(e=>this.staffIds.indexOf(e)),key:e}}),this.maskCache=new Map}get stavesCount(){return this.staffIds?this.staffIds.length:null}get partGroups(){const e=this.groups.filter(e=>e.group.grand);return this.groups.filter(t=>{if(t.group.grand)return!0;if(t.range[0]===t.range[1]){const s=t.range[0];return!e.some(e=>e.range[0]<=s&&e.range[1]>=s)}return!1})}get standaloneGroups(){const e=[],t=s=>{s.grand?e.push(s.subs.map(e=>e.staff)):s.staff?e.push([s.staff]):s.subs&&s.subs.forEach(e=>t(e))};return t(this.group),e}conjunctionBetween(e,t){if(t<=e)return null;let s=pe.Solid;for(let i=e;it&1<({ids:e.staffIds.slice(t.range[0],t.range[1]+1).filter(e=>s.includes(e)),...t})).filter(({ids:e})=>e.length).map(({ids:e,...t})=>({key:t.key,group:t.group,range:[s.indexOf(e[0]),s.indexOf(e[e.length-1])]})),r=s.slice(0,s.length-1).map((t,i)=>{const r=s[i+1];return e.conjunctionBetween(e.staffIds.indexOf(t),e.staffIds.indexOf(r))});return{staffIds:s,conjunctions:r,groups:i}}mask(e){return this.maskCache.get(e)||this.maskCache.set(e,StaffLayout.makeMaskLayout(this,e)),this.maskCache.get(e)}partialMaskCode(e,t=!1){const s=this.staffIds.map((t,s)=>s(e[this.staffIds[s]]=t,e),{}),i=e=>{if(e.staff)return[s[e.staff]?e.staff:null,null===s[e.staff]];const t=e.subs.map(e=>i(e)),r=t.map(e=>e[0]).filter(Boolean).join(","),n=t.some(([e,t])=>t),a=r?((e,t=!1)=>{if(e===de.Default)return e=>e;if(t)switch(e){case de.Brace:return e=>`{${e}`;case de.Bracket:return e=>`<${e}`;case de.Square:return e=>`[${e}`;default:return e=>e}switch(e){case de.Brace:return e=>`{${e}}`;case de.Bracket:return e=>`<${e}>`;case de.Square:return e=>`[${e}]`;default:return e=>e}})(e.type,n)(r):null;return[a,n]};let[r]=i(this.group);return r=r||"",t||(r=r.replace(/[_\w]+/g,"")),r}}var we=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,15],s=[1,16],i=[1,17],r=[1,11],n=[1,12],a=[1,13],o=[1,24],c=[1,25],l=[1,26],u=[5,11,12,13,15,16,17,21,22,23,24],h=[15,16,17,21,22,23,24],m=[11,12,13,15,16,17,21,22,23,24],f=[5,11,12,13,21,22,23,24],d={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,staff_layout:4,EOF:5,seq:6,seq_id:7,seq_br:8,seq_con:9,bound_left:10,"<":11,"[":12,"{":13,bound_right:14,">":15,"]":16,"}":17,bound_lefts:18,bound_rights:19,conjunction:20,"-":21,",":22,".":23,ID:24,seq_bl:25,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",11:"<",12:"[",13:"{",15:">",16:"]",17:"}",21:"-",22:",",23:".",24:"ID"},productions_:[0,[3,2],[4,1],[6,0],[6,1],[6,1],[6,1],[10,1],[10,1],[10,1],[14,1],[14,1],[14,1],[18,1],[18,2],[19,1],[19,2],[20,1],[20,1],[20,1],[7,1],[7,2],[7,2],[7,2],[7,2],[25,1],[25,2],[25,2],[25,2],[8,2],[8,2],[8,2],[9,1],[9,2],[9,2],[9,2],[9,2]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:n[o].next(),this.$=n[o].toJSON();break;case 3:this.$=new Seq;break;case 13:case 15:this.$=[n[o]];break;case 14:case 16:this.$=[...n[o-1],n[o]];break;case 20:this.$=new Seq,this.$.tip.i(n[o]);break;case 21:case 23:n[o-1].next(),n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 22:case 24:n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 25:this.$=new Seq,this.$.tip.bl(n[o]);break;case 26:case 27:n[o-1].next(),n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 28:n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 29:case 30:case 31:n[o-1].tip.br(n[o]),this.$=n[o-1];break;case 32:this.$=new Seq,this.$.tip.con(n[o]),this.$.next();break;case 33:case 34:case 35:case 36:n[o-1].tip.con(n[o]),n[o-1].next(),this.$=n[o-1]}},table:[{3:1,4:2,5:[2,3],6:3,7:4,8:5,9:6,10:14,11:t,12:s,13:i,18:10,20:9,21:r,22:n,23:a,24:[1,7],25:8},{1:[3]},{5:[1,18]},{5:[2,2]},{5:[2,4],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:22,19:20,20:21,21:r,22:n,23:a,24:[1,19]},{5:[2,5],10:14,11:t,12:s,13:i,18:29,20:28,21:r,22:n,23:a,24:[1,27]},{5:[2,6],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:33,19:31,20:32,21:r,22:n,23:a,24:[1,30]},e(u,[2,20]),{14:23,15:o,16:c,17:l,19:35,20:36,21:r,22:n,23:a,24:[1,34]},e(u,[2,32]),e(h,[2,25],{10:37,11:t,12:s,13:i}),e(u,[2,17]),e(u,[2,18]),e(u,[2,19]),e(m,[2,13]),e(m,[2,7]),e(m,[2,8]),e(m,[2,9]),{1:[2,1]},e(u,[2,21]),e(f,[2,29],{14:38,15:o,16:c,17:l}),e(u,[2,33]),e(h,[2,26],{10:37,11:t,12:s,13:i}),e(u,[2,15]),e(u,[2,10]),e(u,[2,11]),e(u,[2,12]),e(u,[2,23]),e(u,[2,35]),e(h,[2,27],{10:37,11:t,12:s,13:i}),e(u,[2,24]),e(f,[2,31],{14:38,15:o,16:c,17:l}),e(u,[2,36]),e(h,[2,28],{10:37,11:t,12:s,13:i}),e(u,[2,22]),e(f,[2,30],{14:38,15:o,16:c,17:l}),e(u,[2,34]),e(m,[2,14]),e(u,[2,16])],defaultActions:{3:[2,2],18:[2,1]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};class Item{constructor(){this.id=null,this.leftBounds=[],this.rightBounds=[],this.conjunction=null}i(e){return this.id=e,this}bl(e){return this.leftBounds=e,this}br(e){return this.rightBounds=e,this}con(e){return this.conjunction=e,this}}class Seq{constructor(){this.body=[],this.tip=new Item}next(){return this.body.push(this.tip),this.tip=new Item,this}toJSON(){return this.body}}var p={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:return t.yytext;case 2:return 24;case 3:return 5}},rules:[/^(?:\s+)/,/^(?:([-,.\[\]<>{}]))/,/^(?:([a-zA-Z_0-9]+))/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3],inclusive:!0}}};function g(){this.yy={}}return d.lexer=p,g.prototype=d,d.Parser=g,new g}();we.Parser;we.Parser;var Me=function(){return we.parse.apply(we,arguments)};const Ee=e=>{const t=Me(e);return new StaffLayout(t)};class DummyLogger{debug(...e){}group(...e){}groupCollapsed(...e){}groupEnd(){}info(...e){}warn(...e){}assert(...e){}}const Ne=(e,t,s=-1/0)=>Math.max(Math.round(e/t)*t,s),Ie=(e,t)=>{const s=e.x-t.x,i=e.y-t.y;return Math.sqrt(s*s+i*i)},Ce=(e,t)=>Number.isInteger(e)&&Number.isInteger(t)?0===t?e:Ce(t,e%t):(console.error("non-integer gcd:",e,t),1),_e=(e,t)=>({numerator:e,denominator:t}),Oe=(e,t)=>{e=Math.round(e),t=Math.round(t);const s=0!==e?Ce(e,t):t;return _e(e/s,t/s)},Be=e=>`${e.numerator}/${e.denominator}`,Ae=(e,t)=>t?e*t.numerator/t.denominator:e,Pe=(e,t)=>{const s=[...e].sort((e,s)=>e[t]-s[t]);let i=null,r=null;return s.reduce((e,n,a)=>(r?n[t]-r[t]<.4?i.push(n):(i.length>1&&e.push(i),r=n,i=[n]):(r=n,i=[n]),i.length>1&&a===s.length-1&&e.push(i),e),[])},Re=e=>{if(e.length<=1)return[];let t=e.slice(1);const s=I.find(t=>t.includes(e[0].semantic));if(!s)return Re(t);const i=t.filter(e=>s.includes(e.semantic));return t=t.filter(e=>!s.includes(e.semantic)),[...i,...Re(t)]},De=e=>{const t=new Set(e),s=Pe(e,"x"),i=[].concat(...s.map(e=>Pe(e,"y")));return i.forEach(e=>e.sort((e,t)=>t.confidence-e.confidence)),i.forEach(e=>{Re(e).forEach(e=>t.delete(e))}),Array.from(t)},Fe=[0,2,4,5,7,9,11],Le=({note:e,alter:t})=>{const s=Math.floor(e/7),i=(e=>{let t=e%7;for(;t<0;)t+=7;return t})(e);return 60+12*s+Fe[i]+t},$e=e=>{const t=Math.max(...e);return e.indexOf(t)},je=1920;var He,Ve,ze,qe,Ge,We;!function(e){e.Up="^",e.Down="_",e.Middle="-"}(He||(He={})),function(e){e.Grace="grace",e.AfterGrace="afterGrace",e.Acciaccatura="acciaccatura",e.Appoggiatura="appoggiatura",e.SlashedGrace="slashedGrace"}(Ve||(Ve={})),function(e){e.Open="Open",e.Close="Close",e.Continue="Continue"}(ze||(ze={})),function(e){e.Pitcher="Pitcher",e.Catcher="Catcher",e.Pierced="Pierced"}(qe||(qe={})),function(e){e.Normal="normal",e.DashedLine="dashed-line",e.DottedLine="dotted-line",e.Zigzag="zigzag",e.Trill="trill"}(Ge||(Ge={})),function(e){e.Normal="Normal",e.Bracket="Bracket",e.Parenthesis="Parenthesis",e.ParenthesisDashed="ParenthesisDashed",e.ArrowDown="ArrowDown"}(We||(We={}));class Term extends SimpleClass{}class EventTerm extends Term{static space({tick:e,duration:t}){const s=new EventTerm({rest:"s",tick:e,accessories:[]});return s.duration=Math.round(t),s}constructor(e){super(),super.assign(e),Object.assign(this,e),Number.isFinite(e.left)&&Number.isFinite(e.right)&&(this.x=(this.left+this.right)/2),Number.isFinite(this.pivotX)||(this.pivotX=this.x)}get alignedTick(){return this.grace?this.tick+this.duration:this.tick}get mainDuration(){return je*2**-this.division*(2-2**-this.dots)}get duration(){let e=this.mainDuration;return this.multiplier&&(e*=this.multiplier.numerator/this.multiplier.denominator),this.timeWarp&&(e*=this.timeWarp.numerator/this.timeWarp.denominator),this.grace?e/8:e}set duration(e){console.assert(Number.isFinite(e),"invalid duration value:",e);const t=Ce(e,128),s=Math.log2(128/t),i=Oe(e*2**s,je);this.division=s,this.dots=0,i.numerator!==i.denominator?this.multiplier=i:this.multiplier=void 0}get prior(){return this.tick}get times(){return this.timeWarp?`${this.timeWarp.numerator}/${this.timeWarp.denominator}`:null}get fullMeasureRest(){return"R"===this.rest}get tipX(){return this.tip?this.tip.x:this.x}get tipY(){return this.tip?this.tip.y:this.ys?this.ys[0]:0}get tremoloCatcher(){return this.tremoloLink===qe.Catcher}get scaleChord(){return this.pitches.map(e=>"CDEFGAB"[(e.note+700)%7]).join("")}get zeroHolder(){return!!this.grace||this.tremoloCatcher}}var Ue;EventTerm.className="EventTerm",function(e){e[e.Clef=0]="Clef",e[e.KeyAcc=1]="KeyAcc",e[e.Acc=2]="Acc",e[e.OctaveShift=3]="OctaveShift",e[e.TimeSignatureC=4]="TimeSignatureC",e[e.TimeSignatureN=5]="TimeSignatureN"}(Ue||(Ue={}));class ContextedTerm extends Term{constructor(e){super(),Object.assign(this,e)}get type(){return R.includes(this.tokenType)?Ue.Clef:/\|key-/.test(this.tokenType)?Ue.KeyAcc:/accidentals-/.test(this.tokenType)?Ue.Acc:$.includes(this.tokenType)?Ue.OctaveShift:F.includes(this.tokenType)?Ue.TimeSignatureC:L.includes(this.tokenType)?Ue.TimeSignatureN:null}get staffLevel(){return[Ue.OctaveShift,Ue.Clef,Ue.KeyAcc].includes(this.type)}get prior(){return this.tick-.1}get clef(){switch(this.tokenType){case B.ClefG:return-this.y-2;case B.ClefF:return 2-this.y;case B.ClefC:return-this.y}return null}get alter(){switch(this.tokenType){case B.AccNatural:case B.KeyNatural:return 0;case B.AccSharp:case B.KeySharp:return 1;case B.AccFlat:case B.KeyFlat:return-1;case B.AccDoublesharp:return 2;case B.AccFlatflat:return-2}return null}get octaveShift(){switch(this.tokenType){case B.OctaveShift8va:return-1;case B.OctaveShift0:return 0;case B.OctaveShift8vb:return 1}return null}get number(){switch(this.tokenType){case B.TimesigZero:return 0;case B.TimesigOne:return 1;case B.TimesigTwo:return 2;case B.TimesigThree:return 3;case B.TimesigFour:return 4;case B.TimesigFive:return 5;case B.TimesigSix:return 6;case B.TimesigSeven:return 7;case B.TimesigEight:return 8;case B.TimesigNine:return 9}return null}}ContextedTerm.className="ContextedTerm";class MarkTerm extends Term{get prior(){return this.tick+.01}}MarkTerm.className="MarkTerm";const Ye=Array(7).fill(0).map((e,t)=>String.fromCodePoint(119133+t));class TempoTerm extends MarkTerm{static fromNumeralText(e){if(/.+=.*\d+/.test(e)){const[t,s]=e.split("=");let i=Ye.findIndex(e=>t.includes(e));i=i>=0?i:2;let r=(2**i).toString();return t.includes(".")&&(r+="."),new TempoTerm({tick:0,duration:r,beats:s})}return null}constructor(e){super(),Object.assign(this,e)}get prior(){return this.tick-.01}get durationMagnitude(){const[e,t,s]=this.duration.match(/^(\d+)(\.)?$/);return je/Number(t)*(s?1.5:1)}get bpm(){const[e]=this.beats.match(/\d+/)||[90];return Number(e)*this.durationMagnitude*4/je}isValid(e=[10,400]){const t=this.bpm;return Number.isFinite(this.bpm)&&t>=e[0]&&t{if(!e.regulated)return;const t=e.eventMap,s=e.events.length,i=e.voices.flat(1).length,r=e.events.filter(e=>e.timeWarp).length,n=new Set(e.events.filter(e=>e.timeWarp&&!(e.rest&&0===e.division)).map(e=>`${e.timeWarp.numerator}/${e.timeWarp.denominator}`)),a=new Set(n);a.delete("2/3");const o=e.voices.some(e=>{const s=e.map(e=>t[e]);if(!s.some(e=>e.timeWarp))return!1;let i=0,r=0,n=0;return s.some((e,t)=>{const a=e.timeWarp?e.timeWarp.denominator:0;if(a!==i){if(i>0&&(r%i||n<2))return!0;r=0,n=0}return i=a,r+=e.duration,++n,!!(t===s.length-1&&i>0&&(r%i||n<2))})}),c=e.voices.some(e=>{const s=e.map(e=>t[e]);let i=0;return s.some(e=>!e.grace&&(e.ticke.timeWarp&&e.timeWarp.denominator>3).map(e=>e.duration)).size>1,u=Ae(je,e.timeSignature),h=e.doubtfulTimesig?e.duration:u,m=e.voices.flat(1).map(e=>t[e]),f=m.some(e=>!e||!Number.isFinite(e.tick)||!Number.isFinite(e.division)||e.division<0||!Number.isFinite(e.duration)||e.duration<=0),d=m.reduce((e,t)=>e||t.tick<0||t.tick+t.duration>h,!1),p=e.duration>u,g=m.some(e=>e.grace),y=e.events.filter(e=>e.grace).length,v=y>=m.length,x=m.some(e=>{let t=e.tick*2**(e.division+2);if(e.timeWarp&&(t*=e.timeWarp.denominator),!Number.isFinite(t))return!0;return Ce(Math.round(t),je)e.reduce(({status:e,broken:s},i,r)=>{const n=t[i];return n.beam?(0===r&&[ze.Continue,ze.Close].includes(n.beam)&&(e=1),e+=Xe[n.beam],s=s||!(e>=0&&e<=1)):n.rest||(s=s||0!==e),{status:e,broken:s}},{status:0,broken:!1})).some(({broken:e})=>e);let b=0,k=0;e.voices.forEach(s=>{const i=s.reduce((e,s)=>e+t[s].duration,0);b+=Math.max(0,e.duration-i),k+=Math.max(0,i-e.duration)}),b/=je;const T=e.events.filter(e=>!(e.grace||e.fullMeasureRest||e.tremoloCatcher||e.predisposition&&!(e.predisposition.fakeP<.1)||Number.isFinite(e.tick))).length,w=e.events.filter(e=>!(e.fullMeasureRest||e.grace||e.tremoloCatcher||m.includes(e))).length,{voiceRugged:M}=e.voices.flat(1).reduce((e,t)=>!e.voiceRugged&&e.es.has(t)?{voiceRugged:!0,es:e.es}:(e.es.add(t),e),{voiceRugged:!1,es:new Set}),E=e.tickTwist||0,N=f||E>=1||c||M||e.tickRatesInStaves.some(e=>e<0)||T>2||!e.timeSignature||d||e.duration>h||e.events.some(e=>e.timeWarp&&e.timeWarp.numerator/e.timeWarp.denominator<=.5),I=!N&&!p&&E<.2&&!o&&!a.size&&!x&&!b&&!k&&!!e.voices.length&&!S&&!g&&!v&&(e.duration===h||Number.isFinite(e.estimatedDuration)&&e.estimatedDuration<=.75*h),C=!(N||p||!(E<.3)||o||x||k||S||g);let _=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(_=Math.max(0,Math.min(_,e.estimatedDuration)));const O=e.duration/_;let B=0;if(e.patched&&!f)B=1;else if(!N){const t=Math.tanh(1*Math.abs(b/Math.max(1,e.voices.length)));let s=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(s=Math.max(0,Math.min(s,e.estimatedDuration)));B=(1-t)*(1-(s?Math.max(0,1-O)**2:0))*(1-Math.tanh(a.size))*(1-E**2)}return{events:s,validEvents:i,voiceRugged:M,nullEvents:T,fakeEvents:w,warpedEvents:r,complicatedTimewarp:l,spaceTime:b,surplusTime:k,durationRate:O,beamBroken:S,fractionalWarp:o,irregularWarpsN:a.size,irregularTick:x,tickTwist:E,tickOverlapped:c,graceInVoice:g,graceN:y,graceDominant:v,perfect:I,fine:C,error:N,qualityScore:B}};class SemanticGraph extends SimpleClass{constructor(e){super(),super.assign(e)}static fromPoints(e=[]){const t=new SemanticGraph;return t.points=e,t}getLayer(e){return this.points.filter(t=>t.semantic===e)}getConfidentLayer(e,t){return this.points.filter(s=>s.semantic===e&&(!Number.isFinite(s.confidence)||s.confidence>=t))}getSystemPoints(){return this.points.filter(e=>E.includes(e.semantic))}getStaffPoints(){return this.points.filter(e=>!E.includes(e.semantic))}offset(e,t){this.points.forEach(s=>{s.x+=e,s.y+=t})}scale(e){this.points.forEach(t=>{t.x*=e,t.y*=e})}transform(e){this.points.forEach(t=>{let s=t.x*e[0][0]+t.y*e[1][0]+e[2][0];const i=t.x*e[0][1]+t.y*e[1][1]+e[2][1];if(t.extension){if(Number.isFinite(t.extension.y1)){const i=t.x*e[0][1]+t.extension.y1*e[1][1]+e[2][1],r=t.x*e[0][1]+t.extension.y2*e[1][1]+e[2][1];s=t.x*e[0][0]+.5*(t.extension.y1+t.extension.y2)*e[1][0]+e[2][0],t.extension.y1=i,t.extension.y2=r}if(Number.isFinite(t.extension.width)){const s=Math.sqrt(e[0][0]*e[1][1]-e[0][1]*e[1][0]);t.extension.width*=s,t.extension.height*=s}}t.x=s,t.y=i})}}SemanticGraph.className="SemanticGraph";const Ze=[g.ClefG,g.ClefF,g.ClefC,g.TimesigC44,g.TimesigC22,g.TimesigZero,g.TimesigOne,g.TimesigTwo,g.TimesigThree,g.TimesigFour,g.TimesigFive,g.TimesigSix,g.TimesigSeven,g.TimesigEight,g.TimesigNine,g.OctaveShift8va,g.OctaveShift8vb,g.OctaveShift0,g.Zero,g.One,g.Two,g.Three,g.Four,g.Five,g.Six,g.Seven,g.Eight,g.Nine,g.AccNatural,g.AccSharp,g.AccDoublesharp,g.AccFlat,g.AccFlatflat,g.NoteheadS0,g.NoteheadS1,g.NoteheadS2,g.NoteheadS1stemU,g.NoteheadS1stemD,g.NoteheadS2stemU,g.NoteheadS2stemD,g.Rest0,g.Rest1,g.Rest2,g.Rest3,g.Rest4,g.Rest5,g.Rest6,g.Rest0W,g.RestM1,g.SlurBegin,g.SlurEnd,g.Dot,g.f,g.p,g.m,g.n,g.r,g.s,g.z,g.ScriptFermata,g.ScriptShortFermata,g.ScriptSforzato,g.ScriptStaccato,g.ScriptStaccatissimo,g.ScriptTurn,g.ScriptTrill,g.ScriptSegno,g.ScriptCoda,g.ScriptArpeggio,g.ScriptPrall,g.ScriptMordent,g.ScriptMarcato,g.ScriptTenuto,g.ScriptPortato,g.PedalStar,g.PedalPed,g.GraceNotehead,g.BeamLeft,g.BeamRight,g.BeamContinue,g.CrescendoBegin,g.CrescendoEnd,g.DecrescendoBegin,g.DecrescendoEnd,g.TremoloLeft,g.TremoloRight,g.TremoloMiddle],Je=[g.AccNatural,g.AccSharp,g.AccDoublesharp,g.AccFlat,g.AccFlatflat,g.NoteheadS0,g.NoteheadS1,g.NoteheadS2,g.NoteheadS1stemU,g.NoteheadS1stemD,g.NoteheadS2stemU,g.NoteheadS2stemD],Qe=[g.SignLined,g.SignInterval],et=[g.NoteheadS1,g.NoteheadS2],tt={AccSharp:B.KeySharp,AccNatural:B.KeyNatural,AccFlat:B.KeyFlat},st={[g.NoteheadS1]:{up:g.NoteheadS1stemU,down:g.NoteheadS1stemD},[g.NoteheadS2]:{up:g.NoteheadS2stemU,down:g.NoteheadS2stemD}},it=[g.Rest0,g.Rest1,g.Rest2,g.Rest3,g.Rest4,g.Rest5,g.Rest6],rt={[B.BeamLeft]:"Open",[B.BeamRight]:"Close",[B.BeamContinue]:"Continue"},nt={Alter1:p.Alternation1,Alter2:p.Alternation2},at=(e,t)=>{switch(e.length){case 0:return;case 1:return e[0];case 2:return"u"===t?Math.min(...e):Math.max(...e);default:{const s=e.reduce((e,t)=>e+t,0)/e.length;return e.sort((e,t)=>Math.abs(e-s)-Math.abs(t-s)),at(e.slice(0,e.length-1),t)}}};class Measure extends SimpleClass{constructor(e){super(),super.assign(e),this.tokens=this.tokens||[],this.antiTokens=this.antiTokens||[],this.barTypes=this.barTypes||{}}get right(){return this.left+this.width}get noteheads(){return this.tokens.filter(e=>e.isNotehead).sort((e,t)=>e.x-t.x)}get chordRects(){const e=this.noteheads.filter(e=>[B.NoteheadS0,B.NoteheadS1stemU,B.NoteheadS2stemU,B.NoteheadS1stemD,B.NoteheadS2stemD].includes(e.type));let t=0;const s=e.reduce((e,s)=>{const i=s.tip?`${s.tip.x}|${s.tip.y}`:`nul${t}`;let r=`${s.type}|${i}`;return!s.tip&&e[r]&&(e[r].some(e=>Math.abs(e.x-s.x){const t=Math.min(...e.map(e=>e.x)),s=Math.max(...e.map(e=>e.x)),i=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.y)),n=e[0],a=n&&n.tip?n.tip.x:t;let o=t,c=s-t,l=null;switch(n.type){case B.NoteheadS0:o-=w.NoteheadS0/2,c+=w.NoteheadS0;break;case B.NoteheadS1stemU:case B.NoteheadS2stemU:l="u",o-=w.NoteheadS1,c+=w.NoteheadS1;break;case B.NoteheadS1stemD:case B.NoteheadS2stemD:l="d",c+=w.NoteheadS1}return{x:o,width:c,stemX:a,stemDirection:l,top:i,bottom:r,tip:n.tip}})}get timeWarped(){return this.tokens&&this.tokens.some(e=>e.timeWarped)}get additionalLines(){const e=this.getChords();return[...e.filter(e=>e.ys.some(e=>e<=-3)).map(e=>({left:e.left,right:e.right,n:Math.ceil(Math.min(...e.ys))+2})),...e.filter(e=>e.ys.some(e=>e>=3)).map(e=>({left:e.left,right:e.right,n:Math.floor(Math.max(...e.ys))-2}))].map(e=>({left:e.left-.28,right:e.right+.28,n:e.n}))}getChords(){const e=this.tokens.filter(e=>W.includes(e.type)),t=this.tokens.filter(e=>Z.includes(e.type)),s=this.tokens.filter(e=>Q.includes(e.type)),i=this.chordRects.map(e=>{const t=this.noteheads.filter(t=>t.direction===e.stemDirection&&t.left>=e.x&&t.right<=e.x+e.width+.2&&t.y>=e.top&&t.y<=e.bottom);t.sort((e,t)=>t.y-e.y);const s=t.map(e=>e.y),i=t.map(e=>e.id),r=t.reduce((e,t)=>Math.max(e,t.division),0);return{rect:e,left:e.x,right:e.x+e.width,pivotX:(n=t,at(n.map(e=>Number.isFinite(e.pivotX)?e.pivotX:e.x),n[0].direction)),ys:s,tip:e.tip,noteIds:i,division:r,dots:null,rest:!1,stemDirection:e.stemDirection,beam:null};var n}).sort((e,t)=>t.left-e.left),r=new Set,n=i.map(({rect:i,...n})=>{if(n.division>=1){const t=[i.bottom,i.top];switch(i.stemDirection){case"u":t[0]=i.tip?i.tip.y-.2:i.top-6-.5;break;case"d":t[1]=i.tip?i.tip.y+.2:i.bottom+6+.5}const a=e.filter(e=>!r.has(e.id)&&e.x>i.stemX-.2&&e.xt[0]&&e.yMath.max(e,t.division),n.division),a.forEach(e=>r.add(e.id)),n.division>=3){const e=i.tip&&s.find(e=>Math.abs(i.tip.x-e.x)<.3&&Math.abs(i.tip.y-e.y)<.7);e&&(n.beam=rt[e.type])}}const a=t.filter(e=>!r.has(e.id)&&e.x>i.x+i.width-.2&&e.xi.top-1&&e.y<=i.bottom+.5);return n.dots=a.reduce((e,t)=>Math.max(e,t.dots),0),a.forEach(e=>r.add(e.id)),n});return n.reverse(),n}getRests(){const e=this.tokens.filter(e=>G.includes(e.type)),t=this.tokens.filter(e=>Z.includes(e.type));return e.map(e=>{const s=t.filter(t=>t.x>e.x+.5&&t.xe.y-1&&t.yMath.max(e,t.dots),0);return{left:e.x-.75,right:e.x+.75,pivotX:e.x,rest:!0,ys:[e.y],noteIds:[e.id],dots:s,division:e.division,stemDirection:null}})}getEvents(){return[...this.getChords(),...this.getRests()].sort((e,t)=>e.left-t.left)}getContexts(e={}){return this.tokens.filter(e=>e.isContexted).sort((e,t)=>e.x-t.x).map(t=>new ContextedTerm({x:t.x,y:t.y,tokenType:t.type,...e}))}assignAccessoriesOnEvents(e){e.forEach(e=>e.accessories=e.accessories||[]);this.tokens.filter(e=>te.includes(e.type)).forEach(t=>{const s=e.filter(e=>t.x>e.left-1&&t.x0){let e=s[0];s.length>1&&(e=s.map(e=>({event:e,d:Math.min(...e.ys.map(e=>Math.abs(e-t.y)))})).sort(({d:e},{d:t})=>e-t).map(({event:e})=>e)[0]);let i=t.y>Math.max(...e.ys)?He.Down:He.Up;se.includes(t.type)&&(i=null),e.accessories.push({type:t.type,id:t.id,direction:i,x:t.x-e.left})}});const t=[...e];t.sort((e,t)=>e.left-t.left);this.tokens.filter(e=>e.type===B.ScriptArpeggio).forEach(e=>{const s=t.find(t=>e.xtt>e.y));s&&s.accessories.push({type:B.ScriptArpeggio,id:e.id,x:e.x-s.left})});this.tokens.filter(e=>e.type===B.GraceNotehead).forEach(t=>{const s=e.find(e=>t.x>e.left&&t.xMath.abs(t.y-e)<.4));s&&(s.grace=Ve.Grace)});const s=this.tokens.filter(e=>e.type===B.TremoloLeft),i=this.tokens.filter(e=>e.type===B.TremoloRight),r=this.tokens.filter(e=>e.type===B.TremoloMiddle),n=e.filter(e=>!e.rest).map(e=>{const t=[...e.ys];e.tip?t.push(e.tip.y):(t.push(e.ys[0]+2),t.push(e.ys[e.ys.length-1]-2));const s=e.tip?e.tip.x:e.left,i=e.tip?e.tip.x:e.right;return{event:e,top:Math.min(...t),bottom:Math.max(...t),stemL:s,stemR:i}});r.forEach(e=>{const t=n.find(t=>!!t.event.tip&&(e.y>t.top&&e.y{const t=n.find(t=>e.y>t.top&&e.yt.stemR&&e.x{const t=n.find(t=>e.y>t.top&&e.yt.stemL-1.6);t&&(t.event.tremolo=t.event.tremolo||2,++t.event.tremolo,t.event.tremoloLink=qe.Catcher)})}assignFeaturesOnEvents(e,t){const s=t.filter(e=>e.x>this.left&&e.xit.includes(e.semantic)),r=s.filter(e=>e.semantic===g.Flag3),n=s.filter(e=>e.semantic===g.Dot),a=s.filter(e=>e.semantic===g.BeamLeft),o=s.filter(e=>e.semantic===g.BeamContinue),c=s.filter(e=>e.semantic===g.BeamRight),l=s.filter(e=>e.semantic===g.GraceNotehead),u=s.filter(e=>e.semantic===g.TremoloRight),h=s.filter(e=>e.semantic===g.vline_Stem),m=s.filter(e=>e.semantic===g.NoteheadS0),f=s.filter(e=>e.semantic===g.NoteheadS1),d=s.filter(e=>e.semantic===g.NoteheadS2);e.forEach(e=>{const t=e.tip?e.tip.x:(e.left+e.right)/2,s=e.tip?Math.min(e.tip.y,e.ys[e.ys.length-1]):e.ys[e.ys.length-1],p=e.tip?Math.max(e.tip.y,e.ys[0]):e.ys[0],g=e.tip?e.tip.x:e.left,y=[0,0,0,0,0,0,0];if(e.rest){i.filter(s=>Ie(s,{x:t,y:e.ys[0]})<.5).forEach(e=>{const t=it.indexOf(e.semantic);y[t]=Math.max(y[t],e.confidence)})}else{const i=[m,f,d].map(t=>t.filter(t=>t.x>e.left&&t.xs-.25&&t.yMath.max(0,...e.map(e=>e.confidence))),n=r.filter(e=>e.y>s-.2&&e.yt.confidence-e.confidence),y[0]=i[0],y[1]=i[1],y[2]=i[2],Array(y.length-3).fill(0).forEach((e,t)=>y[3+t]=n[t]?n[t].confidence:0)}const v=n.filter(s=>s.x>t&&s.xv.some(t=>e.x>t.x&&Math.abs(e.y-t.y)<.2)),S=[Math.max(0,...v.map(e=>e.confidence)),Math.max(0,...x.map(e=>e.confidence))],b=[a,o,c].map(e=>e.filter(e=>Math.abs(e.x-t)<.2&&e.y>s-.2&&e.yMath.max(0,...e.map(e=>e.confidence))),k=h.filter(s=>Ie({x:t,y:e.ys[0]},{x:s.x,y:s.extension.y2})<.5),T=h.filter(s=>Ie({x:t,y:e.ys[e.ys.length-1]},{x:s.x,y:s.extension.y1})<.5),w=[Math.max(0,...k.map(e=>e.confidence)),Math.max(0,...T.map(e=>e.confidence))],M=l.filter(s=>Math.abs(s.x-t)<.6&&e.ys.some(e=>Math.abs(s.y-e)<.4)),E=Math.max(0,...M.map(e=>e.confidence)),N=0===e.division?u.filter(t=>t.x>e.left-2&&t.xe.y>s-.04&&e.yg-2&&e.xe.confidence));e.feature={divisions:y,dots:S,beams:b,stemDirections:w,grace:E,tremoloCatcher:I}})}}Measure.className="Measure",Measure.blackKeys=["tokens","antiTokens"];class Staff extends SimpleClass{constructor({measureCount:e=null,measureBars:t=null,...s}={}){if(super(),super.assign(s),this.height=this.height||10,this.staffY=this.staffY||5,t){let e=0;this.measures=t.map(t=>{const s=new Measure({left:e,width:t-e,height:this.height});return e=t,s})}else this.measures=e?Array(e).fill(null).map(()=>new Measure):[]}get noteRange(){const e=[].concat(...this.measures.map(e=>e.noteheads)).map(e=>e.y);return{top:Math.min(-2,...e),bottom:Math.max(2,...e)}}get additionalLines(){return[].concat(...this.measures.map(e=>e.additionalLines))}rearrangeMeasures(e){if(!e.length)return void console.warn("rearrangeMeasures error, measureBars are empty.");const t=this.measures?.map(e=>e.tokens).flat(1)||[];let s=0;this.measures=e.map(e=>{const t=new Measure({left:s,width:e-s,height:this.height});return s=e,t}),this.reassignTokens(t)}reassignTokens(e=null){e||(e=[].concat(...this.measures.map(e=>e.tokens))),this.measures.forEach(e=>e.tokens=[]),e.forEach(e=>{for(const t of this.measures)if(e.xe.semantic===g.TempoNotehead).forEach(e=>{const t=i.findIndex(t=>/^Notehead/.test(t.semantic)&&Ie(e,t)<.3);t>=0&&i.splice(t,1)});const r=e=>t.displacementSemantics?.[e]?this.semantics.find(t=>t.id===e):null;i.filter(e=>Ze.includes(e.semantic)).forEach(e=>this.appendPoint(e,{points:i}));const n=i.filter(e=>e.semantic===g.vline_Stem).filter(e=>e.extension.y2-e.extension.y1>1.5).map(e=>({x:e.x,y1:e.extension.y1,y2:e.extension.y2,direction:null})),a=i.filter(e=>et.includes(e.semantic)&&e.y>this.semanticTop&&e.y{if((s?1:0)^(e.x{const t=a.filter(t=>Math.abs(t.x-e.x)-w[t.semantic]/2<.32&&Math.abs(t.x-e.x)-w[t.semantic]/2>-.44&&t.y>e.y1-.5&&t.ye.x&&t.y>e.y2)&&!(t.xe.y-t.y);const s=Math.min(...t.map(t=>t.y-e.y1)),n=Math.min(...t.map(t=>e.y2-t.y));if(Math.min(s,n)>.5)return;const a=s!o.has(e.id)).forEach(e=>{const a=n.filter(t=>Math.abs(t.x-e.x)<2&&e.y>t.y1&&e.yMath.abs(t.x-e.x)-Math.abs(s.x-e.x)),o=a[0];if(o){const t="d"===o.direction,s=t?st[e.semantic].down:st[e.semantic].up;this.appendPoint({id:e.id,semantic:s,x:o.x+c(e,o,t),y:e.y,pivotX:e.x,confidence:e.confidence},{tip:{x:o.x,y:t?o.y2:o.y1},antiPoint:r(e.id),points:i})}else s.debug("isolated notehead:",t.index,this.index,e)});const l=i.filter(e=>e.semantic===g.Flag3);l.sort((e,t)=>e.x-t.x),this.appendFlags(l,n);const u=i.filter(e=>e.semantic===g.Dot).map(e=>{const t=Ne(e.y,.5);return{x:e.x,y:t}}).reduce((e,t)=>(e[t.y]=e[t.y]||[],e[t.y].push(t),e),{});Object.entries(u).forEach(([e,t])=>{const s=Number(e);if(t.length>1){t.sort((e,t)=>e.x-t.x);for(let e=0;ee.x>n.x&&e.x-n.x<1.2)&&this.appendPoint({id:n.id,x:n.x,y:s,confidence:n.confidence},{type:B.DotDot,antiPoint:r(n.id),points:i})}}});const h=i.filter(e=>e.semantic===g.KeyAcc);i.filter(e=>tt[e.semantic]).forEach(e=>{h.some(t=>Math.abs(e.x-t.x)<.5&&Math.abs(e.y-t.y)<1)&&this.appendPoint({id:e.id,x:e.x,y:e.y,confidence:e.confidence},{type:tt[e.semantic],points:i})});i.filter(e=>e.semantic===g.OctaveShift8).forEach(e=>{const t=e.y<0?B.OctaveShift8va:B.OctaveShift8vb;this.appendPoint({id:e.id,x:e.x,y:e.y,confidence:e.confidence},{type:t,points:i})});const m=this.semantics.filter(e=>[g.VoltaLeft,g.VoltaRight].includes(e.semantic));m.sort((e,t)=>e.x-t.x);const f=m.reduce((e,t)=>{const s=e[t.semantic],i=Array.from(Object.keys(s)).map(Number).find(e=>t.x{if(s.length>1){const i=s.reduce((e,t)=>e+t.confidence,0);s[0].y*s[1].y<0&&i>=2*e&&this.appendPoint(s[0],{type:B[t]})}})}appendPoint(e,{type:t,points:s=null,antiPoint:i,...r}={}){const n=e.x,a=this.measures.find(e=>nQe.includes(t.semantic)&&Math.abs(t.y-e.y)<.2&&Math.abs(t.x-e.x)<1.2);t.some(e=>e.semantic===g.SignLined)?o=!0:t.some(e=>e.semantic===g.SignInterval)&&(c=!0)}t=t||B[e.semantic];const l=ne[t];let u=re[t];(o||c)&&(u=Math.max(u,1));let h=e.y;Number.isFinite(l)?h=l:u&&(h=c?Ne(h+.5,u)-.5:Ne(h,u));const m=a.tokens.find(e=>e.type===t&&Math.abs(e.x-n)<.1&&Math.abs(e.y-h)<.1);m?Number.isFinite(m.confidence)&&m.confidence3||(a.tokens.push(new Token({id:e.id,type:t,x:n,y:h,pivotX:e.pivotX,confidence:e.confidence,...r})),i&&a.antiTokens.push(new Token({id:i.id,type:t,x:n,y:i.y,confidence:i.confidence})))}appendFlags(e,t){t.map(t=>({...t,flags:e.filter(e=>Math.abs(e.x-t.x)<.3&&e.y>t.y1-.5&&e.ye.flags.length).forEach(e=>{const t=e.flags.reduce((e,t)=>e&&e.confidence>t.confidence?e:t,null),s="d"===e.direction,i=s?Math.min(e.y2,e.y1+6):Math.max(e.y1,e.y2-6),r=e.flags.map(e=>({tip:(i-e.y)*(s?1:-1),confidence:e.confidence})).filter(e=>e.tip<2||e.confidence>.7*t.confidence).length,n=W[r-1];n&&this.appendPoint({id:e.flags[0].id,x:e.x,y:i,confidence:Math.min(...e.flags.map(e=>e.confidence))},{type:n})})}clearTokens(){this.measures.forEach(e=>e.tokens=[]),this.semantics=[]}clearPredictedTokens(){this.measures.forEach(e=>e.tokens=e.tokens.filter(e=>!e.isPredicted))}}Staff.className="Staff",Staff.blackKeys=["index","semanticTop","semanticBttom"];class System extends SimpleClass{constructor({stavesCount:e,...t}){if(super(),super.assign(t),!this.measureBars){const e=5,t=(this.width-e)/this.measureCount;this.measureBars=Array(this.measureCount).fill(0).map((s,i)=>e+t*(i+1))}!t.staves&&e&&(this.staves=Array(e).fill(null).map(()=>new Staff({measureBars:this.measureBars}))),this.arrangePosition(),this.measureCount=this.measureCount||this.measureBars.length,this.sidBlackList=this.sidBlackList||[],this.sidWhiteList=this.sidWhiteList||[]}get noteRange(){if(!this.staves.length)return null;const e=this.staves[0],t=this.staves[this.staves.length-1];return{top:e.top+e.staffY+e.noteRange.top,bottom:t.top+t.staffY+t.noteRange.bottom}}get staffPositions(){return this.staves.map(e=>({y:e.top+e.staffY,radius:2}))}get staffMask(){return this.staffMaskChanged?this.staffMaskChanged:this.prev&&this.staves.length===this.prev.staves.length?this.prev.staffMask:2**this.staves.length-1}get staffTop(){const e=this.staffPositions;return e.length?e[0].y-e[0].radius:0}get staffBottom(){const e=this.staffPositions;return e.length?e[e.length-1].y+e[e.length-1].radius:0}arrangePosition(){let e=0;for(const t of this.staves){if(Number.isFinite(t.top))break;t.top=e,e+=t.height}}tidyMeasureBars(){this.measureBars=this.measureBars.filter(e=>e>1),this.measureBars.sort((e,t)=>e-t);const e=this.width-this.measureBars[this.measureBars.length-1];e>12?this.measureBars.push(this.width):e<2&&(this.measureBars[this.measureBars.length-1]=this.width),this.measureBars=this.measureBars.filter((e,t)=>t<1||e-this.measureBars[t-1]>4)}rearrangeMeasures(){this.measureCount=this.measureBars.length,this.staves.forEach(e=>e.rearrangeMeasures(this.measureBars))}get height(){return this.staves.reduce((e,t)=>e+t.height,0)}get connectionLine(){const e=this.staves[0],t=this.staves[this.staves.length-1];return e&&{top:e.top+e.staffY-2,bottom:t.top+t.staffY+2}}get middleY(){if(!this.staves.length)return 0;return this.staves.reduce((e,t)=>e+t.top+t.staffY,0)/this.staves.length}get timeSignatureOnHead(){return this.staves.some(e=>e.measures[0]?.tokens.some(e=>D.includes(e.type)))}getStaffArray(e){let t=0;return Array(e).fill(null).map((e,s)=>{const i=this.staffMask&1<0?this.measureBars[e-1]:0,s=this.measureBars[e];return[...(this.tokens??[]).filter(e=>e.x>=t&&e.xTempoTerm.fromNumeralText(e.text)).filter(Boolean)]}getEvents(e){if(console.assert(Number.isInteger(this.headMeasureIndex),"invalid headMeasureIndex:",this.headMeasureIndex),!this.measureBars?.length&&this.staves.every(e=>!e.measures?.length))return{staffMask:this.staffMask,columns:[]};const t=this.getStaffArray(e).map(e=>e?e.measures.map(t=>{const s=t.getEvents();return t.assignAccessoriesOnEvents(s),t.assignFeaturesOnEvents(s,e.semantics),{events:s.map(t=>new EventTerm({staff:e.index,system:this.index,...t,rest:t.rest?"r":null})),contexts:t.getContexts({staff:e.index}),voltaBegin:t.tokens.some(e=>e.type===B.VoltaLeft),voltaEnd:t.tokens.some(e=>e.type===B.VoltaRight),alternative:t.alternative,barTypes:t.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts?.filter(e=>[Ue.TimeSignatureC,Ue.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{!t[e]||t[e].contexts.length||t[e].events.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:this.getMarksInMeasure(s),duration:0,voltaBegin:t.some(e=>e[s]?.voltaBegin),voltaEnd:t.some(e=>e[s]?.voltaEnd),alternative:t.some(e=>e[s]?.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s]?.barTypes}),{})}));s.forEach(e=>{[].concat(...e.rows.filter(Boolean).map(e=>e.events)).forEach((e,t)=>e.id=t+1)});const i=s[s.length-1];return i&&(i.break=!0),{staffMask:this.staffMask,columns:s}}getEventsFunctional(e,t,s=[],{useXMap:i=!1}={}){const r=this.getStaffArray(e).map((e,s)=>e?e.measures.map((e,i)=>{const r=t(s,i);return r&&{events:r.map(e=>new EventTerm({system:this.index,...e,rest:e.rest?"r":null})),contexts:e.getContexts({staff:s}),voltaBegin:e.tokens.some(e=>e.type===B.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===B.VoltaRight),alternative:e.alternative,barTypes:e.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}}))),n=Array(this.measureCount).fill(null).map((e,t)=>{const s=r.map(e=>e[t]);if(s.some(e=>!e))return null;let n=null;if(i){const e=[].concat(...s.map(e=>e.events)).reduce((e,t)=>(Number.isFinite(t.tickGroup)&&(e[t.tickGroup]=e[t.tickGroup]||[]),e[t.tickGroup].push(t),e),{});n=Object.values(e).reduce((e,t)=>{const s=Math.min(...t.map(e=>(e.left+e.right)/2));return e.set(s,t),e},new Map)}return{measureIndex:this.headMeasureIndex+t,rows:s,marks:this.getMarksInMeasure(t),duration:0,xMap:n,voltaBegin:s.some(e=>e.voltaBegin),voltaEnd:s.some(e=>e.voltaEnd),alternative:s.some(e=>e.alternative),barTypes:s.reduce((e,t)=>({...e,...t.barTypes}),{})}});return s.forEach(e=>n.forEach(e)),{staffMask:this.staffMask,columns:n}}getContexts(e){const t=this.getStaffArray(e).map(e=>e?e.measures.map(e=>({events:null,contexts:e.getContexts(),voltaBegin:e.tokens.some(e=>e.type===B.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===B.VoltaRight),alternative:t.some(e=>e.alternative),barTypes:e.barTypes})):Array(this.measureCount).fill(null).map(()=>({events:null,contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts.filter(e=>[Ue.TimeSignatureC,Ue.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{t[e].contexts.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:[],duration:0,voltaBegin:t.some(e=>e[s].voltaBegin),voltaEnd:t.some(e=>e[s].voltaEnd),alternative:t.some(e=>e.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s].barTypes}),{})}));return{staffMask:this.staffMask,columns:s}}assignSemantics(e,t){const s=this.staves[e];console.assert(s,"staff is null:",e,this.staves);const i=s.top+s.staffY;t.getSystemPoints().forEach(e=>{const t={...e};t.y+=i,t.extension&&(t.extension={...t.extension},Number.isFinite(t.extension.y1)&&(t.extension.y1+=i,t.extension.y2+=i)),this.semantics.push(t)})}assemble(e,t=new DummyLogger){if(this.measureBars=[],!this.semantics)return;const s=SemanticGraph.fromPoints(this.semantics).getConfidentLayer(g.vline_BarMeasure,e);s.sort((e,t)=>e.x-t.x);const i=this.staffTop,r=this.staffBottom;let n=0;const a=s.reduce((e,t)=>{const s=Number.isFinite(t.confidence)?Math.tanh(t.confidence):1,a=t.x-n>.4?t.x:n;n=t.x;let o=e[a]||0;return o+=(Math.min(t.extension.y2,r)-Math.max(t.extension.y1,i))*s,t.x!==a&&delete e[a],e[t.x]=o,e},{}),o=Object.entries(a).filter(([e,t])=>t>3*this.staves.length).map(([e])=>Number(e));if(this.sidWhiteList.length)for(const e of s)this.sidWhiteList.includes(e.id)&&!o.some(t=>Math.abs(t-e.x)<=2)&&o.push(e.x);o.sort((e,t)=>e-t),o.forEach((e,t)=>{(t<=0||e-o[t-1]>2)&&this.measureBars.push(e)}),this.measureBars.length||this.measureBars.push(this.width),this.tidyMeasureBars(),this.rearrangeMeasures();this.semantics.filter(e=>[g.vline_BarTerminal,g.vline_BarSegment].includes(e.semantic)).forEach(e=>{const t=this.staves[0].measures.find(t=>e.x>t.right-2&&e.x{for(;!(l&1<_(this.index,i,e)),s.clearPredictedTokens(),s.assemble(e,this,t))})}qualifiedSemantics(e,t=1){return e.filter(e=>this.sidWhiteList.includes(e.id)||!this.sidBlackList.includes(e.id)&&(e.confidence>=t||!Number.isFinite(e.confidence))).map(e=>this.displacementSemantics&&this.displacementSemantics[e.id]?{...e,...this.displacementSemantics[e.id]}:e)}clearTokens(){this.staves.forEach(e=>e.clearTokens()),this.semantics=[]}newPoint(e,t,s=1){const i=this.staves[e];console.assert(i,"staff index out of bound:",e,this.staves.length);const{semantic:r,x:n,y:a,confidence:o=0,extension:c=null}=t,l={semantic:r,x:n,y:a,confidence:o,extension:c};return l.extension||delete l.extension,_(this.index,e,l),i.semantics.push(l),i.clearPredictedTokens(),i.assemble(s,this),l}appendToken(e){switch(this.tokens.push(e),e.textType){case p.TempoNumeral:{const t=this.staves[0];if(t){const s=t.top+t.staffY;t.measures.forEach(t=>{t.tokens=t.tokens.filter(t=>!V.includes(t.type)||Math.abs(t.x-e.x)>e.width/2||Math.abs(s+t.y-e.y)>e.fontSize/2)})}}break;case p.Alternation1:case p.Alternation2:this.staves[0].measures.forEach(t=>{const s=Math.min(t.left+t.width,e.x+e.width/2)-Math.max(t.left,e.x-e.width/2);t.alternative=t.alternative||s/t.width>.5})}}}System.className="System",System.blackKeys=["index","pageIndex","prev","next","headMeasureIndex","tokens","indent"];class Page extends SimpleClass{constructor(e){super(),super.assign(e),this.systems=this.systems||[],this.source&&(this.source.matrix=this.source.matrix||[1,0,0,1,0,0])}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}clearTokens(){this.semantics=null,this.tokens=null,this.systems.forEach(e=>e.tokens=null)}assignTexts(e,[t,s]){const i=this.source&&this.source.interval?this.source.interval*(t/this.source.dimensions.height):t/this.height;this.semantics=e.map(e=>{const r={x:(e.cx-s/2)/i,y:(e.cy-t/2)/i},n=this.source&&this.source.matrix?(a=r,{x:(o=this.source.matrix)[0]*a.x+o[2]*a.y+o[4],y:o[1]*a.x+o[3]*a.y+o[5]}):r;var a,o;return{confidence:e.score,x:n.x+this.width/2,y:n.y+this.height/2,semantic:g.rect_Text,extension:{text:e.text,type:e.type,width:e.width/i,height:e.height/i,theta:e.theta,textFeature:e.feature_dict}}})}assemble({textAnnotations:e=null}={},t=new DummyLogger){if(this.tokens=[],this.systems.forEach(e=>e.tokens=[]),this.systems.length){const e=this.systems.map(e=>e.left),t=e[Math.floor((e.length-1)/2)];this.systems.forEach(e=>e.indent=e.left>t+2)}if(this.semantics){const t=this.source?this.source.name:this.index.toString();this.semantics.forEach(s=>{O(t,s);const i={id:s.id,type:B.Text,confidence:s.confidence,textType:nt[s.extension.type]||s.extension.type,text:e&&e[s.id]||s.extension.text,textFeasure:s.extension.textFeature,width:s.extension.width,fontSize:s.extension.height};if(s.semantic===g.rect_Text)switch(i.textType){case p.Title:case p.Author:case p.PageMargin:case p.Other:this.tokens.push(new TextToken({x:s.x,y:s.y,...i}));break;case p.TempoNumeral:case p.Chord:case p.MeasureNumber:case p.Instrument:case p.Alternation1:case p.Alternation2:{const e=this.systems.find(e=>e.top+e.staffTop>s.y);e&&e.appendToken(new TextToken({x:s.x-e.left,y:s.y-e.top,...i}))}break;case p.TextualMark:case p.Times:{const e=[...this.systems].reverse().find(e=>e.topt>=e.top&&tr>=e.left&&r[e,ot[`TimeD${e}`]])),lt=Object.fromEntries(Array(12).fill(null).map((e,t)=>t+1).map(e=>[e,ot[`TimeN${e}`]])),ut=ot,ht={[ut.BOS]:"BOS",[ut.NoteheadS0]:"noteheads-s0",[ut.NoteheadS1]:"noteheads-s1",[ut.NoteheadS2]:"noteheads-s2",[ut.NoteheadGrace]:"GraceNotehead",[ut.Flag3]:"flags-u3",[ut.BeamLeft]:"BeamLeft",[ut.BeamContinue]:"BeamContinue",[ut.BeamRight]:"BeamRight",[ut.Dot]:"dot",[ut.Rest0]:"rests-0o",[ut.Rest1]:"rests-1o",[ut.Rest2]:"rests-2",[ut.Rest3]:"rests-3",[ut.Rest4]:"rests-4",[ut.Rest5]:"rests-5",[ut.Rest6]:"rests-6"},mt={[ut.NoteheadS0]:0,[ut.NoteheadS1]:1,[ut.NoteheadS2]:2,[ut.NoteheadGrace]:2},ft=[ut.NoteheadS0,ut.NoteheadS1,ut.NoteheadS2,ut.NoteheadGrace],dt=[ut.Rest0,ut.Rest1,ut.Rest2,ut.Rest3,ut.Rest4,ut.Rest5,ut.Rest6],pt=[ut.BeamLeft,ut.BeamContinue,ut.BeamRight],gt=[...ft,...dt],yt=[...ft,...dt,ut.vline_Stem],vt=[ut.BOS,ut.NoteheadS0,ut.vline_Stem,...dt],xt=[...gt,ut.vline_Stem],St={[ut.BeamLeft]:"Open",[ut.BeamRight]:"Close"},bt=e=>({type:e,staff:-1,x:0,y1:0,y2:0}),kt=bt(ot.BOS),Tt=e=>[bt(lt[e.numerator]),bt(ct[e.denominator])],wt=(e,t)=>{const s=e.filter((e,s)=>t[s]),i=Math.max(...s);return e.findIndex(e=>e===i)};class SemanticCluster extends SimpleClass{static elementToJSON(e){const t={type:e.type,staff:e.staff,x:e.x,y1:e.y1,y2:e.y2};return e.id&&(t.id=e.id),t}constructor(e){super(),super.assign(e)}get sourceMask(){return this.elements.map(e=>yt.includes(e.type))}get targetMask(){return this.elements.map(e=>vt.includes(e.type))}get vMask(){return this.elements.map(e=>xt.includes(e.type))}get compactMatrixH(){if(!this.matrixH)return null;const e=this.sourceMask,t=this.targetMask;return this.matrixH.filter((t,s)=>e[s]).map(e=>e.filter((e,s)=>t[s]))}set compactMatrixH(e){this.matrixH=Mt([].concat(...e),[this.sourceMask,this.targetMask])}get compactMatrixV(){if(!this._matrixV)return null;const e=this.vMask,t=this._matrixV.filter((t,s)=>e[s]).map(t=>t.filter((t,s)=>e[s]));return[].concat(...t.map((e,t)=>e.slice(0,t)))}set compactMatrixV(e){this.matrixV=e&&Et(e,this.vMask)}get matrixV(){return this.groupsV&&Nt(this.elements.length,this.groupsV)}set matrixV(e){if(!e)return this.groupsV=null,void(this._matrixV=e);const t=[],s=e.map((t,s)=>t.some(Number.isFinite)||e.some(e=>Number.isFinite(e[s])));e.forEach((e,i)=>{if(s[i]){let s=!1;for(let r=0;r=.5){const e=t.findIndex(e=>e.includes(r));t[e].push(i),s=!0;break}}s||t.push([i])}}),this.groupsV=t,this._matrixV=e}toJSON(){return{__prototype:"SemanticCluster",index:this.index,elements:this.elements.map(SemanticCluster.elementToJSON),compactMatrixH:this.compactMatrixH,compactMatrixV:this.compactMatrixV}}static mapMatrix(e,t,s){return t.reduce((t,s,i)=>(t[s]?t[s]=t[s].map((t,s)=>t+e[i][s]?1:0):t[s]=e[i],t),[]).map(e=>s.map(t=>e[t]))}mergeOverlapping(){const e=this.overlappedNoteheads();if(e.length){const t=this.elements.map((t,s)=>{const i=e.find(e=>s===e[1]),r=i?i[0]:s;return r-e.filter(e=>e[1]t.findIndex(e=>e===s));this.elements=s.map(e=>this.elements[e]),console.assert(this.elements.every(Boolean),"null element found:",this,t,s),this.matrixH=SemanticCluster.mapMatrix(this.matrixH,t,s),this.groupsV=this.groupsV.map(e=>Array.from(new Set(e.map(e=>t[e]))))}}overlappedNoteheads(){const e=[],t=this.elements.filter(e=>ft.includes(e.type));for(let s=0;st),t=this.masks?this.masks[1]:e.map(e=>vt.includes(this.elements[e].type)),s=e.map(e=>this.elements[e].type===ut.vline_Stem&&this.elements[e].y2-this.elements[e].y1>2),i=e.filter(e=>[ut.NoteheadS1,ut.NoteheadS2,ut.NoteheadGrace].includes(this.elements[e].type)),r=e.filter(e=>this.elements[e].type===ut.NoteheadS0),n=e.map(()=>!1),a={};i.forEach(t=>{const i=this.elements[t];e.filter(e=>s[e]).filter(e=>this.elements[e].y1-.5i.y1).sort((e,s)=>this.matrixH[t][s]-this.matrixH[t][e]).slice(0,2).filter((e,s)=>0===s||this.matrixH[t][e]>=.5).forEach(e=>{a[e]=a[e]||[],a[e].push(t)})}),r.forEach(e=>{const s=this.elements[e],i=wt(this.matrixH[e],t),r=this.elements[i];r.type===ut.NoteheadS0&&Math.abs(s.x-r.x)<2.6?(n[e]=!0,a[i]=a[i]||[i],a[i].push(e)):a[e]=a[e]||[e]});const o={},c=e.filter(e=>a[e]||dt.includes(this.elements[e].type));c.sort((e,t)=>this.elements[e].x-this.elements[t].x);const l=e.map(e=>e===ut.BOS);c.forEach(e=>{const t=wt(this.matrixH[e],l);o[e]=t,t&&!dt.includes(this.elements[t].type)&&(l[t]=!1),l[e]=!0});const u=this.elements.filter(e=>e.type===ut.Dot),h=this.elements.filter(e=>e.type===ut.Flag3),m=this.elements.filter(e=>pt.includes(e.type)),f=this.groupsV;return c.map(e=>{const t=this.elements[e],s=f?f.findIndex(t=>t.includes(e)):null;if(dt.includes(t.type)){const i=u.filter(e=>e.x>t.x+.5&&e.xt.y1-1&&e.y1this.elements[e]),r=Math.min(...i.map(e=>e.x-.7)),n=Math.max(...i.map(e=>e.x+.7));i.sort((e,t)=>t.y1-e.y1);const c=i.map(e=>e.y1),l=i.map(e=>e.id),f=c[0],d=c[c.length-1],p=u.filter(e=>e.x>n&&e.xf-1&&e.y1{const s=Ne(t.y1,.5);return e[s]=e[s]||[],e[s].push(t),e},{}),g=Math.max(...Object.values(p).map(e=>e.length),0);let y=mt[i[0].type],v=null,x=null,S=null;if(t.type===ut.vline_Stem){if(v=f-t.y1>t.y2-d?"u":"d",S={x:t.x,y:"u"===v?t.y1:t.y2},2===y){const e="u"===v?[t.y1-.4,t.y2-1]:[t.y1+1,t.y2+.4];y+=h.filter(s=>Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1{const s=function*(){for(const t of e)yield t}(),[i,r]=t;return i.map(e=>r.map(t=>e&&t?s.next().value:null))},Et=(e,t)=>{const s=function*(){for(const t of e)yield t}();return t.map((e,i)=>t.map((t,r)=>e&&t&&r{const s=Array(e).fill(null).map((e,s)=>t.findIndex(e=>e.includes(s)));return Array(e).fill(null).map((t,i)=>Array(e).fill(null).map((e,t)=>{if(t>=i)return null;const r=s[i],n=s[t];return r<0||n<0?null:r===n?1:0}))};var It;!function(e){e[e.None=0]="None",e.Mordent="mordent",e.Prall="prall",e.Turn="turn",e.Trill="trill",e.Tremolo="tremolo",e.Arpeggio="arpeggio"}(It||(It={}));const Ct=class Stream{constructor(e){this.array=new Uint8Array(e),this.position=0}eof(){return this.position>=this.array.length}read(e){const t=this.array.slice(this.position,this.position+e);return this.position+=e,t}readString(e){return Array.from(this.read(e)).map(e=>String.fromCharCode(e)).join("")}readInt32(){const e=(this.array[this.position]<<24)+(this.array[this.position+1]<<16)+(this.array[this.position+2]<<8)+this.array[this.position+3];return this.position+=4,e}readInt16(){const e=(this.array[this.position]<<8)+this.array[this.position+1];return this.position+=2,e}readInt8(e){let t=this.array[this.position];return e&&t>127&&(t-=256),this.position+=1,t}readVarInt(){let e=0;for(;;){const t=this.readInt8();if(!(128&t))return e+t;e+=127&t,e<<=7}}};const _t=class OStream{constructor(){this.buffer=""}write(e){this.buffer+=e}writeInt32(e){this.buffer+=String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt16(e){this.buffer+=String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt8(e){this.buffer+=String.fromCharCode(255&e)}writeVarInt(e){if(e<0)throw new Error("OStream.writeVarInt minus number: "+e);const t=127&e;e>>=7;let s=String.fromCharCode(t);for(;e;){const t=127&e;e>>=7,s=String.fromCharCode(128|t)+s}this.buffer+=s}getBuffer(){return this.buffer}getArrayBuffer(){return Uint8Array.from(this.buffer.split("").map(e=>e.charCodeAt(0))).buffer}};var Ot={parseMidiData:function(e){function t(e){const t=e.readString(4),s=e.readInt32();return{id:t,length:s,data:e.read(s)}}let s;function i(e){const t={};t.deltaTime=e.readVarInt();let i=e.readInt8();if(240&~i){let r;128&i?(r=e.readInt8(),s=i):(r=i,i=s);const n=i>>4;switch(t.channel=15&i,t.type="channel",n){case 8:return t.subtype="noteOff",t.noteNumber=r,t.velocity=e.readInt8(),t;case 9:return t.noteNumber=r,t.velocity=e.readInt8(),0===t.velocity?t.subtype="noteOff":t.subtype="noteOn",t;case 10:return t.subtype="noteAftertouch",t.noteNumber=r,t.amount=e.readInt8(),t;case 11:return t.subtype="controller",t.controllerType=r,t.value=e.readInt8(),t;case 12:return t.subtype="programChange",t.programNumber=r,t;case 13:return t.subtype="channelAftertouch",t.amount=r,t;case 14:return t.subtype="pitchBend",t.value=r+(e.readInt8()<<7),t;default:throw new Error("Unrecognised MIDI event type: "+n)}}else{if(255!==i){if(240===i){t.type="sysEx";const s=e.readVarInt();return t.data=e.readString(s),t}if(247===i){t.type="dividedSysEx";const s=e.readVarInt();return t.data=e.readString(s),t}throw new Error("Unrecognised MIDI event type byte: "+i)}{t.type="meta";const s=e.readInt8(),i=e.readVarInt();switch(s){case 0:if(t.subtype="sequenceNumber",2!==i)throw new Error("Expected length for sequenceNumber event is 2, got "+i);return t.number=e.readInt16(),t;case 1:return t.subtype="text",t.text=e.readString(i),t;case 2:return t.subtype="copyrightNotice",t.text=e.readString(i),t;case 3:return t.subtype="trackName",t.text=e.readString(i),t;case 4:return t.subtype="instrumentName",t.text=e.readString(i),t;case 5:return t.subtype="lyrics",t.text=e.readString(i),t;case 6:return t.subtype="marker",t.text=e.readString(i),t;case 7:return t.subtype="cuePoint",t.text=e.readString(i),t;case 32:if(t.subtype="midiChannelPrefix",1!==i)throw new Error("Expected length for midiChannelPrefix event is 1, got "+i);return t.channel=e.readInt8(),t;case 47:if(t.subtype="endOfTrack",0!==i)throw new Error("Expected length for endOfTrack event is 0, got "+i);return t;case 81:if(t.subtype="setTempo",3!==i)throw new Error("Expected length for setTempo event is 3, got "+i);return t.microsecondsPerBeat=(e.readInt8()<<16)+(e.readInt8()<<8)+e.readInt8(),t;case 84:if(t.subtype="smpteOffset",5!==i)throw new Error("Expected length for smpteOffset event is 5, got "+i);const s=e.readInt8();return t.frameRate={0:24,32:25,64:29,96:30}[96&s],t.hour=31&s,t.min=e.readInt8(),t.sec=e.readInt8(),t.frame=e.readInt8(),t.subframe=e.readInt8(),t;case 88:if(t.subtype="timeSignature",4!==i)throw new Error("Expected length for timeSignature event is 4, got "+i);return t.numerator=e.readInt8(),t.denominator=Math.pow(2,e.readInt8()),t.metronome=e.readInt8(),t.thirtyseconds=e.readInt8(),t;case 89:if(t.subtype="keySignature",2!==i)throw new Error("Expected length for keySignature event is 2, got "+i);return t.key=e.readInt8(!0),t.scale=e.readInt8(),t;case 127:return t.subtype="sequencerSpecific",t.data=e.readString(i),t;default:return t.subtype="unknown",t.data=e.readString(i),t}}}}let r=e;"string"==typeof e&&(r=e.split("").map(e=>e.charCodeAt(0)));const n=new Ct(r),a=t(n);if("MThd"!==a.id||6!==a.length)throw new Error("Bad .mid file - header not found");const o=new Ct(a.data),c=o.readInt16(),l=o.readInt16(),u=o.readInt16();let h;if(32768&u)throw new Error("Expressing time division in SMTPE frames is not supported yet");h=u;const m={formatType:c,trackCount:l,ticksPerBeat:h},f=[];for(let e=0;e>16&255),e.writeInt8(t.microsecondsPerBeat>>8&255),e.writeInt8(255&t.microsecondsPerBeat);break;case"smpteOffset":e.writeInt8(84),e.writeVarInt(5);var s={24:0,25:32,29:64,30:96}[t.frameRate];e.writeInt8(t.hour|s),e.writeInt8(t.min),e.writeInt8(t.sec),e.writeInt8(t.frame),e.writeInt8(t.subframe);break;case"timeSignature":e.writeInt8(88),e.writeVarInt(4),e.writeInt8(t.numerator),e.writeInt8(Math.log2(t.denominator)),e.writeInt8(t.metronome),e.writeInt8(t.thirtyseconds);break;case"keySignature":e.writeInt8(89),e.writeVarInt(2),e.writeInt8(t.key),e.writeInt8(t.scale);break;case"sequencerSpecific":e.writeInt8(127),e.writeVarInt(t.data.length),e.write(t.data);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;case"sysEx":e.writeInt8(240),e.writeVarInt(t.data.length),e.write(t.data);break;case"dividedSysEx":e.writeInt8(247),e.writeVarInt(t.data.length),e.write(t.data);break;case"channel":switch(t.subtype){case"noteOn":e.writeInt8(144|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity);break;case"noteOff":e.writeInt8(128|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity?t.velocity:0);break;case"noteAftertouch":e.writeInt8(160|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.amount);break;case"controller":e.writeInt8(176|t.channel),e.writeInt8(t.controllerType),e.writeInt8(t.value);break;case"programChange":e.writeInt8(192|t.channel),e.writeInt8(t.programNumber);break;case"channelAftertouch":e.writeInt8(208|t.channel),e.writeInt8(t.amount);break;case"pitchBend":e.writeInt8(224|t.channel),e.writeInt8(255&t.value),e.writeInt8(t.value>>7&255);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;default:throw new Error("unhandled event type:"+t.type)}}const r=new _t,n=new _t;n.writeInt16(e.formatType),n.writeInt16(t.length),n.writeInt16(e.ticksPerBeat),s(r,"MThd",n.getBuffer());for(let e=0;e{const s=[];let i=120;const r=e.header.ticksPerBeat;for(let t=0;t0){e=a.ticksToEvent/r/(i/60)}"meta"==a.event.type&&"setTempo"==a.event.subtype&&(i=6e7/a.event.microsecondsPerBeat);const s=1e3*e*t||0;o.push([a,s]),a=n()}if(a=n())for(;a;)e()}(),o},trimSequence:e=>{const t=new Map;return e.filter(([{event:e,ticksToEvent:s}])=>{if(s>0&&t.clear(),"channel"!==e.type)return!0;const i=`${e.subtype}|${e.channel}|${e.noteNumber}`;return!t.get(i)&&(t.set(i,e),!0)})},fixOverlapNotes:e=>{const t=new Map,s=new Map,i=[];let r=-1;return e.forEach(([{event:e,ticksToEvent:n}],a)=>{if(n>0&&(r=a),"channel"!==e.type)return;const o=`${e.channel}|${e.noteNumber}`;switch(e.subtype){case"noteOn":t.get(o)?s.set(o,r):t.set(o,r);break;case"noteOff":s.get(o)?(i.push([s.get(o),a]),s.delete(o)):t.delete(o)}}),i.forEach((e,t)=>{for(let s=t-1;s>=0;--s){const t=i[s];if(t[1]t[0]&&++e[0]}}),i.forEach(([t,s])=>{if(s>=e.length-1||t<0)return;const i=e[s],r=e[s+1],n=e[t];if(!n[0].ticksToEvent)return void console.warn("invalid front index:",t,s,n);const a=n[1]/n[0].ticksToEvent;r[1]+=i[1],r[0].ticksToEvent+=i[0].ticksToEvent,i[0].ticksToEvent=n[0].ticksToEvent-1,n[0].ticksToEvent=1,i[1]=i[0].ticksToEvent*a,n[1]=n[0].ticksToEvent*a,e.splice(s,1),e.splice(t,0,i)}),e}};const At=Bt,Pt={64:"Sustain",65:"Portamento",66:"Sostenuto",67:"Soft"};class Notation$1{static parseMidi(e,{fixOverlap:t=!0}={}){const s=[],i={},r={},n=[],a=[];let o=0,c=5e3,l=0,u=4,h=0;const m={};let f,d=0,p=0;const g=[],y=e.header.ticksPerBeat;let v=At.midiToSequence(e);t&&(v=At.trimSequence(At.fixOverlapNotes(v)));const x=v.map(e=>({data:e[0].event,track:e[0].track,deltaTime:e[1],deltaTicks:e[0].ticksToEvent}));let S=0;for(const e of x){if(d+=e.deltaTicks,p=Math.round(1*d),e.deltaTicks>0){const t=e.deltaTicks/y;for(let e=Math.ceil(l);es.channel==t.channel&&s.pitch==e);if(i>=0){const r=s.splice(i,1)[0];n[t.channel].push({channel:t.channel,startTick:r.startTick,endTick:p,pitch:e,start:r.start,duration:o-r.start,velocity:r.velocity,beats:r.beats,track:r.track,finger:r.finger})}else console.debug("unexpected noteOff: ",o,t);m.high=Math.max(m.high||e,e)}break;case"controller":switch(t.controllerType){case 64:case 65:case 66:case 67:const e=Pt[t.controllerType];i[t.channel]=i[t.channel]||{},r[t.channel]=r[t.channel]||[];const s=i[t.channel][e];s&&r[t.channel].push({type:e,start:s.start,duration:o-s.start,value:s.value}),i[t.channel][e]={start:o,value:t.value}}}break;case"meta":switch(t.subtype){case"setTempo":c=t.microsecondsPerBeat/1e3,g.push({tempo:t.microsecondsPerBeat,tick:p,time:o});break;case"timeSignature":u=t.numerator,h=0;break;case"text":if(!f&&/^find-corres:/.test(t.text)){const e=t.text.match(/:([\d\,-]+)/);f=(e&&e[1]||"").split(",").map(e=>Number(e))}else if(/fingering\(.*\)/.test(t.text)){const[e,i]=t.text.match(/\((.+)\)/),r=Number(i);if(!Number.isNaN(r)){const e=s[s.length-1];e&&(e.finger=r);const t=x.find(e=>e.index==S-1);t&&(t.data.finger=r)}}break;case"copyrightNotice":console.log("MIDI copyright:",t.text)}}}return s.forEach(e=>{console.debug("unclosed noteOn event at",e.startTick,e),n[e.channel].push({startTick:e.startTick,endTick:p,pitch:e.pitch,start:e.start,duration:o-e.start,velocity:e.velocity,beats:e.beats,track:e.track,finger:e.finger})}),new Notation$1({channels:n,keyRange:m,pedals:r,bars:a,endTime:o,endTick:p,correspondences:f,events:x,tempos:g,ticksPerBeat:y,meta:{}})}constructor(e){Object.assign(this,e),this.notes=[];for(const e of this.channels)if(e)for(const t of e)this.notes.push(t);this.notes.sort(function(e,t){return e.start-t.start});for(const e in this.notes)this.notes[e].index=Number(e);this.duration=this.notes.length>0?this.endTime-this.notes[0].start:0,this.pitchMap=[];for(const e in this.channels)for(const t in this.channels[e]){const s=this.channels[e][t].pitch;this.pitchMap[s]=this.pitchMap[s]||[],this.pitchMap[s].push(this.channels[e][t])}if(this.pitchMap.forEach(e=>e.sort((e,t)=>e.start-t.start)),this.meta.beatInfos)for(let e=0;e0){const s=this.meta.beatInfos[e-1];t.beatIndex=s.beatIndex+Math.ceil((t.tick-s.tick)/this.ticksPerBeat)}else t.beatIndex=0}{let e=0,t=0,s=5e5;for(const i of this.tempos){e+=s/1e3*(i.tick-t)/this.ticksPerBeat,t=i.tick,s=i.tempo,i.time=e}}}findChordBySoftindex(e,t=.8){return this.notes.filter(s=>Math.abs(s.softIndex-e)e.from,"range is invalid:",e);const t=t=>{const s=Math.max(e.from,this.tempos[t].tick),i=te+s.tempo*t(i),0)/(e.to-e.from))}ticksToTime(e){console.assert(Number.isFinite(e),"invalid tick value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.tick>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.time+(e-i.tick)*i.tempo*.001/this.ticksPerBeat}timeToTicks(e){console.assert(Number.isFinite(e),"invalid time value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.time>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.tick+(e-i.time)*this.ticksPerBeat/(.001*i.tempo)}tickRangeToTimeRange(e){return console.assert(e.to>=e.from,"invalid tick range:",e),{from:this.ticksToTime(e.from),to:this.ticksToTime(e.to)}}scaleTempo({factor:e,headTempo:t}){console.assert(this.tempos&&this.tempos.length,"[Notation.scaleTempo] tempos is empty."),t&&(e=t/this.tempos[0].tempo),console.assert(Number.isFinite(e)&&e>0,"[Notation.scaleTempo] invalid factor:",e),this.tempos.forEach(t=>{t.tempo*=e,t.time*=e}),this.events.forEach(t=>{t.deltaTime*=e,t.time*=e}),this.notes.forEach(t=>{t.start*=e,t.duration*=e}),this.endTime*=e}}var Rt={Notation:Notation$1};const{Notation:Dt}=Rt,Ft=()=>new Promise(e=>requestAnimationFrame(e));var Lt=class MidiPlayer$1{constructor(e,{cacheSpan:t=600,onMidi:s,onPlayFinish:i,onTurnCursor:r}={}){let n;this.cacheSpan=t,this.onMidi=s,this.onPlayFinish=i,this.onTurnCursor=r,n=e.notes&&Number.isFinite(e.endTime)?e:Dt.parseMidi(e),this.notation=n,this.events=n.events,this.isPlaying=!1,this.progressTime=0,this.startTime=performance.now(),this.duration=n.endTime,this.cursorTurnDelta=0,console.assert(n.tempos&&n.tempos.length,"[MidiPlayer] invalid notation, tempos is empty.")}dispose(){this.isPlaying=!1,this.progressTime=0}get progressTicks(){return this.notation.timeToTicks(this.progressTime)}set progressTicks(e){this.progressTime=this.notation.ticksToTime(e),this.onTurnCursor&&this.onTurnCursor(this.progressTime)}async play({nextFrame:e=Ft}={}){this.progressTime>=this.duration&&(this.progressTime=0);let t=performance.now();this.startTime=t-this.progressTime,this.isPlaying=!0;let s=this.events.findIndex(e=>e.time>=t-this.startTime);for(;this.isPlaying;){for(;sthis.progressTime+this.cacheSpan)break;"channel"===e.data.type&&this.startTime+e.time>=t&&this.onMidi&&this.onMidi(e.data,this.startTime+e.time)}if(await e(),!this.isPlaying)break;if(0!==this.cursorTurnDelta){const e=this.cursorTurnDelta<0;if(this.startTime-=this.cursorTurnDelta,this.cursorTurnDelta=0,e)for(;s>0;--s){const e=this.events[s].time;if(this.startTime+ethis.duration&&(this.isPlaying=!1,this.onPlayFinish&&this.onPlayFinish())}}pause(){this.isPlaying=!1}turnCursor(e){this.isPlaying?this.cursorTurnDelta+=e-this.progressTime:this.progressTime=e,this.onTurnCursor&&this.onTurnCursor(e)}},$t={CostStepAttenuation:.6,SkipDeep:3,PriorDistanceSigmoidFactor:.1,PriorValueSigmoidFactor:.12,SkipCost:.5,LagOffsetCost:1,LeadOffsetCost:1.6,ZeroOffsetCost:.58,RelocationThreshold:6};const{pick:jt}=x.default,Ht=$t;class Node$2{constructor(e,t){this.s_note=e,this.c_note=t,console.assert(null!=this.s_note.softIndex,"s_note softIndex is null"),this.offset=this.s_note.softIndex-this.c_note.softIndex,this._prev=null,this._totalCost=0,this._value=0,this.cacheDirty=!0}get prev(){return this._prev}set prev(e){e!=this._prev&&(this._prev=e,this.cacheDirty=!0)}get si(){return this.s_note.index}get ci(){return this.c_note.index}get root(){return this.prev.root||this}get rootSi(){return this.prev.zero?this.si:this.prev.rootSi}get id(){return`${this.s_note.index},${this.c_note.index}`}static cost(e,t,s){return e*Ht.CostStepAttenuation+Math.tanh(t*Ht.SkipCost)+Math.tanh(.5*s)}updateCache(){this.cacheDirty&&(this._totalCost=Node$2.cost(this.prev.totalCost,this.si-this.prev.si-1,this.selfCost),this._value=this.prev.value+1-Math.tanh(.5*this.selfCost),this.cacheDirty=!1)}get totalCost(){return this.updateCache(),this._totalCost}get value(){return this.updateCache(),this._value}get deep(){return this.prev.deep+1}get path(){const e=[];for(let t=this;!t.zero;t=t.prev)e[t.si]=t.ci;for(let t=0;t=1,"node index error:",this,e);const s=Node$2.cost(e.totalCost,this.si-e.si-1,t);return(!this.prev||s0?Ht.LagOffsetCost:Ht.LeadOffsetCost))**2}return t}priorByOffset(e){const t=Math.abs(this.offset-e)/1;return Math.tanh(this.value*Ht.PriorValueSigmoidFactor)-Math.tanh(t*Ht.PriorDistanceSigmoidFactor)}static zero(){return{zero:!0,totalCost:0,value:0,si:-1,ci:-1,deep:0,offset:0}}}var Vt=Node$2;const zt=$t,qt=Vt;var Gt=class Navigator$1{constructor(e,t,s={}){this.criterion=e,this.sample=t,this.getCursorOffset=s.getCursorOffset||(()=>null),this.outOfPage=s.outOfPage,this.bestNode=null,this.fineCursor=null,this.breakingSI=t.notes.length-1,this.zeroNode=qt.zero(),this.zeroNode.offset=this.getCursorOffset()||0,this.relocationThreshold=s.relocationThreshold||zt.RelocationThreshold}step(e){const t=this.sample.notes[e];if(t.matches.length>0){t.matches.forEach(t=>{t.evaluatePrev(this.zeroNode);for(let s=e-1;s>=Math.max(this.breakingSI+1,e-zt.SkipDeep);--s){const i=this.sample.notes[s];console.assert(i,"prevNote is null:",s,e,this.sample.notes),i.matches.forEach(e=>{const s=t.offset-e.offset;s<2/zt.LagOffsetCost&&s>-2/zt.LeadOffsetCost&&t.evaluatePrev(e)})}if(t.prior=t.totalCost>1.99?-1:t.priorByOffset(this.zeroNode.offset),t.prior>0&&this.outOfPage){const e=this.criterion.notes[t.ci].startTick;this.outOfPage(e)&&(t.prior-=.7)}}),t.matches.sort((e,t)=>t.prior-e.prior),this.cursors=t.matches;let s=null;const i=this.nullSteps(e),r=this.cursors[0];r&&r.totalCost<1&&(r.prior>0||r.totalCost<.4&&Math.log(Math.max(i*r.value,.001))>this.relocationThreshold)&&(this.zeroNode.offset=r.offset,s=r,(!this.bestNode||r.value>this.bestNode.value)&&(this.bestNode=r)),s?this.fineCursor=s:this.resetCursor(e,{breaking:!1})||(this.zeroNode.offset+=t.deltaSi*Math.tanh(i),console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",t.deltaSi,i))}else this.cursors=[]}path({fromIndex:e=0,toIndex:t=this.sample.notes.length-1}={}){const s=[];let i=null;for(let r=t;r>=e;){const e=this.sample.notes[r];if(!e.matches.length||e.matches[0].prior<-.01||e.matches[0].totalCost>=1){s[r]=-1,--r;continue}null!=i&&(e.matches.forEach(e=>e.backPrior=e.totalCost<1.99?e.priorByOffset(i):-1),e.matches.sort((e,t)=>t.backPrior-e.backPrior));const t=e.matches[0];t.path.forEach((e,t)=>s[t]=e),i=t.root.offset,r=t.rootSi-1}return console.assert(s.length==t+1,"path length error:",s,e,t+1,this.sample.notes.length,this.sample.notes.length?this.sample.notes[this.sample.notes.length-1].index:null),s}nullSteps(e){return e-(this.fineCursor?this.fineCursor.si:-1)-1}resetCursor(e,{breaking:t=!0}={}){t&&(this.breakingSI=e);const s=this.getCursorOffset();return null!=s&&(this.zeroNode.offset=s,this.zeroNode.si=e,this.fineCursor=null,console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",s),!0)}get relocationTendency(){const e=this.cursors&&this.cursors[0];if(!e)return null;const t=this.nullSteps(e.si);return t<=0?0:Math.log(Math.max(t*e.value,.001))/this.relocationThreshold}};const Wt=Vt,Ut=Gt,Yt=e=>Math.tanh(e/192),Xt=function(e,t,{softIndexFactor:s=1}={}){const i=e[t=Number(t)];if(t>0){const r=e[t-1];console.assert(null!=i.start,"note.start is null",i),console.assert(null!=r.start,"lastNote.start is null",r),i.deltaSi=Yt((i.start-r.start)*s),i.softIndex=r.softIndex+i.deltaSi,console.assert(!Number.isNaN(i.deltaSi),"note.deltaSi is NaN.",i.start,r.start)}else i.softIndex=0,i.deltaSi=0};var Kt={normalizeInterval:Yt,makeNoteSoftIndex:Xt,makeMatchNodes:function(e,t,s=Wt.zero()){e.matches=[];const i=t.pitchMap[e.pitch];if(i)for(const t of i){const i=new Wt(e,t);s&&i.evaluatePrev(s),e.matches.push(i)}},genNotationContext:function(e,{softIndexFactor:t=1}={}){for(let s=0;s"setTempo"==e.subtype)||(n.push({time:t,type:"meta",subtype:"timeSignature",numerator:4,denominator:4,thirtyseconds:8}),n.push({time:t,type:"meta",subtype:"setTempo",microsecondsPerBeat:e.microsecondsPerBeat}));let a=t||0;if(e.notes)for(const t of e.notes)n.push({time:t.start,type:"channel",subtype:"noteOn",channel:t.channel||0,noteNumber:t.pitch,velocity:t.velocity,finger:t.finger}),a=Math.max(a,t.start),Number.isFinite(s)&&(t.duration=t.duration||s),t.duration&&(n.push({time:t.start+t.duration,type:"channel",subtype:"noteOff",channel:t.channel||0,noteNumber:t.pitch,velocity:0}),a=Math.max(a,t.start+t.duration));if(e.events){const t=e.events.filter(e=>!Jt.includes(e.data.subtype));for(const e of t)n.push({time:e.time,...e.data}),a=Math.max(a,e.time)}return n.push({time:a+100,type:"meta",subtype:"endOfTrack"}),n.sort(function(e,t){return e.time-t.time}),n.map((e,t)=>({event:e,index:t})).filter(({event:e})=>"noteOn"==e.subtype&&null!=e.finger).reverse().forEach(({event:e,index:t})=>n.splice(t+1,0,{time:e.time,type:"meta",subtype:"text",text:`fingering(${e.finger})`})),n.forEach(e=>e.ticks=Math.round((e.time-t)*i)),n.forEach((e,t)=>e.deltaTime=e.ticks-(t>0?n[t-1].ticks:0)),{header:r,tracks:[n]}}var es={sliceMidi:(e,t,s)=>({header:e.header,tracks:e.tracks.map(e=>((e,t,s)=>{(e=>{let t=0;e.forEach(e=>{t+=e.deltaTime,e.tick=t})})(e);const i=[],r={};return e.forEach(e=>{e.tick>=t&&e.tick<=s&&"endOfTrack"!==e.subtype?i.push({...e,tick:e.tick-t}):e.ticki.push({...e,tick:0})),i.push({tick:s-t,type:"meta",subtype:"endOfTrack"}),(e=>{let t=0;e.sort((e,t)=>e.tick-t.tick).forEach(e=>{e.deltaTime=e.tick-t,t=e.tick})})(i),i})(e,t,s))}),encodeToMIDIData:Qt,encodeToMIDI:function(e,t){const s=Qt(e,t);return Zt.encodeMidiFile(s)}};var ts={MIDI:Ot,MusicNotation:Rt,MidiPlayer:Lt,Matcher:Kt,MidiUtils:es};const ss=["id","ids","pitch","velocity","track","channel","rest","tied","overlapped","implicitType","afterGrace","contextIndex","staffTrack","chordPosition","division"];class MetaNotation{static fromAbsoluteNotes(e,t,s){const i=new MetaNotation(s);return i.measures=Array(t.length).fill(null).map((s,i)=>{const r=t[i],n=t[i+1]?t[i+1]-r:0,a=e.filter(e=>e.measure===i+1).map(e=>({tick:e.startTick-r,duration:e.endTick-e.startTick,...v.default(e,ss),subNotes:[]}));return a.forEach(e=>["rest","tied","implicitType","afterGrace"].forEach(t=>{e[t]||delete e[t]})),{tick:r,duration:n,notes:a}}),i.idTrackMap=e.reduce((e,t)=>(t.id&&(e[t.id]=t.track),e),{}),i}static performAbsoluteNotes(e,{withRestTied:t=!1}={}){const s=e.filter(e=>(t||!e.rest&&!e.tied)&&!e.overlapped).map(e=>({measure:e.measure,channel:e.channel,track:e.track,start:e.start,startTick:e.startTick,endTick:e.endTick,pitch:e.pitch,duration:e.duration,velocity:e.velocity||127,id:e.id,ids:e.ids,staffTrack:e.staffTrack,contextIndex:e.contextIndex,implicitType:e.implicitType,chordPosition:e.chordPosition})).reduce((e,t)=>{const s=`${t.channel}|${t.start}|${t.pitch}`,i=e[s];return i?i.ids.push(...t.ids):e[s]=t,e},{});return Object.values(s)}constructor(e){this.ripe=!1,e&&Object.assign(this,e)}get trackTickBias(){const e=this.measures[0];return this.trackNames.reduce((t,s,i)=>{if(t[s]=0,e){const r=e.notes.find(e=>e.track===i);r&&(t[s]=Math.min(r.tick,0))}return t},{})}get idSet(){return this.measures.reduce((e,t)=>(t.notes.filter(e=>!e.rest).forEach(t=>t.ids.forEach(t=>e.add(t))),e),new Set)}toJSON(){return{__prototype:"LilyNotation",measures:this.measures,idTrackMap:this.idTrackMap,trackNames:this.trackNames,ripe:this.ripe}}toAbsoluteNotes(e){let t=0;const s=e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length);const i=s.notes.map(s=>({startTick:t+s.tick,endTick:t+s.tick+s.duration,start:t+s.tick,duration:s.duration,measure:e,...v.default(s,ss)}));return t+=s.duration,i});return[].concat(...s)}toPerformingNotation(e,t={}){const s=this.toAbsoluteNotes(e),i=MetaNotation.performAbsoluteNotes(s,t),r=Math.max(...i.map(e=>e.start+e.duration)),n=e.reduce((e,t)=>e+this.measures[t-1].duration,0);return new ts.MusicNotation.Notation({ticksPerBeat:480,meta:{},tempos:[],channels:[i],endTime:r,endTick:n})}toPerformingMIDI(e,{trackList:t}={}){if(!e.length)return null;const s=-Math.min(0,...this.measures[0]?.events.map(e=>e.ticks)||[],...this.measures[0]?.notes.map(e=>e.tick)||[]);let i=s;const r=e.map(e=>{const t=this.measures[e-1];console.assert(!!t,"invalid measure index:",e,this.measures.length);const s=t.events.map(t=>({ticks:i+t.ticks,track:t.track,data:{...t.data,measure:e}}));return i+=t.duration,s}),n=e=>e.ticks+("noteOff"===e.subtype?-1e-8:0),a=[].concat(...r).reduce((e,t)=>(e[t.track]=e[t.track]||[],e[t.track].push({ticks:t.ticks,...t.data}),e),[]);a[0]=a[0]||[],i=s,e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length),Number.isFinite(s.duration)&&(s.notes.forEach(s=>{if(t&&!t[s.track])return;if(s.rest)return;const r=i+s.tick,n=a[s.track]=a[s.track]||[];s.subNotes.forEach(t=>{n.push({ticks:r+t.startTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOn",channel:s.channel,noteNumber:t.pitch,velocity:t.velocity,staffTrack:s.staffTrack,staff:s.staff}),n.push({ticks:r+t.endTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOff",channel:s.channel,noteNumber:t.pitch,velocity:0,staffTrack:s.staffTrack,staff:s.staff})})}),i+=s.duration)});const o=i;for(let e=0;e{e.sort((e,t)=>n(e)-n(t));let t=0;e.forEach(e=>{e.deltaTime=e.ticks-t,Number.isFinite(e.deltaTime)?t=e.ticks:e.deltaTime=0}),e.push({deltaTime:Math.max(o-t,0),type:"meta",subtype:"endOfTrack"})}),{header:{formatType:0,ticksPerBeat:480},tracks:a,zeroTick:s}}toPerformingNotationWithEvents(e,t={}){if(!e.length)return null;const{zeroTick:s,...i}=this.toPerformingMIDI(e,t),r=ts.MusicNotation.Notation.parseMidi(i);is(r);let n=s;return r.measures=e.map(e=>{const t=n;return n+=this.measures[e-1].duration,{index:e,startTick:t,endTick:n}}),r}setTempo(e){let t=!1;for(const s of this.measures)for(const i of s.events)"setTempo"===i.data.subtype&&(i.data.microsecondsPerBeat=6e7/e,t=!0);return t}}const is=(e,t=["ids","measure","staffTrack"])=>{const s=(e,t,s)=>`${e}|${t}|${s}`,i=e.notes.reduce((e,t)=>(e[s(t.channel,t.pitch,t.startTick)]=t,e),{});e.events.forEach(e=>{if("noteOn"===e.data.subtype){const r=s(e.data.channel,e.data.noteNumber,e.ticks),n=i[r];console.assert(!!n,"cannot find note of",r),n&&Object.assign(n,v.default(e.data,t))}})};var rs,ns={exports:{}},as={exports:{}};as.exports=rs=rs||function(e,t){var s;if("undefined"!=typeof window&&window.crypto&&(s=window.crypto),"undefined"!=typeof self&&self.crypto&&(s=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(s=globalThis.crypto),!s&&"undefined"!=typeof window&&window.msCrypto&&(s=window.msCrypto),!s&&"undefined"!=typeof global&&global.crypto&&(s=global.crypto),!s)try{s=require("crypto")}catch(e){}var i=function(){if(s){if("function"==typeof s.getRandomValues)try{return s.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof s.randomBytes)try{return s.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},r=Object.create||function(){function e(){}return function(t){var s;return e.prototype=t,s=new e,e.prototype=null,s}}(),n={},a=n.lib={},o=a.Base={extend:function(e){var t=r(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=a.WordArray=o.extend({init:function(e,s){e=this.words=e||[],this.sigBytes=s!=t?s:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,s=e.words,i=this.sigBytes,r=e.sigBytes;if(this.clamp(),i%4)for(var n=0;n>>2]>>>24-n%4*8&255;t[i+n>>>2]|=a<<24-(i+n)%4*8}else for(var o=0;o>>2]=s[o>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],s=0;s>>2]>>>24-r%4*8&255;i.push((n>>>4).toString(16)),i.push((15&n).toString(16))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>3]|=parseInt(e.substr(i,2),16)<<24-i%8*4;return new c.init(s,t/2)}},h=l.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,i=[],r=0;r>>2]>>>24-r%4*8&255;i.push(String.fromCharCode(n))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>2]|=(255&e.charCodeAt(i))<<24-i%4*8;return new c.init(s,t)}},m=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},f=a.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=m.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s,i=this._data,r=i.words,n=i.sigBytes,a=this.blockSize,o=n/(4*a),l=(o=t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*a,u=e.min(4*l,n);if(l){for(var h=0;h>>7)^(d<<14|d>>>18)^d>>>3,g=l[f-2],y=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;l[f]=p+l[f-7]+y+l[f-16]}var v=i&r^i&n^r&n,x=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),S=m+((o<<26|o>>>6)^(o<<21|o>>>11)^(o<<7|o>>>25))+(o&u^~o&h)+c[f]+l[f];m=h,h=u,u=o,o=a+S|0,a=n,n=r,r=i,i=S+(x+v)|0}s[0]=s[0]+i|0,s[1]=s[1]+r|0,s[2]=s[2]+n|0,s[3]=s[3]+a|0,s[4]=s[4]+o|0,s[5]=s[5]+u|0,s[6]=s[6]+h|0,s[7]=s[7]+m|0},_doFinalize:function(){var e=this._data,s=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return s[r>>>5]|=128<<24-r%32,s[14+(r+64>>>9<<4)]=t.floor(i/4294967296),s[15+(r+64>>>9<<4)]=i,e.sigBytes=4*s.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}});s.SHA256=n._createHelper(u),s.HmacSHA256=n._createHmacHelper(u)}(Math),e.SHA256}(as.exports);var os=ns.exports;class HashVector{static fromHash(e){const t=[];for(const s of e)for(let e=0;e<8;++e)t.push(s>>e&1?1:-1);return new HashVector(t)}static fromString(e){const t=(e=>{const{words:t,sigBytes:s}=os(e),i=t.map(e=>e<0?e+4294967296:e),r=s/t.length;return new Uint8Array(s).map((e,t)=>i[Math.floor(t/r)]>>8*(3-t%r)&255)})(e);return HashVector.fromHash(t)}static fromWords(e){return e.map(e=>HashVector.fromString(e)).reduce((e,t)=>e.add(t),HashVector.zero)}static concat(...e){const t=e.map(e=>e.fields).flat(1);return new HashVector(t)}constructor(e=null){this.fields=e||Array(256).fill(0)}get length(){return this.fields.length}toHash(){return Uint8Array.from(Array(this.length/8).fill(0).map((e,t)=>this.fields.slice(8*t,8*(t+1)).reduce((e,t,s)=>e|(t>0?1:0)<this.fields[s]=t+e.fields[s]),this}scale(e){return this.fields=this.fields.map(t=>t*e),this}sub(e){const t=e>0?this.fields.slice(0,e):this.fields.slice(e);return new HashVector(t)}static get zero(){return new HashVector}}const cs=Array(256).fill(0).map((e,t)=>(e=>{let t=0;for(let s=e;s>0;s>>=1)s%2&&++t;return t})(t));cs.reduce((e,t,s)=>({...e,[("0"+s.toString(16)).slice(-2)]:t}),{});const ls=(e,t)=>{const s=8*e.length,i=((e,t)=>e.map((e,s)=>e^t[s]))(e,t);return(s-2*i.reduce((e,t)=>e+cs[t],0))/s},us=e=>("0"+e.toString(16)).slice(-2);var hs={Matrix:function(){}};hs.Matrix.create=function(e){return(new hs.Matrix).setElements(e)},hs.Matrix.I=function(e){for(var t,s=[],i=e;i--;)for(t=e,s[i]=[];t--;)s[i][t]=i===t?1:0;return hs.Matrix.create(s)},hs.Matrix.prototype={dup:function(){return hs.Matrix.create(this.elements)},isSquare:function(){var e=0===this.elements.length?0:this.elements[0].length;return this.elements.length===e},toRightTriangular:function(){if(0===this.elements.length)return hs.Matrix.create([]);var e,t,s,i,r=this.dup(),n=this.elements.length,a=this.elements[0].length;for(t=0;t=n&&l[a].push(r);for(o.elements[a]=s,e=a;e--;){for(s=[],t=0;t1===e?null:(e=>{const t=Math.round(1920*e);return Oe(t,1920)})(e);var ds,ps,gs;!function(e){e[e.PLACE=0]="PLACE",e[e.VERTICAL=1]="VERTICAL",e[e.HORIZONTAL=2]="HORIZONTAL"}(ds||(ds={}));class Action{constructor(e){Object.assign(this,e)}static P(e){return new Action({type:ds.PLACE,e1:e})}static V(e,t,s=1){return new Action({type:ds.VERTICAL,e1:s>0?e:t,e2:s>0?t:e})}static H(e,t){return new Action({type:ds.HORIZONTAL,e1:e,e2:t})}get id(){switch(this.type){case ds.PLACE:return this.e1.toString();case ds.VERTICAL:return`${this.e1}|${this.e2}`;case ds.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(e,t){const s=Array(e.stages.length).fill(null).map(()=>Array(e.stages.length).fill(null).map(()=>new Set));e.actions.filter(e=>e.type===ds.HORIZONTAL).forEach(t=>{const i=e.stages.findIndex(e=>e.events.includes(t.e1)),r=e.stages.findIndex(e=>e.events.includes(t.e2));console.assert(i>=0&&r>=0,"invalid stages for H action:",e.id,e.stages,t),s[i][r].add(t.e1)}),s[0][e.stages.length-1].add(0);const i=e.stagedEvents,r=t.matrixH[t.matrixH.length-1].filter((e,t)=>!i.has(t)),n=Math.max(0,Math.max(...r)-.01),a=e.actions.filter(e=>e.type===ds.HORIZONTAL),o=Object.keys(t.eventMap).map(Number).filter(e=>!a.find(t=>t.e2===e));return e.stages.forEach(i=>{i.events.forEach(r=>{if(r>0){!a.find(e=>e.e1===r)&&t.matrixH[t.matrixH.length-1][r]>=n&&(o.some(e=>t.matrixH[e][r]>0)||s[i.index][e.stages.length-1].add(r))}})}),new StageMatrix({matrix:s})}constructor(e){Object.assign(this,e)}pathOf(e,t,s,i=0){if(this.matrix[e][t].size){const r=[...this.matrix[e][t]][i];if(t===s)return[r];for(let e=t+1;e<=s;++e){const i=this.pathOf(t,e,s);if(i)return[r,...i]}}return null}findDoublePath(e,t){const s=[];for(let i=t;i>=e+1;--i)for(let r=0;rt.forEach(t=>e.forEach(e=>t.delete(e))))}toEquations(e){const t=[];for(let s=1;sn[e]=1),r.forEach(e=>n[e]=-1),t.push(n),this.reducePath(i.length>r.length?i:r)}}}return t}}class PathNode{constructor(e){Object.assign(this,e),console.assert(this.logger,"logger is null:",e)}get actions(){const e=this.parent?this.parent.actions:[];return this.action?[...e,this.action]:e}get id(){return this.actions.map(e=>e.id).sort().join(" ")}get stagedEvents(){const e=new Set;return this.stages&&this.stages.forEach(t=>t.events.forEach(t=>t>=0&&e.add(t))),e}like(e){return e.split(" ").sort().join(" ")===this.id}constructStages(e){this.stages=[{events:[-1]}];for(const t of this.actions)switch(t.type){case ds.PLACE:this.stages.unshift({events:[t.e1]});break;case ds.VERTICAL:{const e=this.stages.find(e=>e.events.includes(t.e1)),s=this.stages.find(e=>e.events.includes(t.e2));console.assert(e||s,"invalid V action:",this.stages,t),e&&s?(e.events.push(...s.events),s.events=null,this.stages=this.stages.filter(e=>e.events)):e?s||e.events.push(t.e2):s.events.unshift(t.e1)}break;case ds.HORIZONTAL:{const s=this.stages.find(e=>e.events.includes(t.e1)),i=this.stages.find(e=>e.events.includes(t.e2));console.assert(s||i,"invalid H action:",this.stages,t);const r=s=>{console.assert(e.eventMap[s],"invalid event id:",t.id,s,e.eventMap);const i=e.eventMap[s].x,r=this.stages.find(t=>t.events.some(t=>t>0&&e.eventMap[t].x<=i)&&t.events.some(t=>t>0&&e.eventMap[t].x>=i));if(r)r.events.push(s);else{const t={events:[s]},r=this.stages.findIndex(t=>-1===t.events[0]||e.eventMap[t.events[0]].x>=i);this.stages.splice(r,0,t)}};s||r(t.e1),i||r(t.e2)}}this.stages.forEach((e,t)=>e.index=t)}constructConstraints(e){const t=Object.keys(e.eventMap).length,s=StageMatrix.fromNode(this,e).toEquations(t),i=Array(t).fill(null).map((t,s)=>e.eventMap[s].duration);this.constraints=s.map(e=>e.map((e,t)=>e*i[t]))}inbalancesConstraints(e){console.assert(this.constraints,"constraints not constructed.");const t=Object.keys(e.eventMap).length,s=Array(t).fill(!0),i=Array(t).fill(!1),r=[];for(const e of this.constraints){const t=e.reduce((e,t)=>e+t,0);if(0!==t){const n=t<0?e.map(e=>-e):e;if(n[0]>0)continue;r.push(n),n.forEach((e,t)=>{i[t]=i[t]||e<0,e&&(s[t]=e<0||i[t])})}}return this.constraints.forEach(e=>{0!==e.reduce((e,t)=>e+t,0)||e[0]||e.some((e,t)=>e&&!s[t])&&(e.forEach((e,t)=>e&&(s[t]=!1)),r.push(e))}),{ones:s,inbalances:r}}solveEquations({ones:e,inbalances:t}){if(!t.length)return e.map(()=>1);const s=e.map((e,t)=>({fixed:e,i:t})).filter(({fixed:e})=>!e).map(({i:e})=>e).filter(e=>t.some(t=>0!==t[e]));if(!s.length)return e.map(()=>1);const i=s.map(e=>Math.abs(t.find(t=>0!==t[e])[e])),r=new Map;let n=!1;const a=t.map(e=>({line:e.filter((e,t)=>s.includes(t)),bias:-e.reduce((e,t,i)=>e+(s.includes(i)?0:t),0)})).filter(({line:e,bias:t})=>{if(e.every(e=>0===e))return!1;const s=e.join(",");return r.has(s)?(n=r.get(s)!==t,!1):(r.set(s,t),!0)});if(n)return null;const o=a.slice(0,s.length),c=a.slice(s.length);if(o.lengths===t?1:s===r?-1:0),bias:0,prior:(i[t]+i[r])/ms};o.some(e=>e.line[t]&&e.line[r])&&(n.prior-=10),o.some(e=>1===e.line.filter(Number).length&&(e.line[t]||e.line[r]))&&(n.prior+=1),e.push(n)}e.sort((e,t)=>e.prior-t.prior),o.push(...e.slice(0,s.length-o.length))}const l=o.map(({line:e})=>e),u=o.map(({bias:e})=>e),h=function(e){const t=hs.Matrix.create(e).inverse();return null!==t?t.elements:null}(l);if(!h)return this.logger.warn("null invert:",l),null;const m=h.map(e=>e.reduce((e,t,s)=>e+t*u[s],0));if(c.length&&c.some(e=>Math.abs(e.line.reduce((e,t,s)=>e+t*m[s],0))>.001))return null;const f=e.map(()=>1);return s.forEach((e,t)=>f[e]=m[t]),f}optimallySolve(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e),i=t.map((t,s)=>t?-1:Ne(e.eventMap[s].shrinkness,.01)).reduce((e,t,s)=>(t>=0&&(e[t]=e[t]||[],e[t].push(s)),e),{}),r=Object.entries(i).sort((e,t)=>Number(t[0])-Number(e[0])).map(e=>e[1]);for(let i=1;i!n.includes(t)),o=this.solveEquations({ones:a,inbalances:s});if(o&&o.every((t,s)=>t<=1&&t>e.eventMap[s].lowWarp))return o}return this.solveEquations({ones:t,inbalances:s})}isConflicted(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e);for(const i of s){if(i.reduce((s,i,r)=>s+i*(t[r]||i<=0?1:e.eventMap[r].lowWarp),0)>=0)return i.forEach((t,s)=>{t&&(e.eventTendencies[s]+=t>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:t,inbalances:s});return!i||!i.every((t,s)=>t>e.eventMap[s].lowWarp&&t<=1)}getSolution(e){const t=t=>e.eventMap[t.e2]?e.eventMap[t.e2].x+.06*Math.abs(e.eventMap[t.e2].x-e.eventMap[t.e1].x):e.eventMap[t.e1].x+1e4,s=this.actions.filter(e=>e.type===ds.HORIZONTAL).sort((e,s)=>t(e)-t(s)),i=s.reduce((e,t)=>({...e,[t.e1]:t.e2}),{}),r=new Set([...Object.keys(i)].map(Number));s.forEach(e=>r.delete(e.e2)),this.stages[0].events.forEach(e=>e>0&&r.add(e));let n=[...r].map(e=>{const t=[e];let s=e;for(;i[s]&&(s=i[s],!(s<0||t.includes(s)));)t.push(s);return t});const a=Object.values(e.eventMap).filter(e=>e.id>0).map(e=>({id:e.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),o=a.filter(e=>n.some(t=>t.includes(e.id))||s.some(t=>[t.e1,t.e2].includes(e.id))).reduce((e,t)=>({...e,[t.id]:t}),{});this.stages.forEach((e,t)=>e.events.forEach(e=>o[e]&&(o[e].tickGroup=t))),this.stages[0].tick=0,this.stages[0].events.forEach(e=>o[e]&&(o[e].tick=0));const c=this.optimallySolve(e);a.forEach(e=>e.timeWarp=fs(c[e.id]));const l=this.stages.slice(0,this.stages.length-1),u=()=>{if(l.every(e=>Number.isFinite(e.tick)))return!1;let t=!1;return s.forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(r.tick)&&(r.tick=i.tick+Ae(e.eventMap[s.e1].duration,o[s.e1].timeWarp),r.events.forEach(e=>o[e]&&(o[e].tick=r.tick)),t=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(r.tick)&&(i.tick=r.tick-Ae(e.eventMap[s.e1].duration,o[s.e1].timeWarp),i.events.forEach(e=>o[e]&&(o[e].tick=i.tick)),t=!0)}),t};for(;u(););console.assert(l.every(e=>Number.isFinite(e.tick)),"stage ticks not all solved:",this.stages,this.id),a.filter(e=>Number.isFinite(e.tick)).forEach(t=>t.endTick=t.tick+Ae(e.eventMap[t.id].duration,t.timeWarp));const h=e.eventMap[0].duration;n.forEach(e=>{const t=e.findIndex(e=>o[e].endTick>h);if(t>=0){e.splice(t,e.length-t).forEach(e=>{o[e].tick=null,o[e].endTick=null})}}),n=n.filter(e=>e.length);const m=Math.max(0,...a.map(e=>e.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:n,events:a,duration:m,actions:this.actions.map(e=>e.id).join(" ")}}deduce(e,t){this.stages||this.constructStages(e);const s=e.actionAccessing.get(this.id)||{times:0};if(++s.times,e.actionAccessing.set(this.id,s),this.constructConstraints(e),this.isConflicted(e))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),t.credits>0){if(--t.credits,this.children||this.expand(e),this.children=this.children.filter(t=>!e.actionAccessing.get(t.id)||!e.actionAccessing.get(t.id).closed),this.children.length){const s=t=>t.possibility/((e.actionAccessing.get(t.id)||{times:0}).times+1);this.children.sort((e,t)=>s(t)-s(e));for(const s of this.children){const i=s.deduce(e,t);if(i)return this.logger.groupEnd(),i;if(t.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(e)}expand(e){this.constructStages(e);const{eventMap:t,matrixV:s,matrixH:i}=e,r=this.stagedEvents,n=[],a=e=>{if(!this.actions.some(t=>t.id===e.action.id)&&!n.some(t=>t.action.id===e.action.id)){const t=this.stages.find(t=>t.events.includes(e.action.e1)),i=this.stages.find(t=>t.events.includes(e.action.e2));if(t===i||t&&i&&t.index>=i.index)return;if(t&&i)if(e.action.type===ds.VERTICAL){if(i.index-t.index>1)return;if(this.actions.some(e=>t.events.includes(e.e1)&&i.events.includes(e.e2)))return}else if(e.action.type===ds.HORIZONTAL&&t.index>i.index)return;if(e.action.type===ds.HORIZONTAL&&this.actions.some(t=>t.type===ds.HORIZONTAL&&(t.e1===e.action.e1||t.e2===e.action.e2||t.e1===e.action.e2&&t.e2===e.action.e1)))return;if(e.action.type===ds.VERTICAL){if(t&&(e.possibility=Math.min(e.possibility,...t.events.map(t=>s[e.action.e2][t])),e.possibility<=0))return;if(i&&(e.possibility=Math.min(e.possibility,...i.events.map(t=>s[t][e.action.e1])),e.possibility<=0))return}n.push(e)}};for(const e of r)e<0||(s[e].forEach((t,s)=>{t>0&&e!==s&&a({action:Action.V(s,e),possibility:t})}),s.forEach((t,s)=>{const i=t[e];i>0&&a({action:Action.V(e,s),possibility:i})}),i[e].forEach((t,s)=>{t>0&&a({action:Action.H(s,e),possibility:t})}),i.forEach((s,i)=>{i=i>=Object.keys(t).length?-1:i;const r=s[e];r>0&&a({action:Action.H(e,i),possibility:r})}));n.some(e=>[ds.HORIZONTAL,ds.PLACE].includes(e.action.type)||!r.has(e.action.e1)||!r.has(e.action.e2))?this.children=n.map(e=>new PathNode({logger:this.logger,parent:this,...e})):this.children=[]}}class Solver{constructor(e,{quota:t=1e3,logger:s=new DummyLogger}={}){this.quota=t,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:e.measureShrinkness,duration:e.expectedDuration,lowWarp:0};this.events=[i,...e.events.map(e=>({id:e.id,x:e.x,confidence:e.confidence,shrinkness:e.shrinkness,staff:e.staff,duration:e.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((e,t)=>({...e,[t.id]:t}),{}),this.matrixH=e.matrixH,this.matrixV=e.matrixV,this.xSpan=e.endX-Math.min(e.endX-1,...e.events.map(e=>e.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(e=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(e.id),possibility:this.matrixV[e.id].reduce((e,t)=>e+t,0)}));let e=null;this.logger.groupCollapsed("solve");const t=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:t},r=this.pathRoot.deduce(i,s);if(r.credits=this.quota-s.credits,r.times=s.times,this.evaluateSolution(r),this.logger.debug("loss:",r.loss),e=!e||r.losse/s.times)),e}evaluateSolution(e){e.loss=0;const t=e.events.reduce((e,t)=>({...e,[t.id]:{...t,...this.eventMap[t.id]}}),{}),s=e.events.filter(e=>Number.isFinite(e.tick)).map(e=>t[e.id]),i=s.reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{});Object.values(i).forEach(t=>{t.sort((e,t)=>e.x-t.x).slice(0,t.length-1).forEach((s,i)=>{t[i+1].tick{if(Number.isFinite(s.tick)&&!e.voices.every(e=>!e.includes(s.id))||(e.loss+=100*t[s.id].confidence),s.timeWarp){const{numerator:e,denominator:i}=s.timeWarp,n=t[s.id].shrinkness;r.set(e,Math.max(r.get(e)||0,1-n)),r.set(i,Math.max(r.get(i)||0,1-n))}});const n=Oe(e.duration,this.eventMap[0].duration);r.set(n.numerator,Math.max(r.get(n.numerator)||0,1-this.eventMap[0].shrinkness)),r.set(n.denominator,Math.max(r.get(n.denominator)||0,1-this.eventMap[0].shrinkness));for(const[t,s]of r.entries())t>1&&(e.loss+=Math.log(t)*s);let a=0,o=0;e.voices.forEach(s=>{console.assert(t[s[0]],"invalid voice:",s,Object.keys(t));const i=Math.abs(t[s[0]].tick),r=t[s[s.length-1]].endTick;a+=Math.max(0,i+e.duration-r);let n=null;s.forEach(e=>{const s=t[e];s.staff!==n&&(null!==n&&++o,n=s.staff)})}),e.loss+=10*a/ms,e.loss+=5**o-1;const c=[...s].sort((e,t)=>e.x-t.x),l=c.slice(1).map((t,s)=>{const i=c[s],r=t.x-i.x,n=t.tick-i.tick;if(!n)return r/this.xSpan;return(4*Math.atan2(n/e.duration,r/this.xSpan)/Math.PI-1)**2}),u=Math.max(...l,0);e.loss+=u**2,console.assert(e.loss>=0,"Invalid solution loss!!!",e.loss,r,a,o),e.loss<0&&(e.loss=1/0)}}!function(e){e[e.PAD=0]="PAD",e[e.BOS=1]="BOS",e[e.EOS=2]="EOS",e[e.CHORD=3]="CHORD",e[e.REST=4]="REST"}(ps||(ps={}));class EventCluster extends SimpleClass{constructor(e){super(),super.assign(e)}get regular(){return this.elements.some(e=>[ps.CHORD,ps.REST].includes(e.type)&&!e.fake)&&this.elements.every(e=>[e.x,e.y1,e.y2,e.tick].every(Number.isFinite))&&this.elements.slice(1).every((e,t)=>e.fake||this.elements[t].fake||e.grace||this.elements[t].grace||e.fullMeasure||this.elements[t].fullMeasure||e.tick<=this.elements[t].tick||e.x>this.elements[t].x)}get grant(){return this.annotation&&this.annotation.grant}get feature(){return{index:this.index,elements:this.elements}}get estimatedDuration(){const e=this.elements.find(e=>e.type===ps.EOS),t=e?.predisposition?e.predisposition?.tick:e?.tick;return Number.isFinite(t)?t:this.duration}assignPrediction(e){console.assert(e.index===this.index,"index mismatch:",e.index,this.index),this.matrixH=e.matrixH,e.elements.forEach(e=>{const{index:t,...s}=e,i=this.elements.find(e=>e.index===t);console.assert(i,"element not found:",t),i&&(i.predisposition=s)})}}EventCluster.className="EventCluster",EventCluster.blackKeys=["id"];class EventClusterSet extends SimpleClass{constructor(e){super(),super.assign(e)}trimIrregular(){let e=0;return this.clusters=this.clusters.filter(t=>{const s=t.regular;return s||(console.debug("irregular cluster:",t),++e),s}),e?console.debug("Irregular clusters trimmed:",`${e}/${this.clusters.length+e}`):console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`),e}}EventClusterSet.className="EventClusterSet";class PatchMeasure extends SimpleClass{constructor(e){super(),Object.assign(this,e)}get staffN(){return Math.floor(Math.log2(this.staffMask))+1}get basics(){return Array(this.staffN).fill(this.basic)}get duration(){return Math.max(0,...(this.voices||[]).map(e=>e.map(e=>this.events.find(t=>t.id===e)).reduce((e,t)=>e+t.duration,0)))}}PatchMeasure.className="PatchMeasure",function(e){e.computeMeasureTicks=e=>{const t=(e=>{const t=new Map;return e.rows.forEach(e=>{if(1===e.events.length){const t=e.events[0];t.rest&&0===t.division&&(t.rest="R")}}),e.events.forEach(e=>{const s=Math.round(10*e.pivotX)/10;let i=0;i=e.fullMeasureRest?Math.min(s,...t.keys()):[...t.keys()].find(s=>{const i=t.get(s),r=Math.min(...i.map(e=>e.left)),n=Math.max(...i.map(e=>e.right));return Math.min(n,e.right)-Math.max(r,e.left)>.62*w.NoteheadS1})||s,e.roundX=i;const r=t.get(i)||[];t.set(i,r),r.push(e)}),t})(e);let s=0;const i=new Set([s]),r=[...t.entries()].sort(([e],[t])=>e-t);for(const[e,t]of r)t.forEach(e=>{e.predisposition&&(e.rest=e.rest&&e.predisposition.fullMeasure>.5?"R":e.rest,e.grace=e.predisposition.grace?Ve.Grace:null,e.division=$e(e.predisposition.divisionVector),e.dots=$e(e.predisposition.dotsVector),e.predisposition.timeWarped>.5&&(e.timeWarp=_e(2,3))),e.fullMeasureRest?e.tick=0:(e.zeroHolder&&(s-=e.duration),!e.zeroHolder&&e.predisposition&&Number.isInteger(e.predisposition.tick)?e.tick=e.predisposition.tick:e.tick=s,i.add(e.tick+e.duration))}),i.delete(s),i.size&&(s=Math.min(...i));Number.isInteger(e.estimatedDuration)?e.duration=e.estimatedDuration:e.duration=Math.max(...i,0)},e.computeMeasureVoices=e=>{e.voices=[];for(const t of e.rows){const s=t.events.filter(e=>!(e.grace||e.tremoloCatcher||e.fullMeasureRest||e.predisposition&&e.predisposition.fake>.5)),i=new Set(s);for(;i.size;){let t=0;const r=[],n=e=>{r.push(e.id),e.zeroHolder||(t+=e.duration),i.delete(e)},a=s.find(e=>i.has(e));for(a.alignedTick>0&&(t=a.alignedTick),n(a);;){const e=s.find(e=>i.has(e)&&e.alignedTick===t);if(!e)break;n(e)}e.voices.push(r)}}}}(gs||(gs={}));var ys;!function(e){const t=1921920,s=.7071067811865475,i=[[null,null],[null,ze.Open],[ze.Open,ze.Continue],[ze.Open,ze.Close],[ze.Continue,ze.Continue],[ze.Continue,ze.Close],[ze.Close,null],[ze.Close,ze.Open]].map(e=>e.join("-")),r=(e,t)=>{if(!e.events.length)return{events:[],voices:[],duration:0};return new Solver(e,t).solve()};e.estiamteMeasure=e=>{const r=e.events.filter(e=>!e.zeroHolder).map(s=>({id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition&&Number.isFinite(s.predisposition.tick)?s.predisposition.tick:s.x,tipX:s.tipX,y:s.tipY+100*s.staff,duration:s.mainDuration*t/je,division:s.division,dots:s.dots,stemDirection:s.stemDirection,beam:s.beam,rest:s.rest,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?s.predisposition.timeWarped:null}));let n=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(n=Math.max(n,Ne(e.estimatedDuration,480480)));const a=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),o=[0,...r.map(e=>e.id)],c=r.map(t=>({...t,id:o.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:Number.isFinite(t.shrinkness)?t.shrinkness:Math.tanh((t.division-.1*t.dots)/4),staffGroup:a[t.staff]})),l=Array(o.length+1).fill(null).map(()=>Array(o.length).fill(0)),u=Array(o.length).fill(null).map(()=>Array(o.length).fill(0)),h=e=>S.default(e/1.6)*S.default(1.6/e);for(const t of c){for(const e of c){if(u[t.id][e.id]=t!==e&&t.tickEstimated>=e.tickEstimated?1-S.default((t.tickEstimated-e.tickEstimated)*s/.6):0,t.staffGroup!==e.staffGroup)l[t.id][e.id]=0;else if(t.x<=e.x)l[t.id][e.id]=0;else{const s=Math.exp(2*-Math.abs(t.staff-e.staff)),i=t.staff===e.staff?Math.exp(-Math.abs(t.y-e.y)/16):1,r=t.x-e.x,n=t.tipX-e.tipX;l[t.id][e.id]=(s*i*Math.min(h(r),h(n)))**(1/3)}const r=(1-t.pR)*(1-e.pR);u[t.id][e.id]*=r,l[t.id][e.id]*=r,u[t.id][e.id]<.01&&(u[t.id][e.id]=0),t.stemDirection&&e.stemDirection&&t.stemDirection!==e.stemDirection&&(l[t.id][e.id]*=.9),t.rest||e.rest||i.includes([e.beam,t.beam].join("-"))||(l[t.id][e.id]*=.2)}l[o.length][t.id]=h(e.width-t.x)**(1/3)}return{ids:o,events:c,expectedDuration:n,measureShrinkness:0,endX:e.position.right,matrixH:l,matrixV:u}},e.regulateMeasure=async(s,{solver:i=null,...n})=>{const a=e.estiamteMeasure(s),{ids:o,matrixH:c,matrixV:l}=a;if(s.matrixH){console.assert(s.matrixH.length>o[o.length-1]&&s.matrixH[0].length>o[o.length-1],"matrix shape mismatch:",o.length,`${s.matrixH.length}x${s.matrixH[0].length}`,`${c.length}x${c[0].length}`);for(let e=0;ee.forEach((e,i)=>{const r=s.matrixV[o[t]][o[i]];Number.isFinite(r)&&(l[t][i]=r)})),Number.isFinite(s.estimatedDuration)&&(a.measureShrinkness=Math.tanh(-3*Math.log(Math.min(1,s.estimatedDuration/s.duration)))),n.logger&&n.logger.info("--- MEASURE",s.measureIndex,"---",a);const u=i?await i(a,n):r(a,n),h=u.events.map(e=>({...e,id:a.ids[e.id]}));h.forEach(e=>{const i=s.events.find(t=>t.id===e.id);i.tick=Number.isFinite(e.tick)?Math.round(e.tick*je/t):null,i.tickGroup=e.tickGroup,i.timeWarp=e.timeWarp}),s.duration=Math.round(u.duration*je/t),s.voices=u.voices.map(e=>e.map(e=>a.ids[e])),s.solutionStat={loss:u.loss,solverCredits:u.credits,solverTimes:u.times},s.events.forEach(e=>{const t=h.find(t=>t.id===e.id);t&&(Number.isFinite(t.tick)||"r"!==e.rest||0!==e.division?"R"===e.rest&&(e.tick=0,e.tickGroup=0,e.duration=s.duration,s.voices.push([e.id])):(e.tick=0,e.tickGroup=0,e.rest="R",e.duration=s.duration,s.voices.push([e.id])))})},e.regulateMeasureWithRectification=async(e,i,{solver:n=null,...a})=>{const o=e.events.filter(e=>!e.zeroHolder).map(s=>{const r=i.events.find(e=>e&&e.id===s.id),n=Number.isFinite(r?.division)?r.division:s.division,a=Number.isFinite(r?.dots)?r.dots:s.dots,o=t*2**-n*(2-2**-a);return{id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition?.tick,y:s.tipY+100*s.staff,duration:o,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?.timeWarped||0}});let c=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(c=Math.max(c,Ne(e.estimatedDuration,480480)));const l=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),u=[0,...o.map(e=>e.id)],h=o.map(t=>({...t,id:u.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:t.shrinkness,staffGroup:l[t.staff]})),m=Array(u.length+1).fill(null).map(()=>Array(u.length).fill(0)),f=Array(u.length).fill(null).map(()=>Array(u.length).fill(0));for(const e of h)for(const t of h){f[e.id][t.id]=e!==t&&e.tickEstimated>=t.tickEstimated?1-S.default((e.tickEstimated-t.tickEstimated)*s/.6):0;const i=(1-e.pR)*(1-t.pR);f[e.id][t.id]*=i,f[e.id][t.id]<.01&&(f[e.id][t.id]=0)}console.assert(e.matrixH&&e.matrixH.length>u[u.length-1]&&e.matrixH[0].length>u[u.length-1],"matrix shape mismatch:",u.length,`${e.matrixH.length}x${e.matrixH[0].length}`,`${m.length}x${m[0].length}`);for(let t=0;t{const a=i.events.find(t=>t&&t.id===e),o=Number.isFinite(s)?Math.round(s*je/t):s;return{id:e,tick:o,tickGroup:r,timeWarp:n,division:a?.division,dots:a?.dots}}),x=Math.round(g.duration*je/t);return{events:v,voices:g.voices,duration:x,priority:y}}}(ys||(ys={}));class SpartitoMeasure extends SimpleClass{static reorderEvents(e,t){const s=[],i=e.map(e=>({id:e.id,staff:e.staff,x:e.x/.7,rx:0,ry:t[e.staff]+e.tipY,tipY:e.tipY,prior:0}));i.sort((e,t)=>e.x-t.x),i.slice(1).forEach((e,t)=>{const s=Math.min(Math.round(e.x-i[t].x),2);e.rx=i[t].rx+s}),i.forEach(e=>{e.prior=1e4*e.staff+e.rx+.01*e.tipY,s.includes(e.ry)||s.push(e.ry)}),i.sort((e,t)=>e.prior-t.prior),s.sort((e,t)=>e-t);let r=0;const n=s.map((e,t)=>(!t||s[t]-s[t-1]<.5||++r,r)),a=i.map(t=>new EventTerm({...e.find(e=>e.id===t.id),intX:t.rx,intY:n[s.indexOf(t.ry)]}));return a.forEach((e,t)=>e.id=t+1),a}constructor(e){super(),super.assign(e),this.originalRegulationHash||this.regulated||(this.originalRegulationHash=this.regulationHash),this.barTypes=this.barTypes||{},this.regulated&&this.position&&this.postRegulate()}get timeSignature(){return this.basics&&this.basics[0].timeSignature}get keySignature(){return this.basics&&this.basics[0].keySignature}get timeSignatureChanged(){return this.contexts.filter(Boolean)[0].some(e=>[Ue.TimeSignatureC,Ue.TimeSignatureN].includes(e.type))}get doubtfulTimesig(){return this.basics&&this.basics[0].doubtfulTimesig}get regulated(){return!!this.voices}get validRegulated(){return!!this.voices&&this.voices.flat(1).every(e=>Number.isFinite(this.events.find(t=>t.id===e)?.tick))}get rows(){return this.contexts.map((e,t)=>({events:this.events.filter(e=>e.staff===t),contexts:e}))}get eventStartX(){return this.events.length?Math.min(...this.events.map(e=>e.x)):this.startX}get startX(){return this.position.left}get width(){return this.position.right-this.position.left}get tickMap(){return this.events.concat([this.endEvent]).filter(Boolean).reduce((e,t)=>(Number.isFinite(t.tick)&&(e.has(t.tick)||e.set(t.tick,[]),e.get(t.tick).push(t)),e),new Map)}get tickToX(){return[...this.tickMap.entries()].reduce((e,[t,s])=>{if((s=s.filter(e=>!e.fullMeasureRest&&!e.grace)).length){const i=Math.min(...s.map(e=>e.x));e[t]=i}return e},{})}get tickRates(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest);return e.sort((e,t)=>e.x-t.x),e.slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)})}get tickRatesInStaves(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace).reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickRatesInGroups(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickTwist(){if(!this.duration||!this.staffGroups)return;const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace&&!e.tremoloCatcher&&!(e.rest&&0===e.division)).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>{const t=[...e].sort((e,t)=>e.pivotX-t.pivotX),s=this.position.right-t[0].x,i=t.slice(1).map((e,i)=>{const r=t[i],n=e.pivotX-r.pivotX,a=e.tick-r.tick;if(!a)return n/s;return(4*Math.atan2(a/this.duration,n/s)/Math.PI-1)**2});return Math.max(0,...i)});return Math.max(0,...t)}get eventMap(){return this.events.reduce((e,t)=>(e[t.id]=t,e),{})}get empty(){return!this.events?.length||!this.voices?.length}get hasIllEvent(){const e=this.voices.flat(1),t=this.eventMap;return this.regulated&&e.some(e=>{const s=t[e];return!s.zeroHolder&&!Number.isFinite(s.tick)&&!s.fullMeasureRest})}get brief(){return[`${this.timeSignature.numerator}/${this.timeSignature.denominator}`,...this.events.map(e=>[e.staff,e.intX,Math.round(e.tip?e.tip.y:e.ys?.[0]??0),e.fullMeasureRest?0:e.division,e.fullMeasureRest?0:e.dots,e.rest?"r":"",e.grace||"",e.stemDirection,e.beam||""].join("|"))].join("\n")}get regulationHash(){return y.default(this.brief)}get regulationHash0(){return this.originalRegulationHash||this.regulationHash}get regulationHashes(){return Array.from(new Set([this.originalRegulationHash,this.regulationHash].filter(Boolean)))}get featureWords(){if(!this.regulated||!this.voices||!this.voices.length)return null;const e=this.tickRatesInStaves.some(e=>e<0),t=this.events.filter(e=>!e.zeroHolder&&!e.rest).map(e=>e.ys).flat(1).map(e=>"Y"+2*-e),s=Array.from(new Set(t));this.keySignature&&s.push(`K${this.keySignature}`);const i=this.voices.map(e=>e.map(e=>this.events.find(t=>t.id===e)).filter(e=>!e.zeroHolder&&!e.rest)).filter(e=>e.length),r=e?[]:i.map(e=>e.map(e=>e.scaleChord).join("-")),n=e?[]:i.map(e=>e.map(e=>e.division).join(""));return this.timeSignature&&n.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`),[s,r,n]}get barType(){if(this.voltaEnd)return"VoltaRight";const e=Object.entries(this.barTypes).sort((e,t)=>t[1]-e[1]);return e[0]&&e[0][1]>=1?e[0][0]:null}get partialDuration(){if(!Number.isFinite(this.duration))return!1;const e=Ae(je,this.timeSignature);return this.duration{const t=e.events.filter(e=>e.grace);if(!t.length)return;const s=[...e.tickMap.entries()].reduce((e,[t,s])=>(s.forEach(s=>{if(!s.grace){e[s.staff]=e[s.staff]||{};const i=e[s.staff][t];e[s.staff][t]=!i||i.x>s.x?s:i}}),e),{}),i=Object.entries(s).reduce((t,[s,i])=>{t[s]=Object.entries(i).map(([e,t])=>({event:t,tick:Number(e),preTick:-240,graces:[]})).sort((e,t)=>e.event.x-t.event.x),t[s].push({tick:e.duration,event:e.endEvent,preTick:0,graces:[]});let r=0;return t[s].forEach(e=>{e.tick>r&&(e.preTick=r,r=e.tick)}),t},{});t.forEach(e=>{const t=i[e.staff];if(t){const s=t.find(t=>t.event.x>e.x);s&&s.graces.push(e),e.roundX=e.x}}),Object.values(i).forEach(e=>e.forEach(e=>{if(e.graces.length){e.event.graceIds=e.graces.map(e=>e.id);const t=e.graces.reduce((e,t)=>e+t.duration,0),s=Math.min(t,e.tick-e.preTick)/t;let i=e.tick;[...e.graces].reverse().forEach(e=>{e.tick=Math.round(i-e.duration*s),i=e.tick})}}))})(this),(e=>{const t=e.events.filter(e=>e.tremoloCatcher&&!e.grace),s=e.events.filter(e=>e.tremoloLink===qe.Pitcher&&!e.grace);t.forEach(t=>{let i=s.filter(e=>e.division===t.division&&e.xNumber.isFinite(e.tick)&&!e.grace&&!e.rest&&e.division===t.division&&e.dots===t.dots&&e.xt.x-e.x),i.length){const e=i[0];e.catcherId=t.id;const r=Math.max(e.tremolo||3,t.tremolo||3);e.tremolo=r,t.tremolo=r,t.tick||(t.tick=e.tick+e.duration/2);const n=s.indexOf(e);n>=0&&s.splice(n,1)}})})(this),this.updateContextTick()}updateRoundX(){const e=this.tickToX;e&&this.events.forEach(t=>{const s=e[t.tick];Number.isFinite(s)&&(t.roundX=s)})}updateContextTick(){if(!this.staffGroups)return;const e=this.contexts.flat(1);this.staffGroups.flat(1).forEach(t=>{const s=[...this.events.filter(e=>e.staff===t),...e.filter(e=>e.staff===t)];s.sort((e,t)=>t.x-e.x);let i=this.duration;s.forEach(e=>{e instanceof EventTerm?e.fullMeasureRest||e.zeroHolder||(i=e.tick):e instanceof ContextedTerm&&(e.tick=i)})})}asSolution(e=void 0){return this.regulated?{events:this.events.map(t=>{const s={id:t.id,tick:t.tick,tickGroup:t.tickGroup,timeWarp:t.timeWarp};if(e){const i=e.events.find(e=>e.id===t.id);i&&(t.division!==i.division&&(s.division=t.division),t.dots!==i.dots&&(s.dots=t.dots),t.grace!==i.grace&&(s.grace=!!t.grace),t.beam!==i.beam&&(s.beam=t.beam),t.fullMeasureRest!==i.fullMeasureRest&&(s.fullMeasure=t.fullMeasureRest))}return s}),voices:this.voices,duration:this.duration,priority:-this.solutionStat?.loss}:null}applySolution(e){e.timeSignature&&this.basics.forEach(t=>{t.timeSignature=e.timeSignature,t.doubtfulTimesig=!1}),this.voices=e.voices,this.duration=e.duration,this.events.forEach(t=>{t.timeWarp=null,t.tick=null,t.tickGroup=null;const s=e.events?.find(e=>e.id===t.id);s&&(t.tick=s.tick,t.timeWarp=s.timeWarp,t.tickGroup=s.tickGroup,Number.isFinite(s.division)&&(t.division=s.division),Number.isFinite(s.dots)&&(t.dots=s.dots),void 0!==s.beam&&(t.beam=s.beam),void 0!==s.grace&&(t.grace=s.grace?Ve.Grace:void 0),s.fullMeasure&&(t.rest="R"))}),Number.isFinite(e.priority)&&(this.solutionStat={loss:-e.priority}),this.postRegulate()}cleanupRegulation(){this.voices=null,this.duration=null,this.events.forEach(e=>{e.tick=null,e.tickGroup=null,e.timeWarp=null})}regulateTest(){this.duration=0,this.voices=this.rows.map(e=>e.events.map(e=>e.id)),this.voices.forEach(e=>{let t=0;e.map(e=>this.events.find(t=>t.id===e)).forEach((e,s)=>{e.tickGroup=s,e.tick=t,t+=e.duration}),this.duration=Math.max(this.duration,t)})}regulateSimple(){gs.computeMeasureTicks(this),gs.computeMeasureVoices(this)}async regulateEquations(e){await ys.regulateMeasure(this,e)}async regulate({policy:e="advanced",...t}={}){switch(e){case"test":this.regulateTest();break;case"equations":case"advanced":await this.regulateEquations(t);break;default:this.regulateSimple()}this.postRegulate()}createPatch(){return new PatchMeasure({measureIndex:this.measureIndex,staffMask:this.staffMask,basic:this.basics[0],events:this.events,contexts:this.contexts,marks:this.marks,voices:this.voices})}createClusters(){const e=this.voices&&new Set(this.voices.flat(1));return this.staffGroups.filter(e=>e.length).map(t=>{const s=this.position.staffYs[0],i=e=>this.position.staffYs[t.indexOf(e)]-s,r=this.events.filter(e=>t.includes(e.staff));if(!r.length)return null;const n=r.map(s=>({index:s.id,voice:(this.voices||[]).findIndex(e=>e.includes(s.id)),type:s.rest?ps.REST:ps.CHORD,staff:t.indexOf(s.staff),x:s.tipX,pivotX:s.pivotX,y1:i(s.staff)+("u"===s.stemDirection?s.tipY:s.ys[s.ys.length-1]),y2:i(s.staff)+("u"===s.stemDirection?s.ys[0]:s.tipY),headY:"u"===s.stemDirection?s.ys[0]:s.ys[s.ys.length-1],feature:s.feature,division:s.division,dots:s.dots,beam:s.beam||null,stemDirection:s.stemDirection,grace:!!s.grace,tremoloCatcher:s.tremoloCatcher,timeWarped:!!s.timeWarp,fullMeasure:s.fullMeasureRest,tick:s.tick||0,fake:!s.fullMeasureRest&&!s.grace&&this.voices&&!e.has(s.id)}));if(!n.some(e=>!e.fake))return null;const a=Ae(je,this.timeSignature);n.unshift({index:0,type:ps.BOS,staff:null,division:null,beam:null,dots:null,stemDirection:null,grace:!1,tremoloCatcher:!1,fullMeasure:!1,x:this.position.left,pivotX:this.position.left,y1:0,y2:0,headY:0,feature:null,timeWarped:this.durationn.map(()=>0)),this.voices.forEach(e=>{let t=0;e.forEach(e=>{const s=n.findIndex(t=>t.index===e);s>0&&t>=0&&(o[s][t]=1),t=s}),t>=0&&(o[n.length-1][t]=1)}));const c={...this.solutionStat,patched:this.patched},l=this.backgroundImages&&this.backgroundImages.map(({url:e,position:t})=>({url:e,position:{...t,y:t.y-s}}));return new EventCluster({index:this.measureIndex,duration:this.duration,signatureDuration:a,staffY0:s,elements:n,matrixH:o,annotation:c,backgroundImages:l})}).filter(Boolean)}applyClusters(e){const t=this.events.reduce((e,t)=>Math.max(e,t.id),0)+1;this.matrixH=Array(t+1).fill(null).map(()=>Array(t).fill(0)),e.forEach(e=>{const s=e.elements.map(e=>e.index);console.assert(e.matrixH.length===s.length-1,"unexpected matrixH size:",e.matrixH.length,s.length);for(let i=1;i{const t=this.events.find(t=>t.id===e.index);t&&(t.predisposition=e.predisposition,void 0!==t.predisposition.grace&&(t.grace=t.predisposition.grace?Ve.Grace:null))})}),this.estimatedDuration=e.reduce((e,t)=>e+t.estimatedDuration,0)/e.length}}SpartitoMeasure.className="SpartitoMeasure",SpartitoMeasure.blackKeys=["staffGroups","solutionStat","measureNumber","deposit"];const vs=(e,t=!1)=>({empty:!0,duration:e.duration,tickMap:{0:EventTerm.space({duration:e.duration,tick:0})},timeSignature:e.timeSignature,timeSigNumeric:e.timeSigNumeric,keySignature:e.keySignature,contextedTerms:e.terms.filter(e=>e instanceof ContextedTerm&&(!e.staffLevel||t)),marks:[]}),xs=e=>{const t=[].concat(...e.measures.map(e=>Object.values(e.tickMap).filter(e=>e instanceof EventTerm)));for(let e=1;ee.type===B.SlurBegin)&&i.accessories.some(e=>e.type===B.SlurEnd)){const e=s.pitches.filter(e=>i.pitches.some(t=>t.note===e.note&&t.alter===e.alter));e.length>0&&(s.tying=!0,i.tied=!0,e.forEach(e=>{e.tying=!0;i.pitches.find(t=>t.note===e.note&&t.alter===e.alter).tied=!0}),e.forEach(()=>{const e=s.accessories.findIndex(e=>e.type===B.SlurBegin);e>=0&&s.accessories.splice(e,1);const t=i.accessories.findIndex(e=>e.type===B.SlurEnd);t>=0&&i.accessories.splice(t,1)}))}}};class Spartito extends SimpleClass{constructor(e){super(),super.assign(e),this.measures.forEach(e=>e.staffGroups=this.staffGroups)}get regulated(){return this.measures.every(e=>e.regulated)}get solidMeasureCount(){return this.measures.filter(e=>!e.empty).length}get measureIndexMapping(){let e=0;return this.measures.map(t=>t.empty?null:e++)}get headBPM(){for(const e of this.measures)if(e.marks){const t=e.marks.find(e=>e instanceof TempoTerm&&e.isValid());if(t)return t.bpm}return null}get measureLayoutCode(){const e=this.measures.filter(e=>!e.empty).map((e,t)=>({index:t+1,vb:e.voltaBegin,ve:e.voltaEnd,alter:e.alternative,leftSign:"",rightSign:""}));return e.forEach((t,s)=>{if(t.vb){const i=e.slice(s+1).findIndex(e=>e.vb),r=i>=0?s+i:e.length;e.slice(s,r-1).some(e=>e.ve)&&(t.leftSign="2*[")}if(t.ve){const i=e.slice(0,s+1).reverse(),r=i.slice(1).findIndex(e=>e.ve);if(r>=0&&!i.slice(1,r+1).some(e=>e.vb))return;if(t.alter){const r=i.findIndex(e=>!e.alter);r>0&&(i[r].rightSign="]",i[r-1].leftSign="{[",t.rightSign="],",e[s+1]&&(e[s+1].rightSign="},"))}else t.rightSign="],";i.some(e=>e.vb)||(e[0].leftSign="2*[")}}),e.map(e=>e.leftSign+e.index.toString()+e.rightSign+(e.rightSign?"":",")).join(" ").replace(/,$/,"")}get qualityScore(){const e=this.measures.filter(e=>!e.empty),t=e.map(Ke).map(e=>e.qualityScore).reduce((e,t)=>e+t,0);return e.length?t/e.length:null}dumpEvaluations(){const e=this.measures.filter(e=>!e.empty).map(e=>({measureIndex:e.measureIndex,...Ke(e)})),t=e.map(e=>e.qualityScore).reduce((e,t)=>e+t,0);console.log("qualityScore:",t/e.length),console.table(e)}regulate(e={}){this.measures.forEach(t=>t.regulated||t.regulate(e))}cleanupRegulation(){this.measures.forEach(e=>e.voices=null)}rectifyTimeSignatures(e=new DummyLogger){const t=this.measures.map((e,t)=>({measure:e,index:t})).filter(({measure:e,index:t})=>!t||e.timeSignatureChanged).map(({index:e})=>e);t.map((e,s)=>this.measures.slice(e,se.filter(e=>e.estimatedDuration>0)).filter(e=>e.length>=3||e.some(e=>e.doubtfulTimesig)).forEach(t=>{if(t[0].patched){const s=t[0].timeSignature,i=t.slice(1).filter(e=>!e.patched&&Be(e.timeSignature)!==Be(s));if(i.length){const t=i[0].timeSignature;i.forEach(e=>e.basics.forEach(e=>e.timeSignature=s)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by patched head:",`${Be(t)} -> ${Be(s)}`,i.map(e=>e.measureIndex))}return}const s=t[0].timeSignature,i=Number.isInteger(Math.log2(s.denominator));let r=i?4:8;i&&(r=Math.max(r,t[0].timeSignature.denominator));const n=t.map(e=>Math.round(e.estimatedDuration*r/je)),a=Object.entries(n.reduce((e,t)=>(e[t]=(e[t]||0)+1,e),{})).sort((e,t)=>t[1]-e[1]),o=a[0][1],c=a.filter(([e,t])=>t>.6*o).reduce((e,t)=>Number(t[0])>Number(e[0])?t:e);if(c[1]>1){let n=Number(c[0]);if(!i||s.denominator*n!==s.numerator*r){if(i&&r!==s.denominator){const e=n*s.denominator/r;Number.isInteger(e)&&(n=e,r=s.denominator)}const a=t.filter(e=>!e.patched),o=_e(n,r);a.forEach(e=>e.basics.forEach(e=>e.timeSignature=o)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by estimation:",`${Be(s)} -> ${n}/${r}`,a.map(e=>e.measureIndex))}}})}makeVoiceStaves(){this.regulate();const e=Math.max(...this.measures.map(e=>e.voices.length));if(!e||!Number.isFinite(e))return null;this.measures.filter(e=>e.patched).forEach(e=>{e.events.forEach(e=>{e.tied&&e.pitches.forEach(e=>e.tied=!0)})});for(let e=0;et.staff===e)||[]).reduce((e,t)=>Math.max(e,t.x||0),-1/0);if(!Number.isFinite(r))continue;const n=[];t.contexts[e]=i.filter(e=>!(0===e.type&&e.x>r)||(n.push(e),!1)),n.length>0&&s.contexts[e]&&(n.forEach(e=>e.tick=0),s.contexts[e]=[...n,...s.contexts[e]])}}const t=this.measures.map(t=>{console.assert(t.validRegulated,"[makeVoiceStaves] measure is invalid:",t);const s={};t.events.forEach(e=>s[e.id]=e);const i=new Set(Array(t.contexts.length).fill(null).map((e,t)=>t));let r=null;if(t.barType)switch(t.barType){case"Segment":r="||";break;case"Terminal":r="|."}const n=t.voices.map(e=>{const n=e.map(e=>s[e]);n.sort((e,t)=>e.tick-t.tick);const a={};let o=0,c=null;for(const e of n)Number.isFinite(e?.tick)?(e.tick>o?a[o]=EventTerm.space({tick:o,duration:e.tick-o}):!e.grace&&e.tick{const s=t.eventMap[e];s&&(a[s.tick]=s)}))):console.warn("invalid event tick:",e);t.endEvent&&t.endEvent.graceIds&&t.endEvent.graceIds.forEach(e=>{const s=t.eventMap[e];!s||c&&s.staff!==c.staff||(a[s.tick]=s)}),ot.duration&&Number.isFinite(t.duration)&&(c.timeWarp=Oe(t.duration-c.tick,c.duration)),console.assert(!c||!c.timeWarp||Number.isInteger(c.timeWarp.numerator)&&Number.isInteger(c.timeWarp.denominator),"invalid time warp:",c);const l=n[0]?n[0].staff:0;i.delete(l);const u=t.basics[l],h=t.contexts[l],m=n[n.length-1],f=m?m.staff:0;return{tickMap:a,duration:t.duration,...u,contextedTerms:h,marks:[],break:t.break,pageBreak:t.pageBreak,headStaff:l,tailStaff:f,bar:r}});for(;n.lengtht.headStaff!==e),o=vs({terms:r,duration:t.duration,...s,break:t.break,pageBreak:t.pageBreak},a);o.headStaff=e,o.tailStaff=e,n.push(o)}return n});t.forEach(e=>e.forEach(e=>{const t=[];e.empty||(t.push(`s${e.headStaff}`),t.push(`s${e.tailStaff}`)),Object.values(e.tickMap).forEach(e=>{if(e instanceof EventTerm){if(t.push(`s${e.staff}`),e.stemDirection){const s=`st${e.staff}-${e.stemDirection}`;t.push(s,s)}e.grace?t.push(`gd${e.mainDuration}`):t.push(`d${e.mainDuration}`),e.rest?t.push("r-"+e.rest):e.pitches.forEach(e=>{t.push(`p1-${e.note}`),t.push(`p8-${Math.round(e.note/8)}`)})}}),e.trait=HashVector.fromWords(t)}));const s=this.staffGroups.flat(1).reduce((e,t)=>(e[t]=this.staffGroups.findIndex(e=>e.includes(t)),e),{}),i=Array(e).fill(null).map((e,t)=>({vector:HashVector.zero,index:t,weight:0,headStaff:null}));t.forEach((e,t)=>{i.sort((e,t)=>t.weight-e.weight);const r=new Set(e);i.forEach(e=>{const i=[...r];let n=i[0];if(t>0&&i.length>1){const t=i.map(t=>s[t.headStaff]===s[e.headStaff]?ls(e.vector.toHash(),t.trait.toHash()):-1);n=i[$e(t)]}r.delete(n),n.voiceIndex=e.index,e.vector.scale(.4).add(n.trait),e.weight=Object.keys(n.tickMap).length,0===t&&(e.headStaff=n.headStaff)}),e.sort((e,t)=>e.voiceIndex-t.voiceIndex)});const r=Array(this.stavesCount).fill(null).map(()=>[]);i.forEach(e=>{r[e.headStaff].push(e.index)});const n=Array(this.stavesCount).fill(null).map((e,s)=>{if(!t[0])return{voices:[]};return{voices:r[s].map(e=>({mode:"relative",measures:t.map(t=>t[e])}))}});return(e=>{if(!e[0]||!e[0].voices[0])return void console.warn("empty voices:",e);const t=e[0].voices[0].measures.length;Array(t).fill(null).map((t,s)=>{for(const t of e)for(const e of t.voices)if(!e.measures[s].empty)return!1;return!0}).forEach((t,s)=>{t&&e.forEach(e=>e.voices.forEach(e=>{e.measures[s].tickMap={}}))})})(n),n.forEach(e=>e.voices.forEach(xs)),n}perform(){const e=this.makeVoiceStaves();if(!e)return null;const t=new Map,s=Array(this.stavesCount).fill(null).reduce((e,t,s)=>(e[s]=s,e),{}),i=[].concat(...e.map((e,t)=>e.voices.map(()=>s[t])));let r=!1,n=0,a=null;const o=this.measures.filter(e=>!e.empty).map(s=>{const{systemIndex:o,right:c}=s.position,l=s.measureIndex,u=[].concat(...e.map(e=>e.voices.map(e=>e.measures[l]))),h=u[0],m=n;n+=h.duration;const f=[].concat(...u.map((e,s)=>{const r=i[s],n=Object.values(e.tickMap).filter(e=>e instanceof EventTerm&&!e.rest).map(e=>{const s=Math.round(1*e.duration);console.assert(Number.isFinite(e.tick),"invalid event term tick:",e),console.assert(Number.isFinite(s),"invalid event term duration:",e),e.tick>=0&&e.noteIds.forEach(s=>{t.set(s,{system:o,measure:l,x:e.roundX,endX:c})});const i=this.staffGroups.findIndex(t=>t.includes(e.staff));return{tick:Math.round(1*e.tick),duration:s,pitches:e.pitches,noteIds:e.noteIds,part:i,staff:e.staff}});return[].concat(...n.map(e=>{const t=e.pitches.reduce((e,t)=>(e[Le(t)]=t,e),{});return Object.values(t).sort((e,t)=>e.note-t.note).filter(e=>!e.tied).map((t,s)=>{const i=Le(t),n=e.noteIds&&e.noteIds[s];return{tick:e.tick,pitch:i,duration:e.duration,chordPosition:{index:s,count:e.pitches.length},tied:t.tied,id:n,ids:[n],track:e.part,staff:e.staff,channel:r,subNotes:[{startTick:0,endTick:e.duration,pitch:i,velocity:127}]}})}))})),d=[];a=a||d,s.marks&&s.marks.forEach(e=>{if(e instanceof TempoTerm){const t=e.bpm;if(e.isValid()){const s=r?d:a,i=r?e.tick:0;s.push({track:0,ticks:i,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:Math.round(6e7/t)}}),r=!0}}});const p=s.basics[0];return{tick:m,duration:s.duration,notes:f,events:d,timeSignature:p&&p.timeSignature,keySignature:p&&p.keySignature}});r||o[0].events.push({track:0,ticks:0,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:5e5}});return{notation:new MetaNotation({measures:o}),tokenMap:t}}performByEstimation(){const e=new Map;let t=0;const s=this.measures.filter(e=>e.events.some(e=>e.predisposition)).map(s=>{const i=t,r=Math.round(s.estimatedDuration||Ae(je,s.timeSignature)),n=s.basics[0];t+=r;const{systemIndex:a,right:o}=s.position,c=s.measureIndex;return{tick:i,duration:r,notes:s.events.filter(e=>e.predisposition&&e.predisposition.fake<.5&&!e.rest).map(t=>{const s=Math.round(t.predisposition.tick);return t.noteIds.forEach(s=>{e.set(s,{system:a,measure:c,x:t.roundX,endX:o})}),t.pitches.map((e,i)=>{const r=Le(e),n=t.noteIds&&t.noteIds[i],a=this.staffGroups.findIndex(e=>e.includes(t.staff));return{tick:s,pitch:r,duration:t.duration,chordPosition:{index:i,count:t.pitches.length},tied:e.tied,id:n,ids:[n],track:a,staff:t.staff,channel:0,subNotes:[{startTick:0,endTick:t.duration,pitch:r,velocity:127}]}})}).flat(1),events:[],timeSignature:n&&n.timeSignature,keySignature:n&&n.keySignature}});return{notation:new MetaNotation({measures:s}),tokenMap:e}}featureHash(){const e=this.measures.slice(0,16).map(e=>e.featureWords),t=[1,4,16].map(t=>{const s=e.slice(0,t).filter(Boolean),i=s.map(e=>e[0]).flat(1),r=s.map(e=>e[1]).flat(1),n=s.map(e=>e[2]).flat(1),[a,o,c]=[i,r,n].map(HashVector.fromWords);return HashVector.concat(a,o.sub(128),c.sub(128))});return HashVector.concat(...t).toHash()}featureHashHex(){return e=this.featureHash(),Array.from(e).map(us).join("");var e}featureHashBigInt(){return e=this.featureHash(),Array.from(e).reduce((e,t)=>0x100n*e+BigInt(t),0n);var e}assignMeasureNumbers(){let e=null;for(const t of this.measures)(t.discard||t.events.length)&&(t.indent&&(e=null),Number.isFinite(e)||(e=t.partialDuration?0:1),t.measureNumber=e++)}}Spartito.className="Spartito";const Ss=[0,2,4,5,7,9,11],bs=e=>{let t=e%7;for(;t<0;)t+=7;return t},ks=e=>{let t=e%12;for(;t<0;)t+=12;return t},Ts={[-2]:"♭♭",[-1]:"♭",0:"♮",1:"♯",2:"𝄪"};class StaffContext{constructor(){this.logger=new DummyLogger,this.clef=-3,this.keyAlters=[],this.octaveShift=0,this.alters=[],this.timeSignature={numerator:4,denominator:4},this.timeSigNumeric=!1,this.timeSigNumSet=!1,this.timeSigDenSet=!1,this.doubtingTimesig=!0}change(e){switch(e.type){case Ue.Clef:this.clef=e.clef;break;case Ue.KeyAcc:this.keyAlters[bs(this.yToNote(e.y))]=e.alter;break;case Ue.Acc:this.alters[this.yToNote(e.y)]=e.alter;break;case Ue.OctaveShift:this.octaveShift=e.octaveShift;break;case Ue.TimeSignatureC:switch(this.timeSigNumeric=!1,e.tokenType){case"timesig-C44":this.timeSignature.numerator=4,this.timeSignature.denominator=4;break;case"timesig-C22":this.timeSignature.numerator=2,this.timeSignature.denominator=2}this.doubtingTimesig=this.partialTimeSignature;break;case Ue.TimeSignatureN:switch(this.timeSigNumeric=!0,e.y){case 1:this.timeSigDenSet?this.timeSignature.denominator=10*this.timeSignature.denominator+e.number:this.timeSignature.denominator=e.number,this.timeSigDenSet=!0;break;case-1:this.timeSigNumSet?this.timeSignature.numerator=10*this.timeSignature.numerator+e.number:this.timeSignature.numerator=e.number,this.timeSigNumSet=!0;break;default:this.logger.warn("unexpected time signature Y:",e.y)}this.doubtingTimesig=this.partialTimeSignature}}resetMeasure(){this.alters=[],this.timeSigNumSet=!1,this.timeSigDenSet=!1}resetSystem(){this.keyAlters=[]}get keySignature(){return this.keyAlters.filter(e=>Number.isInteger(e)).reduce((e,t)=>e+t,0)}get partialTimeSignature(){return!this.timeSigNumSet!=!this.timeSigDenSet}noteToY(e){return-e/2-this.clef-3.5*this.octaveShift}pitchToNote(e,{preferredAlter:t=null}={}){t||(t=this.keySignature<0?-1:1);const s=Math.floor((e-60)/12),i=ks(e),r=Ss.includes(i)?i:ks(i-t),n=Ss.indexOf(r);this.logger.assert(n>=0,"invalid preferredAlter:",e,t,r);const a=7*s+n,o=i-r,c=this.keyAlters[n]||0;return{note:a,alter:Number.isInteger(this.alters[a])?o:o===c?null:o}}pitchToY(e,{preferredAlter:t=null}={}){const{note:s,alter:i}=this.pitchToNote(e,{preferredAlter:t});return{y:this.noteToY(s),alter:i}}yToNote(e){return this.logger.assert(Number.isInteger(2*e),"invalid y:",e),2*(-e-3.5*this.octaveShift-this.clef)}alterOnNote(e){if(Number.isInteger(this.alters[e]))return this.alters[e];const t=bs(e);return Number.isInteger(this.keyAlters[t])?this.keyAlters[t]:0}noteToPitch(e){const t=Math.floor(e/7),s=bs(e),i=60+12*t+Ss[s]+this.alterOnNote(e);return Number.isFinite(i)?i:(this.logger.warn("invalid pitch value:",i,e,t,s),-1)}yToPitch(e){return this.noteToPitch(this.yToNote(e))}yToPitchName(e){const t=this.yToNote(e),s=Math.floor(t/7),i=bs(t);let r=this.alterOnNote(t);return r||Number.isInteger(this.alters[t])||(r=null),`${Ts[r]?Ts[r]:""}${"CDEFGAB"[i]}${s+4}`}}const ws=e=>e.reduce((e,t,s)=>t?e|1<{if(e.version<3){const{version:t,stavesCount:s,layoutTemplate:i,...r}=e;let n=s>1?Array(s-1).fill(",").join(""):"";2===s&&(n="{-}"),e={version:3,staffLayoutCode:n,...r}}return e.version<8&&(e.pages.forEach(e=>{e.systems.forEach(e=>{if(e.semantics){const t=e.semantics.filter(e=>e.semantic===g.vline_BarMeasure);e.semantics=[].concat(...e.staves.map(e=>{const s=e.top+e.staffY;return t.map(e=>({...e,y:e.y+s,extension:{...e.extension,y1:e.extension.y1+s,y2:e.extension.y2+s}}))}))}})}),e.version=8),e.version<9&&(e.spartito=null,e.version=9),e})(e)),this.pages=this.pages||[],this.headers=this.headers||{},this.instrumentDict=this.instrumentDict||{},this.pageSize=this.pageSize||{width:794,height:1122},this.unitSize=this.unitSize||null,this.staffLayoutCode=this.staffLayoutCode||(2===this.maxStavesCount?"{-}":Array(this.maxStavesCount).fill("").join(","))}get systems(){return[].concat(...this.pages.map(e=>e.systems))}get measureCount(){return this.systems.reduce((e,t)=>e+(t.measureCount||0),0)}get imageKeys(){return[...this.pages.map(e=>e.source?.url),...this.systems.map(e=>e.backgroundImage),...[].concat(...this.systems.map(e=>[...e.staves.map(e=>e.backgroundImage),...e.staves.map(e=>e.maskImage)].filter(Boolean)))].filter(Boolean)}get breakSystemIndices(){const e=[];let t=0;return this.pages.forEach((s,i)=>{ie.staves.length),0)}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}get semanticHash(){const e=[].concat(...this.systems.map(e=>[].concat(...e.staves.map(t=>t.semantics?e.qualifiedSemantics(t.semantics).map(e=>e.id):[]))));return y.default(e.join(""))}eventSystemsToTermStaves(e,t=new DummyLogger){const s=Array(this.maxStavesCount).fill(null).map((t,s)=>({rows:e.map((e,t)=>e.columns.map((i,r)=>{const n=i.rows[s];console.assert(n,"[eventSystemsToTermStaves] measure is null:",s,i.rows);const a=n.contexts;0===r&&(a.some(e=>e.type===Ue.OctaveShift)||a.unshift(new ContextedTerm({staff:s,x:0,y:0,tokenType:B.OctaveShift0,tick:0})));const o=[...n.events||[],...a].sort((e,t)=>e.x-t.x),c=0===s&&r===e.columns.length-1&&this.breakSystemIndices.includes(t);return{terms:o,duration:i.duration,pageBreak:c}}))}));return s.forEach(e=>((e,t=new DummyLogger)=>{const s=new StaffContext;s.logger=t;for(const t of e.rows){for(const e of t){const t=e.terms.find(e=>e instanceof EventTerm);let i=t?Math.min(t.tick,0):0;e.terms.forEach(e=>{if(e instanceof ContextedTerm)e.tick=i,s.change(e);else if(e instanceof EventTerm){const t=e.tick+(e.duration||0);t>i&&(i=t),e.ys&&(e.pitches=e.ys.map(e=>{const t=s.yToNote(e);return{note:t,alter:s.alterOnNote(t),octaveShift:s.octaveShift}}))}}),e.timeSignature={...s.timeSignature},e.timeSigNumeric=s.timeSigNumeric,e.doubtfulTimesig=s.doubtingTimesig||!Number.isInteger(Math.log2(e.timeSignature.denominator))||e.timeSignature.numerator<=e.timeSignature.denominator/4,e.keySignature=s.keySignature,0===e.duration&&(e.duration=je*e.timeSignature.numerator/e.timeSignature.denominator),s.resetMeasure()}s.resetSystem()}})(e,t)),s}resetPageLayout(e){const{unitSize:t=this.unitSize,pageSize:s=this.pageSize}=e,i=.5*s.width/t,r=.5*s.height/t;this.pages.forEach(e=>{const n=i-e.width/2,a=r-e.height/2;e.systems.forEach(e=>{e.left+=n,e.top+=a}),e.semantics&&e.semantics.forEach(e=>{e.x+=n,e.y+=a}),e.width=s.width/t,e.height=s.height/t,e.assemble({textAnnotations:this.textAnnotations})}),this.unitSize=t,this.pageSize=s}getMeasure(e){let t=e;for(const s of this.systems){if(te&&e.measures[t]);return{measureIndex:e,system:s,localIndex:t,left:r.left,right:r.right,measures:n}}t-=s.measureCount}return null}getRawCluster(e,t,{timeSignature:s}={}){const i=this.getMeasure(e);if(!i)return null;const{system:r,left:n,right:a}=i,o=[kt];s&&o.push(...Tt(s));const c=r.staves[0].top+r.staves[0].staffY-2;return r.staves.forEach(e=>{let s=r.qualifiedSemantics(e.semantics,t).filter(e=>e.x>n&&e.xe.semantic===g.TempoNotehead).forEach(e=>{const t=s.findIndex(t=>/^Notehead/.test(t.semantic)&&Ie(e,t)<.3);t>=0&&s.splice(t,1)});const i=e.top+e.staffY-c;s.forEach(t=>{const s=ot[t.semantic];if(s){let r=t.y,a=t.y;s===ot.vline_Stem&&(r=t.extension.y1,a=t.extension.y2),o.push({id:t.id,type:s,staff:e.index,x:t.x-n,y1:r+i,y2:a+i})}})}),new SemanticCluster({index:e,elements:o})}getRawClusters(e=1){return Array(this.measureCount).fill(null).map((t,s)=>this.getRawCluster(s,e))}makeSpartito(e=new DummyLogger){let t=this.systems.map(e=>e.getEvents(this.maxStavesCount));const s=this.eventSystemsToTermStaves(t,e);t.forEach((e,t)=>{e.columns.forEach((e,i)=>{e.basics=s.map(e=>{const{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}=e.rows[t][i];return{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}})})});const i=[].concat(...t.map(e=>e.columns.map(t=>{const s=t.measureIndex,{system:i,localIndex:r,left:n,right:a}=this.getMeasure(s),o=[];i.staves.forEach(e=>o[e.index]=e.top+e.staffY);const c=this.patches&&this.patches.find(e=>e.measureIndex===s),l=c?c.events:SpartitoMeasure.reorderEvents([].concat(...t.rows.map(e=>e.events)),o),u=Object.fromEntries(Object.entries(t.barTypes).map(([e,t])=>[e,t/i.staves.length])),h=0===r&&i.indent;return new SpartitoMeasure({measureIndex:s,staffMask:e.staffMask,position:{systemIndex:i.index,localIndex:r,left:n,right:a,staffYs:i.staves.map(e=>e.top+e.staffY),staffYsFull:o},duration:c?c.duration:t.duration,events:l,contexts:t.rows.map(e=>e.contexts),marks:t.marks,break:t.break,pageBreak:t.pageBreak,voltaBegin:t.voltaBegin,voltaEnd:t.voltaEnd,alternative:t.alternative,barTypes:u,indent:h,basics:c?c.basics:t.basics,matrixH:null,matrixV:null,voices:c?c.voices:null,patched:!!c})}))),r=this.staffLayout,n=r.standaloneGroups.map(e=>e.map(e=>r.staffIds.indexOf(e)));return this.spartito=new Spartito({stavesCount:this.maxStavesCount,staffGroups:n,measures:i}),this.spartito}makeMusicSheet(){const e=this.spartito||this.makeSpartito();e.regulated||console.warn("[makeMusicSheet]\tspartito not regulated.");const t=e.makeVoiceStaves(),{title:s,pageSize:i,unitSize:r,staffLayout:n,paperOptions:a,headers:o,instrumentDict:c}=this;return{title:s,pageSize:i,unitSize:r,measureLayout:this.getMeasureLayout(),staffLayout:n,paperOptions:a,headers:o,voiceStaves:t,instrumentDict:c}}findPoint(e){for(const t of this.systems)for(let s=0;st.id===e);if(i){return{point:i,pageIndex:this.pages.findIndex(e=>e.systems.includes(t)),systemIndex:t.index,staffIndex:s}}}return null}getMeasureSemantics(e,t){const s=this.systems[e];if(!s)return null;const i=t?s.measureBars[t-1]:0,r=s.measureBars[t]||s.width;return s.staves.map((e,t)=>{const s=e.top+e.staffY;return e.semantics.filter(e=>e.x>=i&&e.x{const[i,r]=Number.isFinite(e.extension?.y1)?[e.extension.y1,e.extension.y2]:[e.y,e.y];return{...e,staff:t,sy1:i+s,sy2:r+s}})}).flat(1)}makeTimewiseGraph({store:e=!1}={}){if(!this.spartito)return null;return{measures:this.spartito.measures.filter(e=>e.events.length>0).map(t=>{const s=this.getMeasureSemantics(t.position.systemIndex,t.position.localIndex),i={measureIndex:t.measureIndex,left:t.position.left,right:t.position.right,points:s};return e&&(t.graph=i),i})}}getTokenMap(){const e=new Map;return this.systems.forEach(t=>t.staves.forEach(t=>t.measures.forEach(t=>t.tokens.forEach(t=>e.set(t.id,t))))),e}assemble(e=1,t=new DummyLogger){const s=new Map;this.pages.forEach((e,t)=>e.index=t);let i=0;this.systems.forEach((r,n)=>{r.index=n,r.headMeasureIndex=i,r.prev=this.systems[n-1]||null,r.next=this.systems[n+1]||null,r.semantics&&r.semantics.length&&r.semantics.forEach(e=>((e,i,r)=>{const n=_(e,i,r);t.assert(!s.has(n),"semantic point hash conflicted:",n,r,s.get(n)),s.set(n,r)})(n,null,e)),r.assemble(e,t),i+=r.measureCount}),this.pages.forEach((e,s)=>{e.systems.forEach(e=>e.pageIndex=s),e.assemble({textAnnotations:this.textAnnotations},t)})}assembleSystem(e,t=1){this.systems.forEach((e,t)=>e.index=t);const s=e.index;e.semantics&&e.semantics.length&&(e.semantics.forEach(e=>_(s,null,e)),e.assemble(t))}markVoices(e){const t=this.getTokenMap();for(const e of t.values())e.voice=0;const s=[].concat(...e.map((e,t)=>(e.voices||[]).map((e,s)=>[t,s]))).sort(([e,t],[s,i])=>t-i||e-s).map(([e,t])=>`${e}|${t}`);e.forEach((e,i)=>(e.voices||[]).forEach((e,r)=>e.measures.forEach(e=>{const n=s.indexOf(`${i}|${r}`);Object.values(e.tickMap).filter(e=>e instanceof EventTerm).forEach(e=>{const s=e.noteIds?e.noteIds.map(e=>t.get(e)).filter(Boolean):[],i=e.accessories?e.accessories.map(e=>t.get(e.id)).filter(Boolean):[];[...s,...i].forEach(e=>e.voice|=1<e.timeWarped=!0)})})))}async replaceImageKeys(e){await Promise.all([...this.pages.map(async t=>{t.source&&(t.source.url=await e(t.source.url))}),...this.systems.map(t=>Promise.all([e(t.backgroundImage).then(e=>t.backgroundImage=e),...t.staves.map(async t=>{t.backgroundImage=await e(t.backgroundImage),t.maskImage=await e(t.maskImage)})]))])}inferenceStaffLayout(){const e=Math.max(...this.systems.map(e=>e.staves.length),0);this.staffLayoutCode=Array(e).fill("").join(",");const t=this.systems.filter(t=>t.staves.length===e&&t.bracketsAppearance);if(!t.length)return;const s=t.map(e=>{try{return Ee(e.bracketsAppearance).staffIds.length!==e.staves.length?null:e.bracketsAppearance}catch(e){return null}}).filter(Boolean);if(!s.length)return;const i=s.reduce((e,t)=>{const s=e[t]||0;return e[t]=s+1,e},{}),r=Math.max(...Object.values(i)),n=Object.entries(i).find(([e,t])=>t===r)[0].replace(/\{,*\}/g,e=>e.replace(/,/g,"-")),a=Ee(n);this.staffLayoutCode=n;let o=null;for(const t of this.systems)if(o&&t.staves.length===o.staves.length&&t.bracketsAppearance===o.bracketsAppearance)t.staffMaskChanged=null;else{if(t.staves.length{if(s.length>a.staffIds.length)return null;if(s.reduce((e,t)=>e+t,0)===t.staves.length)return ws(s);for(const i of[1,0]){const r=[...s,i],n=a.partialMaskCode(r);if(n===t.bracketsAppearance)return ws(r);if(t.bracketsAppearance.startsWith(n)){const t=e(r);if(t)return t}}return null},s=e([]);t.staffMaskChanged=o&&s===o.staffMask?null:s}o=t}}assignBackgroundForMeasure(e){e.backgroundImages=[];const t=this.systems[e.position.systemIndex];t.backgroundImage&&e.backgroundImages.push({url:t.backgroundImage,position:t.imagePosition,original:!0}),t.staves.forEach(s=>{!t.backgroundImage&&s.backgroundImage&&e.backgroundImages.push({url:s.backgroundImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top},original:!0}),s.maskImage&&e.backgroundImages.push({url:s.maskImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top}})})}blackoutFakeNotes(e="patched"){if(!this.spartito)return;let t=e=>!0;switch(e){case"patched":t=e=>e.patched;break;case"perfect":t=e=>e.patched||e.regulated&&Ke(e).perfect}const s=this.spartito.measures.filter(t).reduce((e,t)=>{if(!t.regulated)return;const s=t.voices.flat(1);return t.events.filter(e=>!e.rest&&!e.grace&&!s.includes(e.id)).forEach(t=>t.noteIds&&e.push(...t.noteIds)),e},[]),i=new Set(s);return this.systems.forEach(e=>e.staves.forEach(t=>{const s=t.semantics.filter(e=>i.has(e.id)).map(e=>e.id);e.sidBlackList.push(...s)})),s}getMeasureLayout(){const e=this.spartito&&this.spartito.measureLayoutCode;if(e)try{return(e=>{const t=fe(e);return t?.data?ae(t.data,he):null})(e)}catch(e){console.debug("invalid measure layout code:",e)}return null}*splitToSingleScoresGen(){this.assemble();const e=this.systems.filter(e=>e.index>0&&e.indent&&e.timeSignatureOnHead).map(e=>e.index);if(!e.length)return void(yield this.deepCopy());const t=new Score({...this,pages:[],topology:void 0,spartito:void 0,patches:void 0});this.pages.forEach(e=>{delete e.tokens,e.systems.forEach(e=>{delete e.tokens,e.staves.forEach(e=>{e.measures=[]})})});let s=0;for(const i of[...e,this.systems.length]){const e=e=>e.index>=s&&e.indext.systems.some(e)).map(t=>{const{systems:s,...i}=t;return new Page({...i,systems:s.filter(e).map(e=>new System({...e}))})}),n=t.deepCopy();n.headers.SubScoreSystem=`${s}-${i-1}`,n.headers.SubScorePage=`${r[0].index}-${r[r.length-1].index}`,n.pages=r,n.assemble(),n.inferenceStaffLayout(),s=i,yield n}}splitToSingleScores(){return[...this.splitToSingleScoresGen()]}}Score.className="Score";class EditableEvent extends EventTerm{constructor(e){super(e)}get agent(){return new Proxy(this,{get(e,t){const s=e;switch(t){case"id":case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"beam":case"tremolo":case"tremoloLink":case"arpeggioStyle":{const e=s[t];return void 0===e?null:e}case"tying":case"tied":case"glissando":{const e=s[t];return void 0!==e&&e}case"grace":return!!s.grace;case"timeWarp":return s.timeWarp?`${s.timeWarp.numerator}/${s.timeWarp.denominator}`:null;case"multiplier":return s.multiplier?`${s.multiplier.numerator}/${s.multiplier.denominator}`:null;case"pitches":return s.pitches}},set:(e,t,s)=>{const i=e;switch(t){case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"tying":case"tied":case"beam":case"tremolo":case"tremoloLink":case"glissando":case"arpeggioStyle":return i[t]=s,!0;case"grace":return i.grace=s?Ve.Grace:null,!0;case"timeWarp":if(i.timeWarp=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.timeWarp={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"multiplier":if(i.multiplier=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.multiplier={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"id":case"pitches":return!0}return!1},ownKeys:()=>["id","duration","rest","division","dots","stemDirection","tying","tied","beam","timeWarp","multiplier","tremolo","tremoloLink","glissando","arpeggioStyle","tick","grace","pitches"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}}class EditableMeasure extends SpartitoMeasure{constructor(e){super(e),this.events=null,this.events=e.events,this.events?.some(e=>!(e instanceof EditableEvent))&&(this.events=this.events.map(e=>new EditableEvent(e))),this.voices&&this.syncVoiceToEvents()}syncVoiceToEvents(){this.events.forEach(e=>e.voice=-1),this.voices.forEach((e,t)=>{e.forEach(e=>{const s=this.events.find(t=>t.id===e);s?s.voice=t:console.warn("no event with id:",e,this.events.length)})})}syncVoiceFromEvents(){const e=[];this.events.forEach(t=>{t?.voice>=0&&(e[t.voice]=e[t.voice]||[],e[t.voice].push(t))}),e.forEach(e=>e.sort((e,t)=>e.tick-t.tick)),this.voices=e.map(e=>e.map(e=>e.id))}get agent(){return new Proxy(this,{get:(e,t)=>{const s=e;switch(t){case"measureIndex":case"duration":return s[t];case"voices":return s.voices?.map(e=>e.join(","))||null;case"timeSignature":case"keySignature":case"doubtfulTimesig":return s.basics[0][t];case"toJSON":return()=>({measureIndex:s.measureIndex,voices:s.voices,duration:s.duration,timeSignature:s.basics[0].timeSignature,keySignature:s.basics[0].keySignature})}},set:(e,t,s)=>{const i=e;switch(t){case"timeSignature":case"keySignature":case"doubtfulTimesig":return i.basics[0][t]=s,i.basics=i.basics.map(()=>i.basics[0]),!0;case"duration":return i.duration=s,!0;case"measureIndex":case"voices":return!0}return!1},ownKeys:()=>["measureIndex","timeSignature","doubtfulTimesig","keySignature","duration","voices"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}makeMIDI(e=120){if(!this.regulated)return null;const t=6e7/e,s=this.voices.map((e,s)=>{const i=e.map(e=>{const t=this.events.find(t=>t.id===e);if(t){const e=t.graceIds?t.graceIds.map(e=>this.events.find(t=>t.id===e)):[];return[...e,t]}return[]}).flat(1),r=i.filter(e=>!e.rest&&Number.isFinite(e.tick)&&e.tick>=0&&Number.isFinite(e.duration)).map(e=>e.pitches.map(t=>[{id:e.id,time:e.tick,type:"channel",subtype:"noteOn",channel:e.staff,noteNumber:Le(t),velocity:96},{id:e.id,time:e.tick+e.duration,type:"channel",subtype:"noteOff",channel:e.staff,noteNumber:Le(t)}])).flat(2);return r.sort(function(e,t){return e.time-t.time}),0===s&&r.unshift({time:0,type:"meta",subtype:"timeSignature",numerator:this.timeSignature.numerator,denominator:this.timeSignature.denominator,thirtyseconds:8},{time:0,type:"meta",subtype:"setTempo",microsecondsPerBeat:t}),r.forEach(e=>{e.ticks=Math.round(e.time-0)}),r.forEach((e,t)=>{e.deltaTime=e.ticks-(t>0?r[t-1].ticks:0)}),r.push({deltaTime:0,type:"meta",subtype:"endOfTrack"}),r});return{header:{formatType:0,ticksPerBeat:480},tracks:s}}}var Ms;EditableMeasure.className="EditableMeasure",EditableMeasure.blackKeys=[],function(e){e.Pass="i",e.Division="d",e.Dots="o"}(Ms||(Ms={}));const Es=["whole","half","quarter","eighth","sixteenth","thirtysecond","sixtyfourth","128th","256th"],Ns=.4/je,Is=1e-12,Cs=[void 0,"u","d"],_s=[void 0,ze.Open,ze.Continue,ze.Close],Os=e=>({elements:e.elements.map(e=>({tick:e.tick,division:e.division,dots:e.dots,beam:e.beam,stemDirection:e.stemDirection,grace:e.grace,timeWarped:e.timeWarped,fullMeasure:e.fullMeasure,fake:e.fake,order:e.order,predisposition:e.predisposition}))});class BeadNode{constructor(e){Object.assign(this,e),this.children={},this.accessCount=0}nextBranch(){const e=this.possibilities.map((e,t)=>e/(this.children[t]?this.children[t].accessCount+1:1));return e.every(e=>!e)?(this.accessCount=1/0,null):$e(e)}get currentElem(){return this.cluster.elements[this.elemIndex]}branchID(e){switch(this.type){case Ms.Pass:return`i_${e}`;case Ms.Division:return Es[e];case Ms.Dots:return"o"+".".repeat(e)}return""}async deduce({picker:e,logger:t,ptFactor:s},i=0){++this.accessCount;const r=this.nextBranch();if(t.debug(String.fromCodePoint(127817)+" ".repeat(i),this.branchID(r),this.accessCount>1?`[${this.accessCount}]`:""),!Number.isInteger(r)||r<0)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);var n;if(this.pretentiousness+=(n=this.possibilities[r],Math.min(100,-Math.log(n))),this.pretentiousness>100*s)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);let a=null;switch(this.type){case Ms.Pass:{const t=this.currentElem.order+1,s=this.cluster.elements[r];if(console.assert(s,"null element:",r,this.cluster.elements.length),s.type===ps.EOS){if(a=As(this.cluster,t,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(this.cluster.elements[0].order=t,!this.children[r]){if(!e.quota)return a;const s=(await e.predictCluster(this.cluster,t+1)).map((e,s)=>this.cluster.elements[s].orderMath.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:r,type:Ms.Division,possibilities:e,pretentiousness:this.pretentiousness})}}break;case Ms.Division:if(this.currentElem.division=r,!this.children[r]){const e=this.currentElem.predisposition.dotsVector.map(e=>Math.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:this.elemIndex,type:Ms.Dots,possibilities:e,pretentiousness:this.pretentiousness})}break;case Ms.Dots:if(this.currentElem.dots=r,a=As(this.cluster,this.currentElem.order+1,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(!this.children[r]){if(!e.quota)return a;const t=this.currentElem.order+1,s=(await e.predictCluster(this.cluster,t)).map((e,s)=>this.cluster.elements[s].order{t.order>e&&(t.order=void 0)}),this.cluster.elements.forEach(e=>e.order=e.order>this.currentElem.order?void 0:e.order),this.cluster.elements[this.cluster.elements.length-1].tick=a.endTick,a}return o}}const Bs=e=>je*2**-e.division*(2-2**-e.dots),As=(e,t,s)=>{const i=e.elements.filter(e=>[ps.CHORD,ps.REST].includes(e.type)&&Number.isInteger(e.order)&&e.ordere.order-t.order);const r=e.elements[e.elements.length-1];let n=0,a=0,o=0,c=1;const l=[[r.x,e.signatureDuration,e.signatureDuration]];let u=0;i.forEach(e=>{e.order>a+1&&(n=0,++c);const t=l.find(e=>e[1]>=n);if(t&&e.x>t[0]+3){const t=l.reduce((t,s)=>Math.abs(e.predisposition.tick-s[2])t[0]>e.x));l.splice(s,0,[e.x,e.tick,e.predisposition.tick]);let i=Bs(e);e.predisposition.timeWarped>.5&&(i=2*i/3),n+=i,u+=i,o=Math.max(o,n),a=e.order}),o>0&&(e.elements[e.elements.length-1].tick=o);const h=e.elements[e.elements.length-1].pivotX-e.elements[1].pivotX,m=Math.max(...i.map(e=>e.tick),o),f=[...i].sort((e,t)=>e.pivotX-t.pivotX),d=f.slice(1).map((e,t)=>{const s=f[t],i=e.pivotX-s.pivotX,r=e.tick-s.tick;if(!r)return i/h;return(4*Math.atan2(r/m,i/h)/Math.PI-1)**2}),p=Math.max(...d,0),g=i.map(e=>(e.tick-e.predisposition.tick)**2),y=g.length?Math.sqrt(g.reduce((e,t)=>e+t,0)/g.length):0,v=e.elements.filter(e=>[ps.CHORD,ps.REST].includes(e.type)&&!(Number.isInteger(e.order)&&e.order.5)).length,x=p>=1||o>e.signatureDuration,S=Math.max(0,e.signatureDuration-u/c);return{tickErr:y,twist:p,residue:v,endTick:o,fatalError:x,voiceN:c,spaceDuration:S,pretentiousness:s,loss:y/je+p+.2*v+.002*c+S*Ns+.02*s}},Ps=async(e,t,s,i=200,r=0,n=1)=>{e.elements.forEach((e,t)=>e.order=t?void 0:0);const a=await t.predictCluster(e,1),o=new BeadNode({cluster:e,elemIndex:0,pretentiousness:0,type:Ms.Pass,possibilities:a});let c=null,l=null;for(t.quota=i;t.quota;){e.elements.forEach((e,t)=>e.order=t?void 0:0);const i=await o.deduce({picker:t,logger:s,ptFactor:n});if(s.debug("loss:",i),(!c||i.loss{e.elements.forEach((e,s)=>Object.assign(e,t.elements[s]))})(e,l);const u=e.elements.filter(e=>[ps.CHORD,ps.REST].includes(e.type)&&Number.isInteger(e.order)),h=e.elements.filter(e=>[ps.CHORD,ps.REST].includes(e.type)&&!Number.isInteger(e.order));u.length&&h.forEach(e=>{if(e.tick=void 0,e.predisposition.fakeP<.5){const t=Bs(e),s=u.filter(e=>e.tick+t<=c.endTick);if(s.length){const t=s.reduce((t,s)=>Math.abs(s.x-e.x)e.order-t.order),[...u,...h].forEach(e=>{e.grace=!Number.isFinite(e.tick)&&e.predisposition.grace,e.timeWarped=e.predisposition.timeWarped>.5,e.fullMeasure=e.predisposition.fullMeasure>.5,e.stemDirection=Cs[$e(e.predisposition.stemDirectionVector)],e.beam=_s[$e(e.predisposition.beamVector)]});const m=e.elements.map(e=>e.index),f=e=>m.indexOf(e);return e.matrixH=e.elements.map(()=>Array(e.elements.length).fill(0)),u.forEach((t,s)=>{const i=u[s-1];!i||i.order{const{stopLoss:s=.09,quotaMax:i=1e3,quotaFactor:r=5,ptFactor:n=1,logger:a=new DummyLogger}=t;let o=0;const c=e.createClusters();for(const l of c){const c=Math.min(i,Math.ceil(l.elements.length*r));a.info(`[measure-${e.measureIndex}]`,c);const{loss:u}=await Ps(l,t.picker,a,c,s,n);o=Math.max(o,u)}const l=[],u=[],h=[];c.forEach(t=>{const s=t.elements.filter(e=>[ps.CHORD,ps.REST].includes(e.type)&&Number.isInteger(e.order));if(s.sort((e,t)=>e.order-t.order),!s.length)return;let i=[];l.push(i);let r=0;s.forEach(e=>{e.fullMeasure||e.grace||e.tremoloCatcher||(e.order>r+1?(i=[e.index],l.push(i)):i.push(e.index),r=e.order)});let n=s[s.length-1];const a=t.elements.filter(e=>[ps.CHORD,ps.REST].includes(e.type)&&Number.isFinite(e.tick)&&!Number.isInteger(e.order));for(;a.length;){const e=a.findIndex(e=>e.tick>=n.tick+Bs(n));e>=0?i.push(a.splice(e,1)[0].index):(n=a.splice(0,1)[0],i=[n.index],l.push(i))}if(s.some(e=>!e.fullMeasure&&Number.isInteger(e.order))){const e=t.elements.find(e=>e.type===ps.EOS);u.push(e.tick)}const o=e.eventMap,c=t.elements.reduce((e,t)=>(Number.isFinite(t.tick)&&e.add(t.tick),e),new Set),m=Array.from(c).sort((e,t)=>e-t);s.forEach(e=>{const t=o[e.index];t&&h.push({id:t.id,tick:e.tick,tickGroup:m.indexOf(e.tick),division:e.division!==t.division?e.division:void 0,dots:e.dots!==t.dots?e.dots:void 0,timeWarp:e.timeWarped?_e(2,3):void 0,beam:e.beam!==t.beam?e.beam:void 0,grace:e.grace!==!!t.grace?e.grace:void 0,fullMeasure:e.fullMeasure||void 0})})});const m=Math.max(...c.map(e=>e.estimatedDuration));return{voices:l.filter(e=>e.length),duration:Math.max(...u),events:h,priority:-o,estimatedDuration:m}},Ds=async(e,{picker:t,resetSignatureForDoubtfulOnly:s})=>{const i=e.createClusters(),r=e.eventMap;for(const n of i)s&&!e.doubtfulTimesig||(n.signatureDuration=0),n.elements.forEach((e,t)=>e.order=t?void 0:0),await t.predictCluster(n,1),n.elements.filter(e=>[ps.CHORD,ps.REST].includes(e.type)).forEach(e=>{r[e.index].predisposition=e.predisposition});e.estimatedDuration=Math.max(...i.map(e=>e.estimatedDuration))},Fs=async(e,t)=>Ds(e,{picker:t,resetSignatureForDoubtfulOnly:!0});var Ls=Object.freeze({__proto__:null,solveCluster:Ps,solveMeasure:Rs,estimateMeasure:Fs,glimpseMeasure:Ds}),$s=Object.freeze({__proto__:null,beadSolver:Ls,get PageLayoutMethod(){return d},get TextType(){return p},TokenTypes:P,TokenClefs:R,TokenTimesigs:D,TokenTimesigsC:F,TokenTimesigsN:L,TokenOctshifts:$,TokenNumbers:j,TokenAccidentals:H,TokenNoteheads:V,TokenBareNoteheads:z,TokenDirectionalNoteheads:q,TokenRests:G,TokenFlags:W,TokenVolta:U,TokenDynamics:Y,TokenScripts:X,TokenPedals:K,TokenDots:Z,TokenArcs:J,TokenBeams:Q,TokenWedges:ee,TokenAccessories:te,TokenDirectionless:se,TokenGlyphs:ie,get TokenType(){return B},Token:Token,TextToken:TextToken,TOKEN_Y_ROUND:re,TOKEN_Y_FIXED:ne,VERSION:14,Score:Score,Page:Page,System:System,Staff:Staff,Measure:Measure,emptyVoiceFromStaffMeasure:vs,SpartitoMeasure:SpartitoMeasure,Spartito:Spartito,EditableEvent:EditableEvent,EditableMeasure:EditableMeasure,Term:Term,EventTerm:EventTerm,ContextedTerm:ContextedTerm,MarkTerm:MarkTerm,TempoTerm:TempoTerm,GlyphTerm:GlyphTerm,TextTerm:TextTerm,LyricTerm:LyricTerm,CommandTerm:CommandTerm,ChordmodeTerm:ChordmodeTerm,get ContextType(){return Ue},get GraceType(){return Ve},get GlissandoStyle(){return Ge},get ArpeggioStyle(){return We},get AccessoryDirection(){return He},WHOLE_DURATION:je,get StemBeam(){return ze},get TremoloLink(){return qe},mod7:bs,get SemanticType(){return g},glyphSemanticMapping:{"rests.1":"Rest1","rests.0o":"Rest0","rests.1o":"Rest1","rests.M1":"RestM1","rests.2":"Rest2","rests.3":"Rest3","rests.4":"Rest4","rests.5":"Rest5","rests.6":"Rest6","accidentals.sharp":"AccSharp","accidentals.doublesharp":"AccDoublesharp","accidentals.natural":"AccNatural","accidentals.flat":"AccFlat","accidentals.flatflat":"AccFlatflat","dots.dot":"Dot","scripts.ufermata":"ScriptFermata","scripts.dfermata":"ScriptFermata","scripts.ushortfermata":"ScriptShortFermata","scripts.dshortfermata":"ScriptShortFermata","scripts.staccato":"ScriptStaccato","scripts.ustaccatissimo":"ScriptStaccatissimo","scripts.dstaccatissimo":"ScriptStaccatissimo","scripts.turn":"ScriptTurn","scripts.trill":"ScriptTrill","scripts.segno":"ScriptSegno","scripts.coda":"ScriptCoda","scripts.arpeggio":"ScriptArpeggio","scripts.prall":"ScriptPrall","scripts.mordent":"ScriptMordent","scripts.umarcato":"ScriptMarcato","scripts.dmarcato":"ScriptMarcato","scripts.uportato":"ScriptPortato","scripts.dportato":"ScriptPortato","scripts.tenuto":"ScriptTenuto","scripts.sforzato":"ScriptSforzato","clefs.C":"ClefC","clefs.F":"ClefF","clefs.G":"ClefG","clefs.F_change":"ClefF","clefs.G_change":"ClefG","timesig.C44":"TimesigC44","timesig.C22":"TimesigC22","pedal.*":"PedalStar","pedal.Ped":"PedalPed","noteheads.s0":"NoteheadS0","noteheads.s1":"NoteheadS1","noteheads.s2":"NoteheadS2",f:"f",m:"m",p:"p",r:"r",s:"s",z:"z"},semanticPriorities:{ClefG:0,ClefF:0,TimesigFour:0,TimesigThree:0,TimesigTwo:0,NoteheadS0:0,NoteheadS1:0,NoteheadS2:0,Dot:0,vline_BarMeasure:0,vline_Stem:0,Flag3:0,TimesigC44:1,TimesigC22:1,TimesigEight:1,TimesigSix:1,AccNatural:1,AccSharp:1,AccFlat:1,KeyAcc:1,Rest0:1,Rest1:1,Rest2:1,Rest3:1,Rest4:1,OctaveShift8:1,OctaveShift0:1,AccDoublesharp:2,AccFlatflat:2,TimesigOne:2,TimesigNine:2,Rest5:2,Rest6:2,SlurBegin:2,SlurEnd:2,VoltaLeft:2,VoltaRight:2,vline_BarTerminal:2,vline_BarSegment:2,TempoNotehead:2,GraceNotehead:2,SignLined:2,SignInterval:2,BeamLeft:2,BeamRight:2,BeamContinue:2,TremoloLeft:2,TremoloRight:2,TremoloMiddle:2,StemTip:2,StemHead:2,f:3,p:3,m:3,ScriptFermata:3,ScriptSforzato:3,ScriptStaccato:3,ScriptStaccatissimo:3,ScriptTurn:3,ScriptTrill:3,ScriptSegno:3,ScriptCoda:3,ScriptArpeggio:3,ScriptPrall:3,ScriptMordent:3,ScriptTenuto:3,PedalStar:3,PedalPed:3,TimesigFive:3,TimesigSeven:3,TimesigZero:3,One:3,Two:3,Three:3,Four:3,Five:3,rect_Text:3,rect_Lyric:3,CrescendoBegin:3,CrescendoEnd:3,DecrescendoBegin:3,DecrescendoEnd:3,RestM1:4,ClefC:4,ScriptShortFermata:4,ScriptMarcato:4,ScriptPortato:4,s:4,r:4,z:4,Zero:4,Six:4,Seven:4,Eight:4,Nine:4},NOTEHEAD_WIDTHS:w,glyphCenters:M,ONE_D_SEMANTICS:["OctaveShift8va","OctaveShift8vb","OctaveShift8","OctaveShift0","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","vline_BarMeasure","vline_BarTerminal","vline_BarSegment"],SYSTEM_SEMANTIC_TYPES:E,CONFLICTION_GROUPS:I,STAMP_SEMANTICS:C,STAMP_RECTS:{ClefG:[-.0625,-1.125,3.6,8.6],ClefF:[.25,.5625,3.6,3.8],ClefC:[.25,0,3.25,4.5],NoteheadS0:[.0625,0,2.55,1.4],NoteheadS1:[.0625,0,1.8,1.4],NoteheadS2:[.0625,-.0625,1.65,1.35],Dot:[.25,0,.6,.6],Rest0:[0,-.75,3.25,.9],Rest1:[0,-.25,3.25,.9],Rest2:[-.0625,-.1875,1.6,3.375],Rest3:[0,.0625,1.2,2.25],Rest4:[.0625,.5625,1.65,3.375],Rest5:[.0625,.0625,1.95,4.375],Rest6:[.0625,.5625,1.95,5.375],RestM1:[-.4375,-1.5,.75,1.2],AccNatural:[0,0,.9,3.5],AccSharp:[0,0,1.5,3.5],AccDoublesharp:[0,0,1.5,1.5],AccFlat:[0,-.5625,1.2,3.125],AccFlatflat:[.1875,-.5625,1.95,3.125],TimesigC44:[-.0625,0,2.25,2.3],TimesigC22:[-.0625,0,2.25,3.2],TimesigZero:[0,0,1.8,2.2],TimesigOne:[-.125,0,1.5,2.2],TimesigTwo:[0,0,2.2,2.2],TimesigThree:[-.0625,0,1.9,2.4],TimesigFour:[.0625,0,1.95,2.2],TimesigFive:[0,0,1.8,2.3],TimesigSix:[0,0,2,2.4],TimesigSeven:[0,0,1.8,2.2],TimesigEight:[0,0,1.9,2.2],TimesigNine:[0,0,1.9,2.2],One:[-.0625,0,.75,1.6],Two:[0,0,1.2,1.6],Three:[0,0,1.2,1.6],Four:[0,0,1.2,1.6],Five:[0,0,1.2,1.6],OctaveShift8:[2.125,-.1875,4.75,3.6],OctaveShift0:[-.4,0,1.8,4.2],f:[.0625,-.125,2.55,3],p:[-.0625,.25,2.55,2.1],m:[-.125,-.0625,2.4,1.35],n:[-.3125,-.0625,1.95,1.35],r:[0,-.125,1.5,1.5],s:[0,-.0625,1.2,1.35],z:[.0625,0,1.35,1.5],ScriptFermata:[0,0,3.25,3.9],ScriptShortFermata:[0,0,2.4,4.95],ScriptSforzato:[-.0625,0,2.5,1.2],ScriptStaccato:[0,-.0625,.6,.45],ScriptStaccatissimo:[0,0,1.2,2.6],ScriptTurn:[0,0,2.7,1.5],ScriptTrill:[-.125,-.5,3,2.7],ScriptSegno:[0,0,2.4,3.5],ScriptCoda:[0,0,2.7,3.25],ScriptArpeggio:[-.0625,0,1.05,1.8],ScriptPrall:[0,0,2.4,1.2],ScriptMordent:[0,0,2.4,1.5],ScriptMarcato:[0,0,1.2,2.475],ScriptTenuto:[0,-.0625,1.5,.15],ScriptPortato:[0,0,1.5,1.65],PedalStar:[0,0,3.2,3.2],PedalPed:[0,-.25,4.7,2.4]},hashSemanticPoint:_,hashPageSemanticPoint:O,SemanticGraph:SemanticGraph,get SemanticElementType(){return ot},SemanticCluster:SemanticCluster,SemanticClusterSet:class SemanticClusterSet{constructor(e){if(e&&(this.clusters=e.clusters,e.vocab)){const t=e.vocab.map((e,t)=>[t,ot[e]]).filter(([e,t])=>e!==t).reduce((e,[t,s])=>(e[t]=s,e),{});this.clusters.forEach(e=>e.elements.forEach(e=>{Number.isFinite(t[e.type])&&(e.type=t[e.type])}))}}toJSON(){return{__prototype:"SemanticClusterSet",vocab:Object.entries(ot).filter(e=>Number.isFinite(e[1])).map(e=>e[0]),clusters:this.clusters.map(e=>e.toJSON())}}},ELEMENT_TOKEN_NAMES:ht,NOTEHEAD_ELEMENT_TYPES:ft,NOTE_ELEMENT_TYPES:gt,BOS_ELEMENT:kt,fractionToElems:Tt,expandMatrixByMasks:Mt,expandMatrixByMaskTriu:Et,matrixFromGroups:Nt,get EventElementType(){return ps},EventCluster:EventCluster,EventClusterSet:EventClusterSet,recoverJSON:ae,SimpleClass:SimpleClass,PatchMeasure:PatchMeasure,evaluateMeasure:Ke});const js=[B.ClefG,B.ClefF,B.ClefC],Hs=e=>{let t=null;switch(e.tokenType){case B.ClefG:t="Treble";break;case B.ClefF:t="Bass";break;case B.ClefC:t=-1===e.y?"Tenor":"Alto"}return t};var Vs,zs={exports:{}},qs="object"==typeof Reflect?Reflect:null,Gs=qs&&"function"==typeof qs.apply?qs.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)};Vs=qs&&"function"==typeof qs.ownKeys?qs.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var Ws=Number.isNaN||function(e){return e!=e};function Us(){Us.init.call(this)}zs.exports=Us,zs.exports.once=function(e,t){return new Promise(function(s,i){function r(s){e.removeListener(t,n),i(s)}function n(){"function"==typeof e.removeListener&&e.removeListener("error",r),s([].slice.call(arguments))}ii(e,t,n,{once:!0}),"error"!==t&&function(e,t,s){"function"==typeof e.on&&ii(e,"error",t,s)}(e,r,{once:!0})})},Us.EventEmitter=Us,Us.prototype._events=void 0,Us.prototype._eventsCount=0,Us.prototype._maxListeners=void 0;var Ys=10;function Xs(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function Ks(e){return void 0===e._maxListeners?Us.defaultMaxListeners:e._maxListeners}function Zs(e,t,s,i){var r,n,a,o;if(Xs(s),void 0===(n=e._events)?(n=e._events=Object.create(null),e._eventsCount=0):(void 0!==n.newListener&&(e.emit("newListener",t,s.listener?s.listener:s),n=e._events),a=n[t]),void 0===a)a=n[t]=s,++e._eventsCount;else if("function"==typeof a?a=n[t]=i?[s,a]:[a,s]:i?a.unshift(s):a.push(s),(r=Ks(e))>0&&a.length>r&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,o=c,console&&console.warn&&console.warn(o)}return e}function Js(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Qs(e,t,s){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:s},r=Js.bind(i);return r.listener=s,i.wrapFn=r,r}function ei(e,t,s){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?s?[r.listener||r]:[r]:s?function(e){for(var t=new Array(e.length),s=0;s{s=e,i=r,t>=0&&setTimeout(i,t,"timeout")}),s,i]}Object.defineProperty(Us,"defaultMaxListeners",{enumerable:!0,get:function(){return Ys},set:function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Ys=e}}),Us.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Us.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},Us.prototype.getMaxListeners=function(){return Ks(this)},Us.prototype.emit=function(e){for(var t=[],s=1;s0&&(n=t[0]),n instanceof Error)throw n;var a=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw a.context=n,a}var o=r[e];if(void 0===o)return!1;if("function"==typeof o)Gs(o,this,t);else{var c=o.length,l=si(o,c);for(s=0;s=0;n--)if(s[n]===t||s[n].listener===t){a=s[n].listener,r=n;break}if(r<0)return this;0===r?s.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},Us.prototype.listeners=function(e){return ei(this,e,!0)},Us.prototype.rawListeners=function(e){return ei(this,e,!1)},Us.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):ti.call(e,t)},Us.prototype.listenerCount=ti,Us.prototype.eventNames=function(){return this._eventsCount>0?Vs(this._events):[]};class AsyncQueue extends zs.exports.EventEmitter{constructor(){super(),this.working=!1,this.working=!1,this.tasks=[],process.nextTick(()=>{this.emit("idle")})}async _digest(e){this.working=!0;const[t,s,i,r]=e;await t(s).then(i,r),this.tasks.length>0?await this._digest(this.tasks.shift()):(this.working=!1,this.emit("idle"))}addTask(e,{timeout:t=6e5}={}){const[s,i,r]=ri({timeout:t});return this.working?this.tasks.push([...e,i,r]):this._digest([...e,i,r]),s}}class ZeroClient{constructor(e=console){this.queue=new AsyncQueue,this.logger=e}bind(e){e&&(this.url=e),this.socket=new n.Request({sendTimeout:15e3,receiveTimeout:3e5}),this.socket.connect(this.url)}__request(e){let t=0;const s=async e=>{try{return this.socket.closed&&this.bind(),await this.socket.send(r.pack(e)).then(()=>this.socket.receive())}catch(i){if(t<2)return t++,console.log(`请求失败,${i.stack}`),console.error(`3s后重试第${t}次`),this.socket.close(),await new Promise(e=>setTimeout(e,3e3)),s(e);throw i}};return s(e)}async request(e,t=null,s=null){const[i,n]=Array.isArray(t)?[t,s]:[void 0,t],a={method:e};return i&&(a.args=i),n&&(a.kwargs=n),this.queue.addTask([async e=>{const[t]=await this.__request(e),s=r.unpack(t);return 0===s.code?s.data:Promise.reject(s.msg)},a])}}class PyProcessor extends ZeroClient{constructor(e,t={},s=console){super(s),this.retryCount=0,this.retryDelay=3e3,this.scriptPath=e,this.options=t}async bind(e){const t=e||await a.getPortPromise({port:12022,stopPort:12122}),i=s.defaultsDeep({args:[...this.options.args||[],"-p",`${t}`]},this.options);this.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`),this.pyShell=new o.PythonShell(this.scriptPath,i),this.pyShell.stdout.on("data",e=>this.logger.info(e)),this.pyShell.on("pythonError",e=>this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`,e)),this.pyShell.on("stderr",e=>this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`,e)),this.pyShell.on("error",e=>this.logger.error(`[python-shell]: ${this.scriptPath} error:`,e)),this.pyShell.on("close",()=>{this.retryCount<5&&(this.retryCount++,this.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`),setTimeout(()=>{this.bind()},this.retryDelay))}),super.bind(`tcp://127.0.0.1:${t}`)}}var ni={},ai=function(e){return e instanceof Buffer},oi={exports:{}},ci={exports:{}};"function"==typeof Object.create?ci.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:ci.exports=function(e,t){e.super_=t;var s=function(){};s.prototype=t.prototype,e.prototype=new s,e.prototype.constructor=e};try{var li=require("util");if("function"!=typeof li.inherits)throw"";oi.exports=li.inherits}catch(e){oi.exports=ci.exports}!function(e){var t=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),s={},i=0;i=a)return e;switch(e){case"%s":return String(r[i++]);case"%d":return Number(r[i++]);case"%j":try{return JSON.stringify(r[i++])}catch(e){return"[Circular]"}default:return e}}),c=r[i];i=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),m(s)?i.showHidden=s:s&&e._extend(i,s),g(i.showHidden)&&(i.showHidden=!1),g(i.depth)&&(i.depth=2),g(i.colors)&&(i.colors=!1),g(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=a),c(i,t,i.depth)}function a(e,t){var s=n.styles[t];return s?"["+n.colors[s][0]+"m"+e+"["+n.colors[s][1]+"m":e}function o(e,t){return e}function c(t,s,i){if(t.customInspect&&s&&b(s.inspect)&&s.inspect!==e.inspect&&(!s.constructor||s.constructor.prototype!==s)){var r=s.inspect(i,t);return p(r)||(r=c(t,r,i)),r}var n=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(p(t)){var s="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(s,"string")}if(d(t))return e.stylize(""+t,"number");if(m(t))return e.stylize(""+t,"boolean");if(f(t))return e.stylize("null","null")}(t,s);if(n)return n;var a=Object.keys(s),o=function(e){var t={};return e.forEach(function(e,s){t[e]=!0}),t}(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(s)),S(s)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return l(s);if(0===a.length){if(b(s)){var v=s.name?": "+s.name:"";return t.stylize("[Function"+v+"]","special")}if(y(s))return t.stylize(RegExp.prototype.toString.call(s),"regexp");if(x(s))return t.stylize(Date.prototype.toString.call(s),"date");if(S(s))return l(s)}var k,T="",w=!1,E=["{","}"];(h(s)&&(w=!0,E=["[","]"]),b(s))&&(T=" [Function"+(s.name?": "+s.name:"")+"]");return y(s)&&(T=" "+RegExp.prototype.toString.call(s)),x(s)&&(T=" "+Date.prototype.toUTCString.call(s)),S(s)&&(T=" "+l(s)),0!==a.length||w&&0!=s.length?i<0?y(s)?t.stylize(RegExp.prototype.toString.call(s),"regexp"):t.stylize("[Object]","special"):(t.seen.push(s),k=w?function(e,t,s,i,r){for(var n=[],a=0,o=t.length;a60)return s[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+s[1];return s[0]+t+" "+e.join(", ")+" "+s[1]}(k,T,E)):E[0]+T+E[1]}function l(e){return"["+Error.prototype.toString.call(e)+"]"}function u(e,t,s,i,r,n){var a,o,l;if((l=Object.getOwnPropertyDescriptor(t,r)||{value:t[r]}).get?o=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(o=e.stylize("[Setter]","special")),M(i,r)||(a="["+r+"]"),o||(e.seen.indexOf(l.value)<0?(o=f(s)?c(e,l.value,null):c(e,l.value,s-1)).indexOf("\n")>-1&&(o=n?o.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+o.split("\n").map(function(e){return" "+e}).join("\n")):o=e.stylize("[Circular]","special")),g(a)){if(n&&r.match(/^\d+$/))return o;(a=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+o}function h(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function f(e){return null===e}function d(e){return"number"==typeof e}function p(e){return"string"==typeof e}function g(e){return void 0===e}function y(e){return v(e)&&"[object RegExp]"===k(e)}function v(e){return"object"==typeof e&&null!==e}function x(e){return v(e)&&"[object Date]"===k(e)}function S(e){return v(e)&&("[object Error]"===k(e)||e instanceof Error)}function b(e){return"function"==typeof e}function k(e){return Object.prototype.toString.call(e)}function T(e){return e<10?"0"+e.toString(10):e.toString(10)}e.debuglog=function(t){if(g(i)&&(i=process.env.NODE_DEBUG||""),t=t.toUpperCase(),!r[t])if(new RegExp("\\b"+t+"\\b","i").test(i)){var s=process.pid;r[t]=function(){var i=e.format.apply(e,arguments);console.error("%s %d: %s",t,s,i)}}else r[t]=function(){};return r[t]},e.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=h,e.isBoolean=m,e.isNull=f,e.isNullOrUndefined=function(e){return null==e},e.isNumber=d,e.isString=p,e.isSymbol=function(e){return"symbol"==typeof e},e.isUndefined=g,e.isRegExp=y,e.isObject=v,e.isDate=x,e.isError=S,e.isFunction=b,e.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},e.isBuffer=ai;var w=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function M(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.log=function(){var t,s;console.log("%s - %s",(t=new Date,s=[T(t.getHours()),T(t.getMinutes()),T(t.getSeconds())].join(":"),[t.getDate(),w[t.getMonth()],s].join(" ")),e.format.apply(e,arguments))},e.inherits=oi.exports,e._extend=function(e,t){if(!t||!v(t))return e;for(var s=Object.keys(t),i=s.length;i--;)e[s[i]]=t[s[i]];return e};var E="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function N(e,t){if(!e){var s=new Error("Promise was rejected with a falsy value");s.reason=e,e=s}return t(e)}e.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(E&&e[E]){var s;if("function"!=typeof(s=e[E]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(s,E,{value:s,enumerable:!1,writable:!1,configurable:!0}),s}function s(){for(var t,s,i=new Promise(function(e,i){t=e,s=i}),r=[],n=0;n>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&mi.rotl(e,8)|4278255360&mi.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s>>6*(3-r)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s>>6-2*i);return t}},di.exports=mi;var pi={utf8:{stringToBytes:function(e){return pi.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(pi.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s>5]|=128<<24-r%32,i[15+(r+64>>>9<<4)]=r;for(var h=0;h>>31}var x=(a<<5|a>>>27)+u+(n[y]>>>0)+(y<20?1518500249+(o&c|~o&l):y<40?1859775393+(o^c^l):y<60?(o&c|o&l|c&l)-1894007588:(o^c^l)-899497514);u=l,l=c,c=o<<30|o>>>2,o=a,a=x}a+=m,o+=f,c+=d,l+=p,u+=g}return[a,o,c,l,u]}(i));return r&&r.asBytes?n:r&&r.asString?s.bytesToString(n):e.bytesToHex(n)};i._blocksize=16,i._digestsize=20,fi.exports=i}();var yi=fi.exports;const vi=({page:e,backgroundImage:t,detection:s,imageSize:i,position:r})=>{const n=(s.phi2-s.phi1)/s.interval,a=i.height/s.interval,o=e.systems[e.systems.length-1],c=r?r.y:(o?o.top+o.height:0)+4,l=r?r.x:4,u=[0,...Array(s.middleRhos.length-1).fill(0).map((e,t)=>(s.middleRhos[t]+s.middleRhos[t+1])/2/s.interval)],h=[n],m=u.map((e,t)=>new Staff({top:e,height:(u[t+1]||a)-e,staffY:s.middleRhos[t]/s.interval-e,measureBars:h})),f={x:-s.phi1/s.interval,y:0,width:i.width/s.interval,height:i.height/s.interval};return new System({staves:m,left:l,top:c,width:n,backgroundImage:t,imagePosition:f,measureBars:h})};async function xi(e,{format:t="webp",maxHeight:s=1080,quality:i=80}={}){let r=await(async e=>"string"==typeof e?/^https?:\/\//.test(e)?(await T.default(e,{responseType:"buffer",decompress:!0,https:{rejectUnauthorized:!1}})).body:/^data:image\//.test(e)?Buffer.from(e.split(",")[1],"base64"):Buffer.from(e):e)(e);const n=await new Promise(e=>{k.default(r).resize({width:s,height:s,fit:"inside",withoutEnlargement:!0}).toFormat(t,{quality:i}).toBuffer((t,s)=>{e(s)})});return{buffer:n,filename:`${b.default.ArrayBuffer.hash(n)}.${t}`}}globalThis.OffscreenCanvas=globalThis.OffscreenCanvas||c.Canvas,globalThis.Image=globalThis.Image||c.Image,globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Si=32,bi={viewportHeight:256,viewportUnit:8},ki=192,Ti=8,wi={viewportHeight:192,viewportUnit:8};const Mi=e=>Promise.all(e.map(e=>e())),Ei=async(e,t,{paddingLeft:s=0,scaling:i=1,spec:r})=>{if(!e||!e.backgroundImage)return null;const n=e.staves[t];if(!n)return null;const a=r.viewportHeight/r.viewportUnit/2,o=e.imagePosition.width*r.viewportUnit,l=e.imagePosition.height*r.viewportUnit,u=e.imagePosition.x*r.viewportUnit+s,h=(e.imagePosition.y-(n.top+n.staffY-a))*r.viewportUnit,m=new c.Canvas(Math.round(o+u)*i,r.viewportHeight*i),f=m.getContext("2d");return f.fillStyle="white",f.fillRect(0,0,m.width,m.height),f.drawImage(await c.loadImage(e.backgroundImage),u*i,h*i,o*i,l*i),m};async function Ni({system:e,staff:t,staffIndex:s}){const i=await Ei(e,s,{paddingLeft:Si,spec:wi});t.backgroundImage=i.toBufferSync("png"),t.imagePosition={x:-32/wi.viewportUnit,y:t.staffY-wi.viewportHeight/2/wi.viewportUnit,width:i.width/wi.viewportUnit,height:i.height/wi.viewportUnit}}async function Ii({system:e,staff:t,staffIndex:s,gaugeImage:i,pyClients:r}){const n=(await Ei(e,s,{paddingLeft:Si,spec:bi,scaling:2})).toBufferSync("png"),a=(e.middleY-(t.top+t.staffY))*bi.viewportUnit+bi.viewportHeight/2,{buffer:o,size:c}=await r.predictScoreImages("gaugeRenderer",[n,i,a]);t.backgroundImage=o,t.imagePosition={x:-32/bi.viewportUnit,y:t.staffY-c.height/2/bi.viewportUnit,width:c.width/bi.viewportUnit,height:c.height/bi.viewportUnit},t.maskImage=null}async function Ci({staff:e,staffIndex:t,maskImage:s}){const i=await c.loadImage(s);e.maskImage=s,e.imagePosition={x:-32/Ti,y:e.staffY-ki/2/Ti,width:i.width/Ti,height:i.height/Ti}}async function _i({score:e,staffIndex:t,system:s,staff:i,graph:r}){r.offset(-32/wi.viewportUnit,0),s.assignSemantics(t,r),i.assignSemantics(r),i.clearPredictedTokens(),e.assembleSystem(s,e.settings?.semanticConfidenceThreshold||1)}function Oi(e,t){[[e.source,"url"],...e.systems.map(e=>[[e,"backgroundImage"],...e.staves.map(e=>[[e,"backgroundImage"],[e,"maskImage"]]).flat()]).flat()].map(([e,s])=>{e[s]=t(e[s])})}class OMRProgress{constructor(e){this.state={},this.onChange=e}setTotal(e,t){this.state[e]=this.state[e]||{total:t,finished:0}}increase(e,t=1){(this.state[e]||{finished:0}).finished+=t,this.onChange(this.state)}}const Bi=new l.WeakLRUCache,Ai={get:async e=>Bi.getValue(e),async set(e,t){Bi.setValue(e,t)}},Pi=async e=>{if(e instanceof Buffer||"string"==typeof e&&(/^https?:\/\//.test(e)||/^data:image\//.test(e))){return`data:image/webp;base64,${(await xi(e)).buffer.toString("base64")}`}return e},Ri=e=>{const t=Math.random();let s=0;for(let i=0;it)return i;return e.length-1},Di=(e,t=.9)=>{const s=e.map(e=>Math.log(e)*t).map(Math.exp),i=s.reduce((e,t)=>e+t,0);return s.map(e=>e/i)},Fi=e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return e;const t=e.predisposition?.divisionVector?Di(e.predisposition.divisionVector):null,s=e.predisposition?.dotsVector?Di(e.predisposition.dotsVector):null;return new EventTerm({...e,predisposition:{...e.predisposition,divisionVector:t,dotsVector:s}})};class MeasureRectification{constructor(e){Object.assign(this,e)}toString(){return this.events.map(e=>{if(!e)return"";const{division:t="",dots:s=""}=e;return`${t}|${s}`}).join(",")}static default(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;const t=e.predisposition.divisionVector?e.division:void 0,s=e.predisposition.dotsVector?e.dots:void 0;return{id:e.id,division:t,dots:s}})})}static roll(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;let t,s;return e.predisposition.divisionVector&&(t=Ri(e.predisposition.divisionVector)),e.predisposition.dotsVector&&(s=Ri(e.predisposition.dotsVector)),{id:e.id,division:t,dots:s}})})}}const Li=new l.WeakLRUCache,$i={get:async e=>Li.getValue(e),async set(e,t){Li.setValue(e,t)},batchGet:async e=>e.map(e=>Li.getValue(e))};var ji;!function(e){e[e.ErrorOnly=0]="ErrorOnly",e[e.NotFine=1]="NotFine",e[e.Imperfect=2]="Imperfect"}(ji||(ji={}));const Hi=async(e,t,s,i,r=ji.NotFine,n=0,a)=>{const o=e.filter(({evaluation:e})=>!e||((e,t)=>{switch(t){case ji.ErrorOnly:return e.error;case ji.Imperfect:return!e.perfect}return!e.fine})(e,r));s?.write(".".repeat(o.length)),s?.write("\b".repeat(o.length));const c=o.length;let l=0;for(const e of o){const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups;const r=await Rs(s,{picker:e.picker,...i});s.applySolution(r);const o=Ke(s),u=!e.evaluation||o.fine>e.evaluation.fine||o.qualityScore>e.evaluation.qualityScore&&o.fine===e.evaluation.fine;u&&(e.evaluation=o,Object.assign(e.current,s)),t(e.current,o,u),l++,a?.(e.current,o,u,{pass:n,remaining:c-l,total:c})}return o.length&&s?.write("\n"),o.length};globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Vi=parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS||"30"),zi=parseInt(process.env.BASE_QUOTA_FACTOR||"40"),qi=parseInt(process.env.RECTIFICATION_QUOTA_FACTOR||"80"),Gi=(e,t,s)=>Math.min(Math.ceil((e+1)*t*Math.log(e+2)),Math.ceil(s*Math.min(1,(24/(e+1))**2)));async function Wi(e,{solver:t,quotaMax:s=1e3,quotaFactor:i=zi,solutionStore:r=$i,ignoreCache:n=!1,logger:a}={}){let o=0,c=0;return a?.info(`[solveMeasures] begin, measure total: ${e.length}.`),await Promise.all(e.map(async l=>{if(!n){const e=await r.get(l.regulationHash);if(e)return l.applySolution(e),void++o}const u=Gi(l.events.length,i,s);await l.regulate({policy:"equations",quota:u,solver:t});const h=Ke(l);h.error||r.set(l.regulationHash0,{...l.asSolution(),priority:-l?.solutionStat?.loss}),h.perfect&&++c,a?.info(`[solveMeasures] measure[${l.measureIndex}/${e.length}] regulated: ${h.perfect?"solved":h.error?"error":"issue"}, ${l.regulationHash}`)})),a?.info(`[solveMeasures] ${o}/${e.length} cache hit, ${c} solved.`),{cached:o,computed:e.length-o,solved:c}}const Ui=async(e,{solver:t,quotaMax:s=4e3})=>{let i=Ke(e),r=e.asSolution();const n=Gi(e.events.length,qi,s);let a=0;for(const s of function*(e){const t=new Set,s=MeasureRectification.default(e.events);t.add(s.toString()),yield s;let i=0,r=e.events;for(;i<100;){i&&i%10==0&&(r=r.map(Fi));const e=MeasureRectification.roll(r),s=e.toString();t.has(s)?++i:(i=0,t.add(s),yield e)}}(e)){const o=await ys.regulateMeasureWithRectification(e,s,{solver:t,quota:n}),c=e.deepCopy();c.applySolution(o);const l=Ke(c);if((l.perfect>i.perfect||l.error=i.perfect&&o.priority>r.priority)&&(i=l,r=o),l.perfect)break;if(++a,a>Vi)break}return r};const Yi=async(e,{solver:t,solutionStore:s=$i,logger:i,quotaMax:r=240,quotaFactor:n=16})=>{e.assemble();const a=e.spartito||e.makeSpartito(),o=a.measures.filter(e=>!e.regulated);await Wi(o,{solver:t,quotaMax:r,quotaFactor:n,solutionStore:s,logger:i}),console.assert(e.spartito?.regulated,"doSimpleRegulate: regulation incomplete:",a.measures.filter(e=>!e.regulated).length)};console.info("%cstarry-omr%c v1.0.0 2026-04-23T11:20:50.919Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;"),exports.DefaultSolutionStore=$i,exports.PyClients=class PyClients{constructor(e,t=console){this.options=e,this.logger=t,this.clients=new Map}async getClient(e){if(this.clients.has(e))return this.clients.get(e);const[t,s,i]=ri(),r=this.options[e];if(!r)throw new Error(`no config for client \`${e}\` found`);try{if("string"==typeof r){const e=new ZeroClient;e.bind(r),s(e)}else{const{scriptPath:e,...t}=r,i=new PyProcessor(e,t,this.logger);await i.bind(`${await ui()}`),s(i)}this.logger.info(`PyClients: ${e} started`)}catch(t){this.logger.error(`PyClients: ${e} start fail: ${JSON.stringify(t)}`),i(t)}return this.clients.set(e,t),t}async checkHost(e){return(await this.getClient(e)).request("checkHost")}async warmup(){const e=Object.keys(this.options);await Promise.all(e.map(e=>this.getClient(e)))}async predictScoreImages(e,...t){const s=e.split("$")[0],i=await this.getClient(s);let r=null;this.logger.info(`[predictor]: ${e} py start..`);const n=Date.now();switch(e){case"layout":r=await i.request("predictDetection",t);break;case"layout$reinforce":r=await i.request("predictReinforce",t);break;case"gauge":case"mask":r=await i.request("predict",t,{by_buffer:!0});break;case"semantic":case"textLoc":r=await i.request("predict",t);break;case"textOcr":case"brackets":case"topo":case"gaugeRenderer":case"jianpu":r=await i.request("predict",...t);break;default:this.logger.error(`[predictor]: no predictor ${e}`)}return this.logger.info(`[predictor]: ${e} py duration: ${Date.now()-n}ms`),r}},exports.abstractOMRStats=e=>{const{costTotal:t,pagesCostTotal:s,pagesTotal:i}=e.reduce((e,t)=>({costTotal:e.costTotal+t.cost,pagesCostTotal:e.pagesCostTotal+t.pagesCost,pagesTotal:e.pagesTotal+t.pages}),{costTotal:0,pagesCostTotal:0,pagesTotal:0});return{costTotal:t,costPerPage:i?t/i:null,pagesTotal:i,scoreN:e.length}},exports.abstractRegulationBeadStats=e=>{const{totalCost:t,pickerCost:s,measureN:i,timeN:r}=e.reduce((e,t)=>({totalCost:e.totalCost+t.totalCost,pickerCost:e.pickerCost+t.pickerCost,measureN:e.measureN+t.measures.computed,timeN:e.timeN+t.measures.tryTimes}),{totalCost:0,pickerCost:0,measureN:0,timeN:0}),n=i>0?t/i:null,a=r>0?t/r:null,{cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}=e.reduce((e,t)=>({cached:e.cached+t.measures.cached,simple:e.simple+t.measures.simple,computed:e.computed+t.measures.computed,tryTimes:e.tryTimes+t.measures.tryTimes,solved:e.solved+t.measures.solved,issue:e.issue+t.measures.issue,fatal:e.fatal+t.measures.fatal}),{cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0});return{scoreN:e.length,totalCost:t,pickerCost:s,costPerMeasure:n,costPerTime:a,cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}},exports.abstractRegulationStats=e=>{const{baseCostTotal:t,topoCostTotal:s,baseMeasures:i,topoMeasures:r}=e.reduce((e,t)=>({baseCostTotal:e.baseCostTotal+t.baseCost,topoCostTotal:e.topoCostTotal+t.topoCost,baseMeasures:e.baseMeasures+t.baseMeasures.computed,topoMeasures:e.topoMeasures+(t.topoMeasures.solved+t.topoMeasures.issue+t.topoMeasures.fatal)}),{baseCostTotal:0,topoCostTotal:0,baseMeasures:0,topoMeasures:0}),n=i>0?t/i:null,a=r>0?s/r:null,{cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}=e.reduce((e,t)=>({cached:e.cached+t.baseMeasures.cached,baseComputed:e.baseComputed+t.baseMeasures.computed,baseSolved:e.baseSolved+t.baseMeasures.solved,topoSolved:e.topoSolved+t.topoMeasures.solved,topoIssue:e.topoIssue+t.topoMeasures.issue,topoFatal:e.topoFatal+t.topoMeasures.fatal}),{cached:0,baseComputed:0,baseSolved:0,topoSolved:0,topoIssue:0,topoFatal:0});return{scoreN:e.length,baseCostTotal:t,topoCostTotal:s,baseCostPerMeasure:n,topoCostPerMeasure:a,cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}},exports.constructSystem=vi,exports.convertImage=xi,exports.doRegulate=async(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r})=>{t?.logger?.info(`[doRegulate] score: ${e.title}`),e.spartito=void 0,e.assemble();const n=e.makeSpartito();n.measures.forEach(t=>e.assignBackgroundForMeasure(t));const a=Date.now(),o=await Wi(n.measures,{solver:s,quotaMax:1e3,solutionStore:i,logger:t?.logger}),c=Date.now(),l=t?await async function(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r}){t.logger.info(`[RegulateWithTopo] regulate score: ${e.title}, measures: ${e.spartito.measures.length}`);const n=e.spartito.measures.filter(e=>!Ke(e).perfect);if(t.logger.info(`[RegulateWithTopo] basic issues: ${n.length}`),0===n.length)return{solved:0,issue:0,fatal:0};const a=[].concat(...n.map(e=>e.createClusters())),o=await t.predictScoreImages("topo",{clusters:a});console.assert(o.length===a.length,"prediction number mismatch:",a.length,o.length),a.forEach((e,t)=>{const s=o[t];console.assert(s,"no result for cluster:",e.index),e.assignPrediction(s)}),n.forEach(e=>{const t=a.filter(t=>t.index===e.measureIndex);e.applyClusters(t);const{matrixH:s}=ys.estiamteMeasure(e);s.forEach((t,s)=>t.forEach((t,i)=>{e.matrixH[s][i]=.9*e.matrixH[s][i]+t*(1-.9)}))});const c=[],l=[];await Promise.all(n.map(async e=>{const n=e.regulationHash0,a=await Ui(e,{solver:s});a&&(e.applySolution(a),i.set(n,a),i.set(e.regulationHash,e.asSolution()),t.logger.info(`[RegulateWithTopo] solutionStore set: ${e.measureIndex}, ${n}, ${e.regulationHash}`));const o=Ke(e);r?.({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:o.error?2:1}),o.perfect?c.push(e.measureIndex):o.error&&l.push(e.measureIndex)}));const u=n.length-c.length-l.length;return t.logger.info(`[RegulateWithTopo] score: ${e.title}, solved/issue/fatal: ${c.length}/${u}/${l.length}`),c.length&&t.logger.info(`[RegulateWithTopo] solved measures: ${c.join(", ")}`),l.length&&t.logger.info(`[RegulateWithTopo] error measures: ${l.join(", ")}`),{solved:c.length,issue:u,fatal:l.length}}(e,{pyClients:t,solver:s,solutionStore:i,onSaveIssueMeasure:r}):void 0;return{baseCost:c-a,topoCost:Date.now()-c,baseMeasures:o,topoMeasures:l,qualityScore:n.qualityScore}},exports.doSimpleRegulate=Yi,exports.encodeFindResource=function(e){const t=e.spartito.perform(),s=e.systems.map(e=>e.staves.map(e=>e?.maskImage)).flat(),i=s.filter(Boolean).length>s.length/2,r={},n=new Map,a=new Map,o=new Map;r.unitSize=e.unitSize,r.title={title:e.title};const c=e.pages[0].tokens;if(Array.isArray(c)&&c.length>0){const[t,...s]=c.filter(e=>e.type===B.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(r.title.title=t.text,r.title.t={size:t.fontSize}),s?.length>0&&(s.sort((e,t)=>e.y-t.y),r.title.subtitle=s.map(e=>e.text).join("\n"),r.title.s={size:s.reduce((e,t)=>e+t.fontSize,0)/s.length});const i=c.filter(t=>t.type===B.Text&&"Author"===t.textType&&t.x>e.pages[0].width/2);i.length>0&&(r.title.composer=i.map(e=>e.text).join("\n"),r.title.c={size:i.reduce((e,t)=>e+t.fontSize,0)/i.length})}if(r.page={w:e.pages[0].width,h:e.pages[0].height},r.pages=e.pages.map(t=>{const s=t.source.dimensions.width/t.source.interval,i=t.source.dimensions.height/t.source.interval,[r,n,a,o]=t.source.matrix;return{src:t.source.url,w:s,h:i,x:0,y:0,l1:e.systems.indexOf(t.systems[0]),ls:t.systems.length,matrix:[r,n,a,o,-.5*r*s+-.5*i*a+.5*t.width||0,-.5*n*s+-.5*i*o+.5*t.height||0]}}),r.parts=[],r.lines=[],i){const t=e.staffLayout.partGroups.map(e=>e.range[0]===e.range[1]?[e.range[0]]:e.range),s=e.getTokenMap(),i=[];for(const[c,l]of t.entries()){const u=t.slice(0,c).flat().length,h={measures:[]};e.systems.forEach((r,m)=>{const f=r.staves.slice(),d=t.flat().map(e=>1<m+1&&(p[m+1]=p[m]);continue}const g=[];for(const e of l){const t=d[e];t&&g.push(...t.measures[m].getChords().map(t=>({chord:t,staffIndexInPart:e-u})))}let y=0;const v=p[m],x=[];g.forEach(({staffIndexInPart:l,chord:u})=>{const h=[];let d=u.tip?u.tip.x:u.right-u.left/2;u.noteIds.forEach((e,i)=>{const r=s.get(e),m=`n_${t.length>1?c+"_":""}${f}_${y}`;y++,n.set(r.id,m),a.set(r.id,(r.left+r.right)/2-v),o.set(r.id,l+1),h.push({line:2*-u.ys[i],id:m,staff:l+1,x:(r.left+r.right)/2-d})}),i[f]=i[f]||[],i[f].push(d-v);const p=e.spartito.measures[r.headMeasureIndex+m].events.filter(e=>e.noteIds.some(e=>u.noteIds.includes(e)));x.push({elems:h,x:d-v,type:2**u.division,...p.some(e=>e.grace)?{grace:{}}:{}})}),h.measures[f]={w:p[m+1]-p[m],staves:l.length,notes:x}}});let m=null;e.spartito.measures.forEach((s,i)=>{const r=e.spartito.measureIndexMapping[i],n=s.contexts.flat().filter(e=>js.includes(e.tokenType)&&l.includes(e.staff)).map(e=>{const s=t.find(t=>t.includes(e.staff));return{x:e.x,clef:Hs(e),staff:s.indexOf(e.staff)+1,tick:e.tick}});n.length>0&&h.measures[r]&&(h.measures[r].clefs=n);const a=s.basics.filter((e,t)=>1<0&&(r.parts[c]=h)}e.systems.forEach((s,i)=>{const n=[],a=s.staves[0],o=s.staves[s.staves.length-1],c=a.top+a.staffY-2,l=o.top+o.staffY-2,u=s.staves.slice(),h=t.flat().map(e=>!(1<h.find(t=>t?.index===e)||null),a=t.map((e,t)=>[t,!e]).filter(e=>e[1]);let o=null;a.length>0&&(o=Object.fromEntries(a.map(e=>[e[0]+1,{hide:e[1]}])));let l=0,u=0;const f=t.filter(e=>!!e);if(f.length>0){const e=f[0],t=f[f.length-1],s=e.top+e.staffY-2,i=t.top+t.staffY-2;l=s-c,u=i-s+4}const{list:d,last:p}=t.reduce((e,t,s)=>(null===e.last||null===t?0===s&&l>0?e.list.push(l-4):e.list.push(0):e.list.push(t.top+t.staffY-(e.last.top+e.last.staffY)-4),e.last=t||e.last,e),{last:m,list:[]});m=p;const g=t.map(e=>{if(e?.maskImage){const t=e.imagePosition;return{src:e.maskImage,x:t.x,y:s.top+e.top+t.y-(s.top+e.top+e.staffY-2),w:t.width,h:t.height}}return null}),y=e.spartito.measures[s.headMeasureIndex];n.push({distances:d,imgs:g,y:l,staves:r.length,parti:i,height:u,...o?{details:o}:{},clef:Object.fromEntries(e.spartito.measures[s.headMeasureIndex]?.contexts.flat().filter(e=>js.includes(e.tokenType)&&r.includes(e.staff)).map(e=>[e.staff,Hs(e)])),fifths:y.basics.filter((e,t)=>1<e.spartito.measureIndexMapping[s.headMeasureIndex+i]).filter(e=>Number.isFinite(e));r.lines[i]={m1:f[0],m2:f.length>0?f[f.length-1]+1:void 0,x:s.left,y:s.top+c,w:s.measureBars[s.measureBars.length-1],h:l-c+4,lineStaves:n}});const c={0:"default",1:"brace",2:"bracket",3:"square"},l=Ee(e.staffLayoutCode),u=l.partGroups.map(e=>({sort:e.range[0],part:e})).sort((e,t)=>e.sort-t.sort).map(e=>e.part);r.groups=l.groups.filter(e=>0!==e.group.type).map((e,t)=>({type:c[e.group.type],p1:u.findIndex(t=>t.range.includes(e.range[0])),p2:u.findIndex(t=>t.range.includes(e.range[e.range.length-1]))})).filter(e=>"default"!==e.type)}let l;if(t&&(r.measInfo=t.notation.measures.map((e,t)=>{const s=new Map;return e.notes.forEach(e=>{s.set(e.tick,[...s.get(e.tick)||[],a.get(e.id)])}),Array.from(s.entries()).sort((e,t)=>+e[0]-t[0]).reduce((e,t,s)=>{const i=t[1].find(t=>t>e.last)||t[1][0];return e.list.push(i),e.last=i,e},{last:null,list:[]}).list.filter(Number.isFinite)})),t){l={};const s=new Map;let i,r;t.notation.measures.forEach((e,t)=>{const{numerator:s,denominator:n}=e.timeSignature;l.beats||l.beatsUnit||(l.beats=s,l.beatsUnit=n,i=s,r=n),l.beatInfos=l.beatInfos||[],i===s&&r===n||(i=s,r=n,l.beatInfos.push({tick:e.tick,beats:s,beatsUnit:n})),l.tempos=l.tempos||[],e.events.forEach(t=>{"meta"===t.data.type&&"setTempo"===t.data.subtype&&l.tempos.push({tick:e.tick,tempo:t.data.microsecondsPerBeat})})}),l.measures=t.notation.measures.reduce((e,t,i)=>{const r=Array.from(new Set(t.notes.map(e=>e.tick))).sort((e,t)=>e-t);return t.notes.forEach(e=>{s.set(e.id,r.indexOf(e.tick))}),e[t.tick]={measure:i,duration:t.duration,note_ticks:r},e},{}),l.measureInfos=t.notation.measures.map((e,t)=>({number:String(t+1),fifths:e.keySignature,beats:e.timeSignature.numerator,beatUnit:e.timeSignature.denominator}));const a=t.notation.toPerformingMIDI(t.notation.measures.map((e,t)=>t+1)).tracks,{partGroups:c}=e.staffLayout;let u=a.map((t,s)=>{const i=c[s].key;let r;switch(i){case"vi":case"vi1":case"vi2":r=40;break;case"viola":r=42;break;case"vo":r=55;break;case"basso":r=71;break;default:r=0}return{program:r,channel:s,name:e.instrumentDict[i]??"Piano",track:t}});if(c.some(e=>e.group.grand)){const t=/l\.?h\.?|左手|left hand/i,s=/r\.?h\.?|右手|right hand/i,i=Object.entries(e.instrumentDict).filter(([e,i])=>t.test(i)||s.test(i)).map(([e,s])=>({key:e,hand:t.test(s)?"left":"right"}));let r,n=null;if(2===i.length&&i[0].hand!==i[1].hand){const t=i.find(e=>"left"===e.hand),s=i.find(e=>"right"===e.hand);n=[e.staffLayout.staffIds.findIndex(e=>e===s?.key),e.staffLayout.staffIds.findIndex(e=>e===t?.key)],r=c.findIndex(e=>e.range[0]<=Math.min(...n)&&e.range[1]>=Math.max(...n))}if(Number.isFinite(r)&&r>-1){const e=u[r],t=[];e.track.forEach(e=>{Number.isFinite(e.staff)&&(t[e.staff]||(t[e.staff]=[]),t[e.staff].push(e)),"meta"===e.type&&t.forEach(t=>{t.push(e)})}),u.splice(r,1,t.filter(Boolean).map(t=>({...e,track:t}))),u=u.flat(),l.rightHandTrack=n[0],l.leftHandTrack=n[1]}else u.sort((e,t)=>e===u[r]?-1:0)}l.tracks=u.map(({program:e,channel:t,name:s})=>({program:e,channel:t,name:s}));const h=u.map(({track:e})=>{const t=new Map;return e.map(e=>{if("noteOn"===e.subtype&&t.set(e.noteNumber,e),"noteOff"===e.subtype){const s=t.get(e.noteNumber);s?.noteNumber===e.noteNumber&&(s.duration=e.ticks-s.ticks)}return e})}),m=new Map(Object.entries(l.measures).map(([e,t])=>[t.measure,+e]));l.events=h.map((e,t)=>e.filter(e=>"channel"===e.type).map(e=>{e?.ids?.[0]&&(e.numId=n.get(e.ids[0]));let i=[0,0,0];switch(e.subtype){case"noteOn":i=[144|e.channel,e.noteNumber,e.velocity];break;case"noteOff":i=[128|e.channel,e.noteNumber,e.velocity?e.velocity:0];break;case"noteAftertouch":i=[160|e.channel,e.noteNumber,e.amount];break;case"controller":i=[176|e.channel,e.controllerType,e.value];break;case"programChange":i=[192|e.channel,e.programNumber,0];break;case"channelAftertouch":i=[208|e.channel,e.amount,0];break;case"pitchBend":i=[224|e.channel,255&e.value,e.value>>7&255];break;default:throw new Error("unhandled event subtype:"+e.subtype)}return{..."noteOn"===e.subtype?{id:n.get(e?.ids?.[0])}:{},tick:e.ticks,channel:e.channel,duration:e.duration,track:t,event:i,elem_ids:e?.ids.map(e=>n.get(e)),measure:e.measure-1,meas_start_tick:m.get(e.measure-1),staff:o.get(e.ids[0]),note:s.get(e.ids[0])}})).flat(1).sort((e,t)=>{for(const s of["tick","measure","track"])if(e[s]!==t[s])return e[s]-t[s];return 0})}return{scoreJson:r,midiJson:l}},exports.evaluateScoreQuality=async(e,t)=>(e.spartito?.regulated||await Yi(e,t),e.spartito.regulated?e.spartito.qualityScore:null),exports.getScoreJsonImages=e=>[...e.pages.map(e=>e?.src),...e.lines.map(e=>e.lineStaves.map(e=>e.imgs)).flat(2).map(e=>e?.src).filter(Boolean)],exports.predictPages=async(e,t,s={outputWidth:1200,pageStore:Ai,onReplaceImage:Pi})=>{const i=e.logger;s.outputWidth=s.outputWidth||1200,s.pageStore=s.pageStore||Ai,s.onReplaceImage=s.onReplaceImage||Pi,s.processes=Array.isArray(s.processes)&&s.processes.length>0?s.processes:["layout","text","gauge","mask","semantic","brackets"];const r=new OMRProgress(s.onProgress),n=Date.now();t.forEach(e=>{e.layout?.detection?e.layout.detection.areas=e.layout.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0):delete e.layout});const a=new Score({title:s?.title,stavesCount:2,paperOptions:{raggedLast:!0,raggedLastBottom:!0},headers:{},instrumentDict:{},settings:{enabledGauge:s.processes.includes("gauge"),semanticConfidenceThreshold:1}});i.info(`[predictor]: download_source_images-${t.length}`);const o=await Promise.all(t.map(e=>c.loadImage(e.url)));i.info(`[predictor]: source_images_downloaded-${t.length}`);const l=o.map((e,s)=>function(e,t){let s=e.height/e.width*t;const i=new c.Canvas(t,s);return i.getContext("2d").drawImage(e,0,0,t,t*e.height/e.width),i}(e,t[s].layout?.sourceSize?.width??e.width));r.setTotal("layout",o.length),r.setTotal("text",o.length);const u=await Promise.all(l.map(async(s,i)=>t[i].layout?!t[i].enableGauge&&t[i]?.layout?.detection?.areas?.length?(await e.predictScoreImages("layout$reinforce",[s.toBufferSync("png")],[t[i].layout]))?.[0]:t[i].layout:(await e.predictScoreImages("layout",[s.toBufferSync("png")]))?.[0]));u.forEach(e=>{e.detection.areas=e.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0)});const h=new Map,m=async e=>{const t=await s.onReplaceImage(e);h.set(e,t)};async function f(e,i){const{url:n,key:o,layout:u,enableGauge:h}=t[i],m=yi(JSON.stringify({key:o||n,layout:u,enableGauge:h})),f=await s.pageStore.get(m),d=!s.renew&&(f&&!t[i].renew||!e.detection.areas?.length),p=a.pages[i]=d&&f?ae(f,$s):new Page({source:{name:o||("string"==typeof n&&/https?:\/\//.test(n)?n:null),size:0,url:n,crop:{unit:"%",x:0,y:0,width:100,height:100},dimensions:e.sourceSize,matrix:[Math.cos(e.theta),-Math.sin(e.theta),Math.sin(e.theta),Math.cos(e.theta),0,0],interval:e.interval,needGauge:t[i].enableGauge},layout:e.detection}),g=d?null:await async function({page:e,score:t,pageCanvas:s}){if(!e?.layout?.areas?.length)return null;e.width=t.pageSize.width/t.unitSize,e.height=t.pageSize.height/t.unitSize;const i=new c.Canvas(s.width,s.height),r=i.getContext("2d");r.save();const{width:n,height:a}=i,[o,l,u,h]=e.source.matrix;r.setTransform(o,l,u,h,-.5*n+.5*o*n+.5*l*a,-.5*a+.5*u*n+.5*h*a),r.drawImage(s,0,0),r.restore();const m=e.source.interval;return e.layout.areas.map((t,i)=>{console.assert(t.staves?.middleRhos?.length,"[shootImageByDetection] empty area:",t);const n=r.getImageData(t.x,t.y,t.width,t.height),a=new c.Canvas(t.width,t.height);a.getContext("2d").putImageData(n,0,0);const o=t.staves,l={width:t.width,height:t.height},u=s.width/2/m,h=s.height/2/m,f={x:(t.x+t.staves.phi1)/m-u+e.width/2,y:t.y/m-h+e.height/2};e.systems[i]=vi({page:e,backgroundImage:a.toBufferSync("png"),detection:o,imageSize:l,position:f})}),i}({score:a,page:p,pageCanvas:l[i]});return r.increase("layout"),{page:p,omit:d,hash:m,correctCanvas:g}}!function(e,t,s){const i=t.filter(e=>e&&e.detection&&e.detection.areas?.length).map((e,t)=>{const s=Math.min(...e.detection.areas.filter(e=>e.staves?.middleRhos?.length).map(e=>e.staves.interval)),i=e.sourceSize;return{...e,index:t,vw:i.width/s,hwr:i.height/i.width}});if(!i.length)throw new Error("empty result");const r=i.sort((e,t)=>t.vw-e.vw)[0],n=Math.max(...i.map(e=>e.hwr));e.unitSize=s/r.vw,e.pageSize={width:s,height:s*n}}(a,u,s.outputWidth);const d=u.reduce((e,t)=>e+(t.detection.areas?.length??0),0),p=u.reduce((e,t)=>e+(t.detection.areas?.reduce?.((e,t)=>e+(t.staves?.middleRhos?.length??0),0)??0),0);r.setTotal("gauge",p),r.setTotal("mask",p),r.setTotal("semantic",p),r.setTotal("brackets",d);const g=[],y=[],v=Date.now();let x=0;for(const n of u.keys()){const o=[],{page:l,correctCanvas:d,omit:p,hash:v}=await f(u[n],n);if(o.push(m(l.source.url)),o.push(...l.systems.map(e=>m(e.backgroundImage))),i.info(`[predictor]: check_cache_pageIndex-${n} omit: ${p}`),p)y.push(n);else{const u=l.systems.map((e,t)=>e.staves.map((s,i)=>({pageIndex:n,systemIndex:t,staffIndex:i,page:l,system:e,staff:s}))).flat(1);await Mi([async()=>{if(!s.processes.includes("brackets"))return;const t=l.layout,a=l.source.interval,o=Date.now(),u=l.systems.map((e,s)=>{const{x:i,y:r,staves:{middleRhos:n,phi1:o}}=t.areas[s],l=n[0],u=n[n.length-1],h={x:i+o-4*a,y:r+l-4*a,width:8*a,height:u-l+8*a},m=new c.Canvas(64,h.height/a*8);return m.getContext("2d").drawImage(d,h.x,h.y,h.width,h.height,0,0,m.width,m.height),{system:e,buffer:m.toBufferSync("png")}});i.info(`[predictor]: brackets js [pageIndex-${n}] duration: ${Date.now()-o}`);const h=await e.predictScoreImages("brackets",{buffers:u.map(e=>e.buffer)});r.increase("brackets",u.length),u.forEach(({system:e},t)=>{h[t]&&(e.bracketsAppearance=h[t])})},async()=>{if(s.processes.includes("text"))try{const t=Date.now(),o=d.toBufferSync("png"),c=(await e.predictScoreImages("textLoc",[o]))[0].filter(e=>e.score>0);if(c.length>0){const[t]=await e.predictScoreImages("textOcr",{buffers:[o],location:c});l.assignTexts(t.areas,t.imageSize),l.assemble()}if(i.info(`[predictor]: text js [pageIndex-${n}] duration: ${Date.now()-t}`),r.increase("text"),!s.title){const e=a.pages[0].tokens;if(Array.isArray(e)&&e.length>0){const[t]=e.filter(e=>e.type===B.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(a.title=t.text)}}}catch(e){i.error(`[predictor]: text js [pageIndex-${n}] ${JSON.stringify(e)}`)}},async()=>{var c;await(c=async()=>{if(s.processes.includes("gauge")&&!1!==t[n].enableGauge){const t=await e.predictScoreImages("gauge",await Promise.all(u.map(async({staffIndex:e,system:t})=>{const s=Date.now(),r=await Ei(t,e,{paddingLeft:Si,spec:bi});return i.info(`[predictor]: gauge js shoot [page-${n}, staff-${e}] duration: ${Date.now()-s}`),r.toBufferSync("png")})));for(const[s,{system:n,staff:a,pageIndex:c,staffIndex:l}]of u.entries()){const u=Date.now();i.info(`[predictor]: gauge js [page-${c}, staff-${l}] start..`),await Ii({pyClients:e,system:n,staff:a,staffIndex:l,gaugeImage:t[s].image}),i.info(`[predictor]: gauge js [page-${c}, staff-${l}] duration: ${Date.now()-u}`),r.increase("gauge"),o.push(m(a.backgroundImage))}}else for(const[e,{system:t,staff:s,staffIndex:i}]of u.entries())await Ni({system:t,staff:s,staffIndex:i}),o.push(m(s.backgroundImage))},c()),await Mi([async()=>{if(!s.processes.includes("mask"))return;const t=await e.predictScoreImages("mask",u.map(({staff:e})=>e.backgroundImage));for(const[e,{staff:s,staffIndex:a}]of u.entries()){const c=Date.now();await Ci({staff:s,staffIndex:a,maskImage:t[e].image}),i.info(`[predictor]: mask js [page-${n}, ${e}, staff-${a}] duration: ${Date.now()-c}`),r.increase("mask"),o.push(m(s.maskImage))}},async()=>{if(!s.processes.includes("semantic"))return;const t=ae(await e.predictScoreImages("semantic",u.map(({staff:e})=>e.backgroundImage)),$s);u.forEach(({system:e})=>e.clearTokens());for(const[e,{staffIndex:s,system:o,staff:c}]of u.entries()){const l=Date.now();await _i({score:a,system:o,staff:c,staffIndex:s,graph:t[e]}),i.info(`[predictor]: semantic js [page-${n}, system-${o.index}, staff-${c.index}] duration: ${Date.now()-l}`),r.increase("semantic")}}])}]),++x}g.push(Promise.all(o).then(()=>(Oi(l,e=>h.get(e)),i.info(`[predictor]: pageStore set: [${n}]`),s.pageStore.set(v,JSON.stringify(l)))))}const S=Date.now();await Promise.all(g),i.info(`[predictor]: inferenceStaffLayout: ${a.title}, [${a.systems.length}]`),a.inferenceStaffLayout(),i.info(`[predictor]: done: ${a.title}`),a.assemble();const b=Date.now();return{score:a,omitPages:y,stat:{cost:b-n,pagesCost:S-v,pages:x}}},exports.regulateWithBeadSolver=async(e,{logger:t,pickers:s,solutionStore:i=$i,ignoreCache:r,freshOnly:n,onSaveIssueMeasure:a,onProgress:o,onPassStart:c})=>{e.spartito=void 0,e.assemble();const l=e.makeSpartito();l.measures.forEach(t=>e.assignBackgroundForMeasure(t));const u=Date.now();t?.info(`[regulateWithBeadSolver] begin, measure total: ${l.measures.length}.`,r?"ignoreCache":"",n?"freshOnly":"");const h=l.measures.filter(e=>e.events?.length&&!e.patched).map(e=>({origin:e.deepCopy(),current:e,evaluation:void 0,baseQuality:0}));for(const e of l.measures.filter(e=>e.events?.length)){const t=s.find(t=>t.n_seq>e.events.length+1);t&&await Fs(e,t)}l.rectifyTimeSignatures(t),s.forEach(e=>e.cost=0);const m={cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0};if(t?.info("[regulateWithBeadSolver] measures estimation finished."),i&&!r)for(const e of h){const t=await i.get(e.origin.regulationHash0);t&&(e.current.applySolution(t),++m.cached,e.evaluation=Ke(e.current),e.baseQuality=e.evaluation.qualityScore)}t?.info("[regulateWithBeadSolver]",`${m.cached}/${h.length}`,"solutions loaded.");const f=t?null:process.stdout;m.cached&&f?.write(`${m.cached}c`),h.forEach(e=>{const i=s.find(t=>t.n_seq>e.current.events.length+1);i?e.picker=i:t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] size out of range:`,e.current.events.length)});const d=h.filter(e=>e.picker&&(!e.evaluation||!e.evaluation.fine&&!n));d.forEach(e=>{const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups,s.regulate({policy:"simple"});const i=Ke(s);(!e.evaluation||i.qualityScore>e.evaluation.qualityScore)&&(e.evaluation=i,Object.assign(e.current,s),i.perfect&&(t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] regulated by simple policy.`),++m.simple))}),m.computed=d.length-m.simple,m.simple&&f?.write(`${m.simple}s`);const p=(e,s,i)=>{t?.info(`[regulateWithBeadSolver] measure[${e.measureIndex}/${l.measures.length}] regulated${i?"+":"-"}: ${s.qualityScore.toFixed(3)}, ${s.fine?"solved":s.error?"error":"issue"}, ${e.regulationHash}`),f?.write(`[${s.fine?"32":s.error?"31":"33"}m${i?"+":"-"}`)},g=l.measures.length,y=()=>d.filter(e=>!e.evaluation?.fine).length,v=o?(e,t,s,i)=>{o(e,t,s,{pass:i.pass,remaining:y(),total:g})}:void 0;c?.(1,"Imperfect",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.05,quotaMax:200,quotaFactor:3,ptFactor:1},ji.Imperfect,1,v),c?.(2,"NotFine",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:20,ptFactor:1.6},ji.NotFine,2,v),c?.(3,"ErrorOnly",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:40,ptFactor:3},ji.ErrorOnly,3,v),d.forEach(({evaluation:e,baseQuality:t,current:s,origin:r})=>{e.fine?++m.solved:e.error?++m.fatal:++m.issue,(e.qualityScore>t||!t)&&(i.set(r.regulationHash0,{...s.asSolution(r),priority:-s?.solutionStat?.loss}),s.regulationHash!==r.regulationHash0&&i.set(s.regulationHash,{...s.asSolution(),priority:-s?.solutionStat?.loss})),e.fine||a?.({measureIndex:s.measureIndex,measure:new EditableMeasure(s),status:e.error?2:1})});const x=Date.now(),S=s.reduce((e,t)=>e+t.cost,0),b=l.qualityScore,k=x-u;return t?.info("[regulateWithBeadSolver] done in ",k,"ms, qualityScore:",b),n&&(m.cached=0),{totalCost:x-u,pickerCost:S,measures:m,qualityScore:b}},exports.replaceScoreJsonImages=(e,t=e=>e)=>{const s=JSON.parse(JSON.stringify(e));return s.pages.forEach(e=>{e?.src&&(e.src=t(e?.src))}),s.lines.forEach(e=>{e.lineStaves.forEach(e=>{e.imgs.forEach(e=>{e?.src&&(e.src=t(e.src))})})}),s},exports.saveEditableMeasures=async(e,t,s,{status:i=2,solutionStore:r}={})=>{e.assemble();const n=e.spartito||e.makeSpartito(),a=t.map(e=>n.measures.find(t=>t.measureIndex===e)).filter(Boolean);if(r){const e=await r.batchGet(a.map(e=>e.regulationHash0));a.forEach((t,s)=>{const i=e[s];i&&t.applySolution(i)})}a.forEach(e=>{s({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:i})})},exports.starry=$s,exports.updateScorePatches=(e,t,s={})=>{if(console.assert(t.every(e=>e.validRegulated),"[updateScorePatches] some measures not valid regulated:",t.filter(e=>!e.validRegulated)),e.patches=t.map(e=>e.createPatch()),s?.solutionStore){e.assemble();const i=e.makeSpartito();t.forEach(e=>{if(s.solutionStore.set(e.regulationHash,{...e.asSolution(),priority:1}),e.regulationHash0!==e.regulationHash){const t=i.measures.find(t=>t.measureIndex===e.measureIndex);s.solutionStore.set(e.regulationHash0,{...e.asSolution(t),priority:1})}})}}; +"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("lodash/pick"),t=require("js-sha1"),s=require("math-erf"),i=require("lodash"),r=require("msgpackr"),n=require("zeromq"),a=require("portfinder"),o=require("python-shell"),c=require("skia-canvas"),l=require("weak-lru-cache"),u=require("spark-md5"),h=require("sharp"),m=require("got");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=f(e),p=f(t),g=f(s),y=f(i),v=f(u),x=f(h),S=f(m);globalThis.btoa=e=>Buffer.from(e,"binary").toString("base64"),globalThis.atob=e=>Buffer.from(e,"base64").toString("binary");const b=(e,t)=>("object"==typeof e&&(e=JSON.stringify(e)),JSON.parse(e,(e,s)=>{if(s&&"object"==typeof s&&s.__prototype){const e=t[s.__prototype];if(e){const{__prototype:t,...i}=s;return new e(i)}}return s})),k=(e,t=null)=>{if((t=t||new Map).get(e))return t.get(e);if(Array.isArray(e)){const s=[];return t.set(e,s),e.forEach(e=>s.push(k(e,t))),s}if(e&&"object"==typeof e){const s={};return t.set(e,s),Object.entries(e).forEach(([e,i])=>s[e]=k(i,t)),Object.setPrototypeOf(s,e.__proto__),s}return e};class SimpleClass{assign(e){e&&Object.assign(this,e)}toJSON(){const e=this.constructor,t=e.serializedKeys||e.blackKeys&&Object.keys(this).filter(t=>!e.blackKeys.includes(t)),s=t?d.default(this,t):this;return{__prototype:e.className,...s}}deepCopy(){return k(this)}}var T={Matrix:function(){}};T.Matrix.create=function(e){return(new T.Matrix).setElements(e)},T.Matrix.I=function(e){for(var t,s=[],i=e;i--;)for(t=e,s[i]=[];t--;)s[i][t]=i===t?1:0;return T.Matrix.create(s)},T.Matrix.prototype={dup:function(){return T.Matrix.create(this.elements)},isSquare:function(){var e=0===this.elements.length?0:this.elements[0].length;return this.elements.length===e},toRightTriangular:function(){if(0===this.elements.length)return T.Matrix.create([]);var e,t,s,i,r=this.dup(),n=this.elements.length,a=this.elements[0].length;for(t=0;t=n&&l[a].push(r);for(o.elements[a]=s,e=a;e--;){for(s=[],t=0;t{const i=Math.round(10*s.x),r=Math.round(10*s.y),n=`${e}|${t}|${s.semantic}|${i}|${r}`,a=p.default.array(n).slice(12),o=globalThis.btoa(String.fromCharCode(...a)).substring(0,11);return s.id=o,o},B=(e,t)=>{const s=Math.round(t.x),i=Math.round(t.y),r=`p-${e}|${t.semantic}|${s}|${i}`,n=p.default.array(r).slice(12),a=globalThis.btoa(String.fromCharCode(...n)).substring(0,11);return t.id=a,a},A=(e,t,s=-1/0)=>Math.max(Math.round(e/t)*t,s),P=(e,t)=>{const s=e.x-t.x,i=e.y-t.y;return Math.sqrt(s*s+i*i)},R=(e,t)=>Number.isInteger(e)&&Number.isInteger(t)?0===t?e:R(t,e%t):(console.error("non-integer gcd:",e,t),1),D=(e,t)=>({numerator:e,denominator:t}),F=(e,t)=>{e=Math.round(e),t=Math.round(t);const s=0!==e?R(e,t):t;return D(e/s,t/s)},L=e=>`${e.numerator}/${e.denominator}`,$=(e,t)=>t?e*t.numerator/t.denominator:e,j=(e,t)=>{const s=[...e].sort((e,s)=>e[t]-s[t]);let i=null,r=null;return s.reduce((e,n,a)=>(r?n[t]-r[t]<.4?i.push(n):(i.length>1&&e.push(i),r=n,i=[n]):(r=n,i=[n]),i.length>1&&a===s.length-1&&e.push(i),e),[])},H=e=>{if(e.length<=1)return[];let t=e.slice(1);const s=C.find(t=>t.includes(e[0].semantic));if(!s)return H(t);const i=t.filter(e=>s.includes(e.semantic));return t=t.filter(e=>!s.includes(e.semantic)),[...i,...H(t)]},V=e=>{const t=new Set(e),s=j(e,"x"),i=[].concat(...s.map(e=>j(e,"y")));return i.forEach(e=>e.sort((e,t)=>t.confidence-e.confidence)),i.forEach(e=>{H(e).forEach(e=>t.delete(e))}),Array.from(t)},z=[0,2,4,5,7,9,11],q=({note:e,alter:t})=>{const s=Math.floor(e/7),i=(e=>{let t=e%7;for(;t<0;)t+=7;return t})(e);return 60+12*s+z[i]+t},G=e=>{const t=Math.max(...e);return e.indexOf(t)};class DummyLogger{debug(...e){}group(...e){}groupCollapsed(...e){}groupEnd(){}info(...e){}warn(...e){}assert(...e){}}const W=1921920,U=e=>1===e?null:(e=>{const t=Math.round(1920*e);return F(t,1920)})(e);var Y,X,K;!function(e){e[e.PLACE=0]="PLACE",e[e.VERTICAL=1]="VERTICAL",e[e.HORIZONTAL=2]="HORIZONTAL"}(Y||(Y={}));class Action{constructor(e){Object.assign(this,e)}static P(e){return new Action({type:Y.PLACE,e1:e})}static V(e,t,s=1){return new Action({type:Y.VERTICAL,e1:s>0?e:t,e2:s>0?t:e})}static H(e,t){return new Action({type:Y.HORIZONTAL,e1:e,e2:t})}get id(){switch(this.type){case Y.PLACE:return this.e1.toString();case Y.VERTICAL:return`${this.e1}|${this.e2}`;case Y.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(e,t){const s=Array(e.stages.length).fill(null).map(()=>Array(e.stages.length).fill(null).map(()=>new Set));e.actions.filter(e=>e.type===Y.HORIZONTAL).forEach(t=>{const i=e.stages.findIndex(e=>e.events.includes(t.e1)),r=e.stages.findIndex(e=>e.events.includes(t.e2));console.assert(i>=0&&r>=0,"invalid stages for H action:",e.id,e.stages,t),s[i][r].add(t.e1)}),s[0][e.stages.length-1].add(0);const i=e.stagedEvents,r=t.matrixH[t.matrixH.length-1].filter((e,t)=>!i.has(t)),n=Math.max(0,Math.max(...r)-.01),a=e.actions.filter(e=>e.type===Y.HORIZONTAL),o=Object.keys(t.eventMap).map(Number).filter(e=>!a.find(t=>t.e2===e));return e.stages.forEach(i=>{i.events.forEach(r=>{if(r>0){!a.find(e=>e.e1===r)&&t.matrixH[t.matrixH.length-1][r]>=n&&(o.some(e=>t.matrixH[e][r]>0)||s[i.index][e.stages.length-1].add(r))}})}),new StageMatrix({matrix:s})}constructor(e){Object.assign(this,e)}pathOf(e,t,s,i=0){if(this.matrix[e][t].size){const r=[...this.matrix[e][t]][i];if(t===s)return[r];for(let e=t+1;e<=s;++e){const i=this.pathOf(t,e,s);if(i)return[r,...i]}}return null}findDoublePath(e,t){const s=[];for(let i=t;i>=e+1;--i)for(let r=0;rt.forEach(t=>e.forEach(e=>t.delete(e))))}toEquations(e){const t=[];for(let s=1;sn[e]=1),r.forEach(e=>n[e]=-1),t.push(n),this.reducePath(i.length>r.length?i:r)}}}return t}}class PathNode{constructor(e){Object.assign(this,e),console.assert(this.logger,"logger is null:",e)}get actions(){const e=this.parent?this.parent.actions:[];return this.action?[...e,this.action]:e}get id(){return this.actions.map(e=>e.id).sort().join(" ")}get stagedEvents(){const e=new Set;return this.stages&&this.stages.forEach(t=>t.events.forEach(t=>t>=0&&e.add(t))),e}like(e){return e.split(" ").sort().join(" ")===this.id}constructStages(e){this.stages=[{events:[-1]}];for(const t of this.actions)switch(t.type){case Y.PLACE:this.stages.unshift({events:[t.e1]});break;case Y.VERTICAL:{const e=this.stages.find(e=>e.events.includes(t.e1)),s=this.stages.find(e=>e.events.includes(t.e2));console.assert(e||s,"invalid V action:",this.stages,t),e&&s?(e.events.push(...s.events),s.events=null,this.stages=this.stages.filter(e=>e.events)):e?s||e.events.push(t.e2):s.events.unshift(t.e1)}break;case Y.HORIZONTAL:{const s=this.stages.find(e=>e.events.includes(t.e1)),i=this.stages.find(e=>e.events.includes(t.e2));console.assert(s||i,"invalid H action:",this.stages,t);const r=s=>{console.assert(e.eventMap[s],"invalid event id:",t.id,s,e.eventMap);const i=e.eventMap[s].x,r=this.stages.find(t=>t.events.some(t=>t>0&&e.eventMap[t].x<=i)&&t.events.some(t=>t>0&&e.eventMap[t].x>=i));if(r)r.events.push(s);else{const t={events:[s]},r=this.stages.findIndex(t=>-1===t.events[0]||e.eventMap[t.events[0]].x>=i);this.stages.splice(r,0,t)}};s||r(t.e1),i||r(t.e2)}}this.stages.forEach((e,t)=>e.index=t)}constructConstraints(e){const t=Object.keys(e.eventMap).length,s=StageMatrix.fromNode(this,e).toEquations(t),i=Array(t).fill(null).map((t,s)=>e.eventMap[s].duration);this.constraints=s.map(e=>e.map((e,t)=>e*i[t]))}inbalancesConstraints(e){console.assert(this.constraints,"constraints not constructed.");const t=Object.keys(e.eventMap).length,s=Array(t).fill(!0),i=Array(t).fill(!1),r=[];for(const e of this.constraints){const t=e.reduce((e,t)=>e+t,0);if(0!==t){const n=t<0?e.map(e=>-e):e;if(n[0]>0)continue;r.push(n),n.forEach((e,t)=>{i[t]=i[t]||e<0,e&&(s[t]=e<0||i[t])})}}return this.constraints.forEach(e=>{0!==e.reduce((e,t)=>e+t,0)||e[0]||e.some((e,t)=>e&&!s[t])&&(e.forEach((e,t)=>e&&(s[t]=!1)),r.push(e))}),{ones:s,inbalances:r}}solveEquations({ones:e,inbalances:t}){if(!t.length)return e.map(()=>1);const s=e.map((e,t)=>({fixed:e,i:t})).filter(({fixed:e})=>!e).map(({i:e})=>e).filter(e=>t.some(t=>0!==t[e]));if(!s.length)return e.map(()=>1);const i=s.map(e=>Math.abs(t.find(t=>0!==t[e])[e])),r=new Map;let n=!1;const a=t.map(e=>({line:e.filter((e,t)=>s.includes(t)),bias:-e.reduce((e,t,i)=>e+(s.includes(i)?0:t),0)})).filter(({line:e,bias:t})=>{if(e.every(e=>0===e))return!1;const s=e.join(",");return r.has(s)?(n=r.get(s)!==t,!1):(r.set(s,t),!0)});if(n)return null;const o=a.slice(0,s.length),c=a.slice(s.length);if(o.lengths===t?1:s===r?-1:0),bias:0,prior:(i[t]+i[r])/W};o.some(e=>e.line[t]&&e.line[r])&&(n.prior-=10),o.some(e=>1===e.line.filter(Number).length&&(e.line[t]||e.line[r]))&&(n.prior+=1),e.push(n)}e.sort((e,t)=>e.prior-t.prior),o.push(...e.slice(0,s.length-o.length))}const l=o.map(({line:e})=>e),u=o.map(({bias:e})=>e),h=function(e){const t=T.Matrix.create(e).inverse();return null!==t?t.elements:null}(l);if(!h)return this.logger.warn("null invert:",l),null;const m=h.map(e=>e.reduce((e,t,s)=>e+t*u[s],0));if(c.length&&c.some(e=>Math.abs(e.line.reduce((e,t,s)=>e+t*m[s],0))>.001))return null;const f=e.map(()=>1);return s.forEach((e,t)=>f[e]=m[t]),f}optimallySolve(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e),i=t.map((t,s)=>t?-1:A(e.eventMap[s].shrinkness,.01)).reduce((e,t,s)=>(t>=0&&(e[t]=e[t]||[],e[t].push(s)),e),{}),r=Object.entries(i).sort((e,t)=>Number(t[0])-Number(e[0])).map(e=>e[1]);for(let i=1;i!n.includes(t)),o=this.solveEquations({ones:a,inbalances:s});if(o&&o.every((t,s)=>t<=1&&t>e.eventMap[s].lowWarp))return o}return this.solveEquations({ones:t,inbalances:s})}isConflicted(e){const{ones:t,inbalances:s}=this.inbalancesConstraints(e);for(const i of s){if(i.reduce((s,i,r)=>s+i*(t[r]||i<=0?1:e.eventMap[r].lowWarp),0)>=0)return i.forEach((t,s)=>{t&&(e.eventTendencies[s]+=t>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:t,inbalances:s});return!i||!i.every((t,s)=>t>e.eventMap[s].lowWarp&&t<=1)}getSolution(e){const t=t=>e.eventMap[t.e2]?e.eventMap[t.e2].x+.06*Math.abs(e.eventMap[t.e2].x-e.eventMap[t.e1].x):e.eventMap[t.e1].x+1e4,s=this.actions.filter(e=>e.type===Y.HORIZONTAL).sort((e,s)=>t(e)-t(s)),i=s.reduce((e,t)=>({...e,[t.e1]:t.e2}),{}),r=new Set([...Object.keys(i)].map(Number));s.forEach(e=>r.delete(e.e2)),this.stages[0].events.forEach(e=>e>0&&r.add(e));let n=[...r].map(e=>{const t=[e];let s=e;for(;i[s]&&(s=i[s],!(s<0||t.includes(s)));)t.push(s);return t});const a=Object.values(e.eventMap).filter(e=>e.id>0).map(e=>({id:e.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),o=a.filter(e=>n.some(t=>t.includes(e.id))||s.some(t=>[t.e1,t.e2].includes(e.id))).reduce((e,t)=>({...e,[t.id]:t}),{});this.stages.forEach((e,t)=>e.events.forEach(e=>o[e]&&(o[e].tickGroup=t))),this.stages[0].tick=0,this.stages[0].events.forEach(e=>o[e]&&(o[e].tick=0));const c=this.optimallySolve(e);a.forEach(e=>e.timeWarp=U(c[e.id]));const l=this.stages.slice(0,this.stages.length-1),u=()=>{if(l.every(e=>Number.isFinite(e.tick)))return!1;let t=!1;return s.forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(r.tick)&&(r.tick=i.tick+$(e.eventMap[s.e1].duration,o[s.e1].timeWarp),r.events.forEach(e=>o[e]&&(o[e].tick=r.tick)),t=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(e=>e.events.includes(s.e1)),r=this.stages.find(e=>e.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(r.tick)&&(i.tick=r.tick-$(e.eventMap[s.e1].duration,o[s.e1].timeWarp),i.events.forEach(e=>o[e]&&(o[e].tick=i.tick)),t=!0)}),t};for(;u(););console.assert(l.every(e=>Number.isFinite(e.tick)),"stage ticks not all solved:",this.stages,this.id),a.filter(e=>Number.isFinite(e.tick)).forEach(t=>t.endTick=t.tick+$(e.eventMap[t.id].duration,t.timeWarp));const h=e.eventMap[0].duration;n.forEach(e=>{const t=e.findIndex(e=>o[e].endTick>h);if(t>=0){e.splice(t,e.length-t).forEach(e=>{o[e].tick=null,o[e].endTick=null})}}),n=n.filter(e=>e.length);const m=Math.max(0,...a.map(e=>e.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:n,events:a,duration:m,actions:this.actions.map(e=>e.id).join(" ")}}deduce(e,t){this.stages||this.constructStages(e);const s=e.actionAccessing.get(this.id)||{times:0};if(++s.times,e.actionAccessing.set(this.id,s),this.constructConstraints(e),this.isConflicted(e))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),t.credits>0){if(--t.credits,this.children||this.expand(e),this.children=this.children.filter(t=>!e.actionAccessing.get(t.id)||!e.actionAccessing.get(t.id).closed),this.children.length){const s=t=>t.possibility/((e.actionAccessing.get(t.id)||{times:0}).times+1);this.children.sort((e,t)=>s(t)-s(e));for(const s of this.children){const i=s.deduce(e,t);if(i)return this.logger.groupEnd(),i;if(t.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(e)}expand(e){this.constructStages(e);const{eventMap:t,matrixV:s,matrixH:i}=e,r=this.stagedEvents,n=[],a=e=>{if(!this.actions.some(t=>t.id===e.action.id)&&!n.some(t=>t.action.id===e.action.id)){const t=this.stages.find(t=>t.events.includes(e.action.e1)),i=this.stages.find(t=>t.events.includes(e.action.e2));if(t===i||t&&i&&t.index>=i.index)return;if(t&&i)if(e.action.type===Y.VERTICAL){if(i.index-t.index>1)return;if(this.actions.some(e=>t.events.includes(e.e1)&&i.events.includes(e.e2)))return}else if(e.action.type===Y.HORIZONTAL&&t.index>i.index)return;if(e.action.type===Y.HORIZONTAL&&this.actions.some(t=>t.type===Y.HORIZONTAL&&(t.e1===e.action.e1||t.e2===e.action.e2||t.e1===e.action.e2&&t.e2===e.action.e1)))return;if(e.action.type===Y.VERTICAL){if(t&&(e.possibility=Math.min(e.possibility,...t.events.map(t=>s[e.action.e2][t])),e.possibility<=0))return;if(i&&(e.possibility=Math.min(e.possibility,...i.events.map(t=>s[t][e.action.e1])),e.possibility<=0))return}n.push(e)}};for(const e of r)e<0||(s[e].forEach((t,s)=>{t>0&&e!==s&&a({action:Action.V(s,e),possibility:t})}),s.forEach((t,s)=>{const i=t[e];i>0&&a({action:Action.V(e,s),possibility:i})}),i[e].forEach((t,s)=>{t>0&&a({action:Action.H(s,e),possibility:t})}),i.forEach((s,i)=>{i=i>=Object.keys(t).length?-1:i;const r=s[e];r>0&&a({action:Action.H(e,i),possibility:r})}));n.some(e=>[Y.HORIZONTAL,Y.PLACE].includes(e.action.type)||!r.has(e.action.e1)||!r.has(e.action.e2))?this.children=n.map(e=>new PathNode({logger:this.logger,parent:this,...e})):this.children=[]}}class Solver{constructor(e,{quota:t=1e3,logger:s=new DummyLogger}={}){this.quota=t,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:e.measureShrinkness,duration:e.expectedDuration,lowWarp:0};this.events=[i,...e.events.map(e=>({id:e.id,x:e.x,confidence:e.confidence,shrinkness:e.shrinkness,staff:e.staff,duration:e.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((e,t)=>({...e,[t.id]:t}),{}),this.matrixH=e.matrixH,this.matrixV=e.matrixV,this.xSpan=e.endX-Math.min(e.endX-1,...e.events.map(e=>e.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(e=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(e.id),possibility:this.matrixV[e.id].reduce((e,t)=>e+t,0)}));let e=null;this.logger.groupCollapsed("solve");const t=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:t},r=this.pathRoot.deduce(i,s);if(r.credits=this.quota-s.credits,r.times=s.times,this.evaluateSolution(r),this.logger.debug("loss:",r.loss),e=!e||r.losse/s.times)),e}evaluateSolution(e){e.loss=0;const t=e.events.reduce((e,t)=>({...e,[t.id]:{...t,...this.eventMap[t.id]}}),{}),s=e.events.filter(e=>Number.isFinite(e.tick)).map(e=>t[e.id]),i=s.reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{});Object.values(i).forEach(t=>{t.sort((e,t)=>e.x-t.x).slice(0,t.length-1).forEach((s,i)=>{t[i+1].tick{if(Number.isFinite(s.tick)&&!e.voices.every(e=>!e.includes(s.id))||(e.loss+=100*t[s.id].confidence),s.timeWarp){const{numerator:e,denominator:i}=s.timeWarp,n=t[s.id].shrinkness;r.set(e,Math.max(r.get(e)||0,1-n)),r.set(i,Math.max(r.get(i)||0,1-n))}});const n=F(e.duration,this.eventMap[0].duration);r.set(n.numerator,Math.max(r.get(n.numerator)||0,1-this.eventMap[0].shrinkness)),r.set(n.denominator,Math.max(r.get(n.denominator)||0,1-this.eventMap[0].shrinkness));for(const[t,s]of r.entries())t>1&&(e.loss+=Math.log(t)*s);let a=0,o=0;e.voices.forEach(s=>{console.assert(t[s[0]],"invalid voice:",s,Object.keys(t));const i=Math.abs(t[s[0]].tick),r=t[s[s.length-1]].endTick;a+=Math.max(0,i+e.duration-r);let n=null;s.forEach(e=>{const s=t[e];s.staff!==n&&(null!==n&&++o,n=s.staff)})}),e.loss+=10*a/W,e.loss+=5**o-1;const c=[...s].sort((e,t)=>e.x-t.x),l=c.slice(1).map((t,s)=>{const i=c[s],r=t.x-i.x,n=t.tick-i.tick;if(!n)return r/this.xSpan;return(4*Math.atan2(n/e.duration,r/this.xSpan)/Math.PI-1)**2}),u=Math.max(...l,0);e.loss+=u**2,console.assert(e.loss>=0,"Invalid solution loss!!!",e.loss,r,a,o),e.loss<0&&(e.loss=1/0)}}!function(e){e[e.PAD=0]="PAD",e[e.BOS=1]="BOS",e[e.EOS=2]="EOS",e[e.CHORD=3]="CHORD",e[e.REST=4]="REST"}(X||(X={}));class EventCluster extends SimpleClass{constructor(e){super(),super.assign(e)}get regular(){return this.elements.some(e=>[X.CHORD,X.REST].includes(e.type)&&!e.fake)&&this.elements.every(e=>[e.x,e.y1,e.y2,e.tick].every(Number.isFinite))&&this.elements.slice(1).every((e,t)=>e.fake||this.elements[t].fake||e.grace||this.elements[t].grace||e.fullMeasure||this.elements[t].fullMeasure||e.tick<=this.elements[t].tick||e.x>this.elements[t].x)}get grant(){return this.annotation&&this.annotation.grant}get feature(){return{index:this.index,elements:this.elements}}get estimatedDuration(){const e=this.elements.find(e=>e.type===X.EOS),t=e?.predisposition?e.predisposition?.tick:e?.tick;return Number.isFinite(t)?t:this.duration}assignPrediction(e){console.assert(e.index===this.index,"index mismatch:",e.index,this.index),this.matrixH=e.matrixH,e.elements.forEach(e=>{const{index:t,...s}=e,i=this.elements.find(e=>e.index===t);console.assert(i,"element not found:",t),i&&(i.predisposition=s)})}}EventCluster.className="EventCluster",EventCluster.blackKeys=["id"];class EventClusterSet extends SimpleClass{constructor(e){super(),super.assign(e)}trimIrregular(){let e=0;return this.clusters=this.clusters.filter(t=>{const s=t.regular;return s||(console.debug("irregular cluster:",t),++e),s}),e?console.debug("Irregular clusters trimmed:",`${e}/${this.clusters.length+e}`):console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`),e}}EventClusterSet.className="EventClusterSet";class PatchMeasure extends SimpleClass{constructor(e){super(),Object.assign(this,e)}get staffN(){return Math.floor(Math.log2(this.staffMask))+1}get basics(){return Array(this.staffN).fill(this.basic)}get duration(){return Math.max(0,...(this.voices||[]).map(e=>e.map(e=>this.events.find(t=>t.id===e)).reduce((e,t)=>e+t.duration,0)))}}PatchMeasure.className="PatchMeasure",function(e){e.ClefG="clefs-G",e.ClefF="clefs-F",e.ClefC="clefs-C",e.TimesigC44="timesig-C44",e.TimesigC22="timesig-C22",e.TimesigZero="zero|timesig0",e.TimesigOne="one|timesig1",e.TimesigTwo="two|timesig2",e.TimesigThree="three|timesig3",e.TimesigFour="four|timesig4",e.TimesigFive="five|timesig5",e.TimesigSix="six|timesig6",e.TimesigSeven="seven|timesig7",e.TimesigEight="eight|timesig8",e.TimesigNine="nine|timesig9",e.OctaveShift8va="octave-a",e.OctaveShift8vb="octave-b",e.OctaveShift0="octave-0",e.Zero="zero|n0",e.One="one|n1",e.Two="two|n2",e.Three="three|n3",e.Four="four|n4",e.Five="five|n5",e.Six="six|n6",e.Seven="seven|n7",e.Eight="eight|n8",e.Nine="nine|n9",e.AccNatural="accidentals-natural",e.AccSharp="accidentals-sharp",e.AccDoublesharp="accidentals-doublesharp",e.AccFlat="accidentals-flat",e.AccFlatflat="accidentals-flatflat",e.KeyNatural="accidentals-natural|key-natural",e.KeySharp="accidentals-sharp|key-sharp",e.KeyFlat="accidentals-flat|key-flat",e.NoteheadS0="noteheads-s0",e.NoteheadS1="noteheads-s1",e.NoteheadS2="noteheads-s2",e.NoteheadS1stemU="noteheads-s1|noteheads-s1-u",e.NoteheadS1stemD="noteheads-s1|noteheads-s1-d",e.NoteheadS2stemU="noteheads-s2|noteheads-s2-u",e.NoteheadS2stemD="noteheads-s2|noteheads-s2-d",e.Rest0="rests-0o",e.Rest1="rests-1o",e.Rest2="rests-2",e.Rest3="rests-3",e.Rest4="rests-4",e.Rest5="rests-5",e.Rest6="rests-6",e.Rest0W="rests-0",e.RestM1="rests-M1",e.Flag3="flags-u3",e.Flag4="flags-u4",e.Flag5="flags-u5",e.Flag6="flags-u6",e.Flag7="flags-u7",e.Flag8="flags-u8",e.BeamLeft="|beam-left",e.BeamRight="|beam-right",e.BeamContinue="|beam-continue",e.TremoloLeft="|tremolo-left",e.TremoloRight="|tremolo-right",e.TremoloMiddle="|tremolo-middle",e.SlurBegin="|slur-begin",e.SlurEnd="|slur-end",e.TieBegin="|tie-begin",e.TieEnd="|tie-end",e.VoltaLeft="|volta-left",e.VoltaRight="|volta-right",e.VoltaAlternativeBegin="|volta-alter-begin",e.BarTerminal="|bar-terminal",e.BarSegment="|bar-segment",e.Dot="|dot",e.DotDot="|dotdot",e.f="f",e.p="p",e.m="m",e.r="r",e.s="s",e.z="z",e.WedgeCrescendo="|wedge-crescendo",e.WedgeDiminuendo="|wedge-diminuendo",e.WedgeClose="|wedge-close",e.CrescendoBegin="|wedge-crescendo",e.DecrescendoBegin="|wedge-diminuendo",e.CrescendoEnd="|wedge-close",e.DecrescendoEnd="|wedge-close",e.ScriptFermata="scripts-ufermata",e.ScriptShortFermata="scripts-ushortfermata",e.ScriptSforzato="scripts-sforzato",e.ScriptStaccato="scripts-staccato",e.ScriptStaccatissimo="scripts-ustaccatissimo",e.ScriptTurn="scripts-turn",e.ScriptTrill="scripts-trill",e.ScriptSegno="scripts-segno",e.ScriptCoda="scripts-coda",e.ScriptArpeggio="scripts-arpeggio",e.ScriptPrall="scripts-prall",e.ScriptMordent="scripts-mordent",e.ScriptMarcato="scripts-umarcato",e.ScriptTenuto="scripts-tenuto",e.ScriptPortato="scripts-uportato",e.PedalStar="pedal-star",e.PedalPed="pedal-Ped",e.Text="|text",e.GraceNotehead="|grace-notehead"}(K||(K={}));const Z=K,J=Object.values(K),Q=J.filter(e=>/clefs-/.test(e)),ee=J.filter(e=>/timesig/.test(e)),te=J.filter(e=>/timesig-/.test(e)),se=J.filter(e=>/timesig\d/.test(e)),ie=J.filter(e=>/octave-/.test(e)),re=J.filter(e=>/n\d/.test(e)),ne=J.filter(e=>/accidentals-/.test(e)),ae=J.filter(e=>/noteheads-/.test(e)),oe=[Z.NoteheadS0,Z.NoteheadS1,Z.NoteheadS2],ce=J.filter(e=>/noteheads-.+-[ud]/.test(e)),le=J.filter(e=>/rests-/.test(e)),ue=J.filter(e=>/flags-/.test(e)),he=J.filter(e=>/volta-/.test(e)),me=J.filter(e=>/^[a-z]$/.test(e)),fe=J.filter(e=>/scripts-/.test(e)),de=J.filter(e=>/pedal-/.test(e)),pe=[Z.Dot,Z.DotDot],ge=[Z.SlurBegin,Z.SlurEnd,Z.TieBegin,Z.TieEnd],ye=J.filter(e=>/beam-/.test(e)),ve=J.filter(e=>/wedge-/.test(e)),xe=[...re,...me,...ve,...de,...ge,Z.ScriptFermata,Z.ScriptShortFermata,Z.ScriptSforzato,Z.ScriptStaccato,Z.ScriptStaccatissimo,Z.ScriptTurn,Z.ScriptTrill,Z.ScriptPrall,Z.ScriptMordent,Z.ScriptMarcato,Z.ScriptTenuto,Z.ScriptPortato],Se=[...de],be=[...Q,...ee,...re,...ne,Z.NoteheadS0,Z.NoteheadS1,Z.NoteheadS2,...le,...me,...fe,...de,...pe],ke={};Q.forEach(e=>ke[e]=1),se.forEach(e=>ke[e]=1),ne.forEach(e=>ke[e]=.5),ae.forEach(e=>ke[e]=.5),le.forEach(e=>ke[e]=.5),pe.forEach(e=>ke[e]=.5);const Te={};te.forEach(e=>Te[e]=0),he.forEach(e=>Te[e]=0);class Token{constructor(e){Object.assign(this,e)}get typeId(){return this.type.split("|").reverse()[0]}get isPredicted(){return Number.isFinite(this.confidence)}get isNotehead(){return ce.includes(this.type)||this.type===K.NoteheadS0}get isContexted(){return Q.includes(this.type)||ee.includes(this.type)||ie.includes(this.type)||ne.includes(this.type)}get isAccessory(){return re.includes(this.type)||me.includes(this.type)||fe.includes(this.type)||de.includes(this.type)}get division(){switch(this.type){case Z.NoteheadS0:return 0;case Z.NoteheadS1stemU:case Z.NoteheadS1stemD:return 1;case Z.NoteheadS2stemU:case Z.NoteheadS2stemD:return 2;case Z.Flag3:return 3;case Z.Flag4:return 4;case Z.Flag5:return 5;case Z.Flag6:return 6;case Z.Flag7:return 7;case Z.Flag8:return 8;case Z.RestM1:return-1;case Z.Rest0:return 0;case Z.Rest1:return 1;case Z.Rest2:return 2;case Z.Rest3:return 3;case Z.Rest4:return 4;case Z.Rest5:return 5;case Z.Rest6:return 6}return null}get dots(){switch(this.type){case Z.Dot:return 1;case Z.DotDot:return 2}return null}get direction(){switch(this.type){case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return"u";case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return"d"}return null}get width(){switch(this.type){case Z.NoteheadS0:return M.NoteheadS0;case Z.NoteheadS1stemU:case Z.NoteheadS1stemD:return M.NoteheadS1;case Z.NoteheadS2stemU:case Z.NoteheadS2stemD:return M.NoteheadS2}}get left(){switch(this.type){case Z.NoteheadS0:return this.x-this.width/2;case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return this.x-this.width;case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return this.x}return this.x}get right(){switch(this.type){case Z.NoteheadS0:return this.x+this.width/2;case Z.NoteheadS1stemU:case Z.NoteheadS2stemU:return this.x;case Z.NoteheadS1stemD:case Z.NoteheadS2stemD:return this.x+this.width}return this.x}get voiceIndices(){return!this.voice||this.voice<0?[]:Array(Math.floor(Math.log2(this.voice))+1).fill(null).reduce((e,t,s)=>this.voice&1<"CDEFGAB"[(e.note+700)%7]).join("")}get zeroHolder(){return!!this.grace||this.tremoloCatcher}}var Oe;EventTerm.className="EventTerm",function(e){e[e.Clef=0]="Clef",e[e.KeyAcc=1]="KeyAcc",e[e.Acc=2]="Acc",e[e.OctaveShift=3]="OctaveShift",e[e.TimeSignatureC=4]="TimeSignatureC",e[e.TimeSignatureN=5]="TimeSignatureN"}(Oe||(Oe={}));class ContextedTerm extends Term{constructor(e){super(),Object.assign(this,e)}get type(){return Q.includes(this.tokenType)?Oe.Clef:/\|key-/.test(this.tokenType)?Oe.KeyAcc:/accidentals-/.test(this.tokenType)?Oe.Acc:ie.includes(this.tokenType)?Oe.OctaveShift:te.includes(this.tokenType)?Oe.TimeSignatureC:se.includes(this.tokenType)?Oe.TimeSignatureN:null}get staffLevel(){return[Oe.OctaveShift,Oe.Clef,Oe.KeyAcc].includes(this.type)}get prior(){return this.tick-.1}get clef(){switch(this.tokenType){case K.ClefG:return-this.y-2;case K.ClefF:return 2-this.y;case K.ClefC:return-this.y}return null}get alter(){switch(this.tokenType){case K.AccNatural:case K.KeyNatural:return 0;case K.AccSharp:case K.KeySharp:return 1;case K.AccFlat:case K.KeyFlat:return-1;case K.AccDoublesharp:return 2;case K.AccFlatflat:return-2}return null}get octaveShift(){switch(this.tokenType){case K.OctaveShift8va:return-1;case K.OctaveShift0:return 0;case K.OctaveShift8vb:return 1}return null}get number(){switch(this.tokenType){case K.TimesigZero:return 0;case K.TimesigOne:return 1;case K.TimesigTwo:return 2;case K.TimesigThree:return 3;case K.TimesigFour:return 4;case K.TimesigFive:return 5;case K.TimesigSix:return 6;case K.TimesigSeven:return 7;case K.TimesigEight:return 8;case K.TimesigNine:return 9}return null}}ContextedTerm.className="ContextedTerm";class MarkTerm extends Term{get prior(){return this.tick+.01}}MarkTerm.className="MarkTerm";const Be=Array(7).fill(0).map((e,t)=>String.fromCodePoint(119133+t));class TempoTerm extends MarkTerm{static fromNumeralText(e){if(/.+=.*\d+/.test(e)){const[t,s]=e.split("=");let i=Be.findIndex(e=>t.includes(e));i=i>=0?i:2;let r=(2**i).toString();return t.includes(".")&&(r+="."),new TempoTerm({tick:0,duration:r,beats:s})}return null}constructor(e){super(),Object.assign(this,e)}get prior(){return this.tick-.01}get durationMagnitude(){const[e,t,s]=this.duration.match(/^(\d+)(\.)?$/);return we/Number(t)*(s?1.5:1)}get bpm(){const[e]=this.beats.match(/\d+/)||[90];return Number(e)*this.durationMagnitude*4/we}isValid(e=[10,400]){const t=this.bpm;return Number.isFinite(this.bpm)&&t>=e[0]&&t{const t=(e=>{const t=new Map;return e.rows.forEach(e=>{if(1===e.events.length){const t=e.events[0];t.rest&&0===t.division&&(t.rest="R")}}),e.events.forEach(e=>{const s=Math.round(10*e.pivotX)/10;let i=0;i=e.fullMeasureRest?Math.min(s,...t.keys()):[...t.keys()].find(s=>{const i=t.get(s),r=Math.min(...i.map(e=>e.left)),n=Math.max(...i.map(e=>e.right));return Math.min(n,e.right)-Math.max(r,e.left)>.62*M.NoteheadS1})||s,e.roundX=i;const r=t.get(i)||[];t.set(i,r),r.push(e)}),t})(e);let s=0;const i=new Set([s]),r=[...t.entries()].sort(([e],[t])=>e-t);for(const[e,t]of r)t.forEach(e=>{e.predisposition&&(e.rest=e.rest&&e.predisposition.fullMeasure>.5?"R":e.rest,e.grace=e.predisposition.grace?Ee.Grace:null,e.division=G(e.predisposition.divisionVector),e.dots=G(e.predisposition.dotsVector),e.predisposition.timeWarped>.5&&(e.timeWarp=D(2,3))),e.fullMeasureRest?e.tick=0:(e.zeroHolder&&(s-=e.duration),!e.zeroHolder&&e.predisposition&&Number.isInteger(e.predisposition.tick)?e.tick=e.predisposition.tick:e.tick=s,i.add(e.tick+e.duration))}),i.delete(s),i.size&&(s=Math.min(...i));Number.isInteger(e.estimatedDuration)?e.duration=e.estimatedDuration:e.duration=Math.max(...i,0)},e.computeMeasureVoices=e=>{e.voices=[];for(const t of e.rows){const s=t.events.filter(e=>!(e.grace||e.tremoloCatcher||e.fullMeasureRest||e.predisposition&&e.predisposition.fake>.5)),i=new Set(s);for(;i.size;){let t=0;const r=[],n=e=>{r.push(e.id),e.zeroHolder||(t+=e.duration),i.delete(e)},a=s.find(e=>i.has(e));for(a.alignedTick>0&&(t=a.alignedTick),n(a);;){const e=s.find(e=>i.has(e)&&e.alignedTick===t);if(!e)break;n(e)}e.voices.push(r)}}}}(Ae||(Ae={}));var Pe,Re,De;!function(e){const t=1921920,s=.7071067811865475,i=[[null,null],[null,Ne.Open],[Ne.Open,Ne.Continue],[Ne.Open,Ne.Close],[Ne.Continue,Ne.Continue],[Ne.Continue,Ne.Close],[Ne.Close,null],[Ne.Close,Ne.Open]].map(e=>e.join("-")),r=(e,t)=>{if(!e.events.length)return{events:[],voices:[],duration:0};return new Solver(e,t).solve()};e.estiamteMeasure=e=>{const r=e.events.filter(e=>!e.zeroHolder).map(s=>({id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition&&Number.isFinite(s.predisposition.tick)?s.predisposition.tick:s.x,tipX:s.tipX,y:s.tipY+100*s.staff,duration:s.mainDuration*t/we,division:s.division,dots:s.dots,stemDirection:s.stemDirection,beam:s.beam,rest:s.rest,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?s.predisposition.timeWarped:null}));let n=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(n=Math.max(n,A(e.estimatedDuration,480480)));const a=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),o=[0,...r.map(e=>e.id)],c=r.map(t=>({...t,id:o.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:Number.isFinite(t.shrinkness)?t.shrinkness:Math.tanh((t.division-.1*t.dots)/4),staffGroup:a[t.staff]})),l=Array(o.length+1).fill(null).map(()=>Array(o.length).fill(0)),u=Array(o.length).fill(null).map(()=>Array(o.length).fill(0)),h=e=>g.default(e/1.6)*g.default(1.6/e);for(const t of c){for(const e of c){if(u[t.id][e.id]=t!==e&&t.tickEstimated>=e.tickEstimated?1-g.default((t.tickEstimated-e.tickEstimated)*s/.6):0,t.staffGroup!==e.staffGroup)l[t.id][e.id]=0;else if(t.x<=e.x)l[t.id][e.id]=0;else{const s=Math.exp(2*-Math.abs(t.staff-e.staff)),i=t.staff===e.staff?Math.exp(-Math.abs(t.y-e.y)/16):1,r=t.x-e.x,n=t.tipX-e.tipX;l[t.id][e.id]=(s*i*Math.min(h(r),h(n)))**(1/3)}const r=(1-t.pR)*(1-e.pR);u[t.id][e.id]*=r,l[t.id][e.id]*=r,u[t.id][e.id]<.01&&(u[t.id][e.id]=0),t.stemDirection&&e.stemDirection&&t.stemDirection!==e.stemDirection&&(l[t.id][e.id]*=.9),t.rest||e.rest||i.includes([e.beam,t.beam].join("-"))||(l[t.id][e.id]*=.2)}l[o.length][t.id]=h(e.width-t.x)**(1/3)}return{ids:o,events:c,expectedDuration:n,measureShrinkness:0,endX:e.position.right,matrixH:l,matrixV:u}},e.regulateMeasure=async(s,{solver:i=null,...n})=>{const a=e.estiamteMeasure(s),{ids:o,matrixH:c,matrixV:l}=a;if(s.matrixH){console.assert(s.matrixH.length>o[o.length-1]&&s.matrixH[0].length>o[o.length-1],"matrix shape mismatch:",o.length,`${s.matrixH.length}x${s.matrixH[0].length}`,`${c.length}x${c[0].length}`);for(let e=0;ee.forEach((e,i)=>{const r=s.matrixV[o[t]][o[i]];Number.isFinite(r)&&(l[t][i]=r)})),Number.isFinite(s.estimatedDuration)&&(a.measureShrinkness=Math.tanh(-3*Math.log(Math.min(1,s.estimatedDuration/s.duration)))),n.logger&&n.logger.info("--- MEASURE",s.measureIndex,"---",a);const u=i?await i(a,n):r(a,n),h=u.events.map(e=>({...e,id:a.ids[e.id]}));h.forEach(e=>{const i=s.events.find(t=>t.id===e.id);i.tick=Number.isFinite(e.tick)?Math.round(e.tick*we/t):null,i.tickGroup=e.tickGroup,i.timeWarp=e.timeWarp}),s.duration=Math.round(u.duration*we/t),s.voices=u.voices.map(e=>e.map(e=>a.ids[e])),s.solutionStat={loss:u.loss,solverCredits:u.credits,solverTimes:u.times},s.events.forEach(e=>{const t=h.find(t=>t.id===e.id);t&&(Number.isFinite(t.tick)||"r"!==e.rest||0!==e.division?"R"===e.rest&&(e.tick=0,e.tickGroup=0,e.duration=s.duration,s.voices.push([e.id])):(e.tick=0,e.tickGroup=0,e.rest="R",e.duration=s.duration,s.voices.push([e.id])))})},e.regulateMeasureWithRectification=async(e,i,{solver:n=null,...a})=>{const o=e.events.filter(e=>!e.zeroHolder).map(s=>{const r=i.events.find(e=>e&&e.id===s.id),n=Number.isFinite(r?.division)?r.division:s.division,a=Number.isFinite(r?.dots)?r.dots:s.dots,o=t*2**-n*(2-2**-a);return{id:s.id,staff:s.staff,x:s.x,tickEstimated:s.predisposition?.tick,y:s.tipY+100*s.staff,duration:o,pR:"R"===s.rest?1:"r"===s.rest&&0===s.division?Math.tanh(s.x-e.eventStartX):0,fakeP:s.predisposition&&s.predisposition.fakeP||0,shrinkness:s.predisposition?.timeWarped||0}});let c=t*e.timeSignature.numerator/e.timeSignature.denominator;Number.isFinite(e.estimatedDuration)&&(c=Math.max(c,A(e.estimatedDuration,480480)));const l=e.staffGroups.reduce((e,t,s)=>(t.forEach(t=>e[t]=s),e),{}),u=[0,...o.map(e=>e.id)],h=o.map(t=>({...t,id:u.indexOf(t.id),x:t.x-e.startX,confidence:(1-t.pR)*(1-t.fakeP),shrinkness:t.shrinkness,staffGroup:l[t.staff]})),m=Array(u.length+1).fill(null).map(()=>Array(u.length).fill(0)),f=Array(u.length).fill(null).map(()=>Array(u.length).fill(0));for(const e of h)for(const t of h){f[e.id][t.id]=e!==t&&e.tickEstimated>=t.tickEstimated?1-g.default((e.tickEstimated-t.tickEstimated)*s/.6):0;const i=(1-e.pR)*(1-t.pR);f[e.id][t.id]*=i,f[e.id][t.id]<.01&&(f[e.id][t.id]=0)}console.assert(e.matrixH&&e.matrixH.length>u[u.length-1]&&e.matrixH[0].length>u[u.length-1],"matrix shape mismatch:",u.length,`${e.matrixH.length}x${e.matrixH[0].length}`,`${m.length}x${m[0].length}`);for(let t=0;t{const a=i.events.find(t=>t&&t.id===e),o=Number.isFinite(s)?Math.round(s*we/t):s;return{id:e,tick:o,tickGroup:r,timeWarp:n,division:a?.division,dots:a?.dots}}),S=Math.round(y.duration*we/t);return{events:x,voices:y.voices,duration:S,priority:v}}}(Pe||(Pe={}));class SpartitoMeasure extends SimpleClass{static reorderEvents(e,t){const s=[],i=e.map(e=>({id:e.id,staff:e.staff,x:e.x/.7,rx:0,ry:t[e.staff]+e.tipY,tipY:e.tipY,prior:0}));i.sort((e,t)=>e.x-t.x),i.slice(1).forEach((e,t)=>{const s=Math.min(Math.round(e.x-i[t].x),2);e.rx=i[t].rx+s}),i.forEach(e=>{e.prior=1e4*e.staff+e.rx+.01*e.tipY,s.includes(e.ry)||s.push(e.ry)}),i.sort((e,t)=>e.prior-t.prior),s.sort((e,t)=>e-t);let r=0;const n=s.map((e,t)=>(!t||s[t]-s[t-1]<.5||++r,r)),a=i.map(t=>new EventTerm({...e.find(e=>e.id===t.id),intX:t.rx,intY:n[s.indexOf(t.ry)]}));return a.forEach((e,t)=>e.id=t+1),a}constructor(e){super(),super.assign(e),this.originalRegulationHash||this.regulated||(this.originalRegulationHash=this.regulationHash),this.barTypes=this.barTypes||{},this.regulated&&this.position&&this.postRegulate()}get timeSignature(){return this.basics&&this.basics[0].timeSignature}get keySignature(){return this.basics&&this.basics[0].keySignature}get timeSignatureChanged(){return this.contexts.filter(Boolean)[0].some(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))}get doubtfulTimesig(){return this.basics&&this.basics[0].doubtfulTimesig}get regulated(){return!!this.voices}get validRegulated(){return!!this.voices&&this.voices.flat(1).every(e=>Number.isFinite(this.events.find(t=>t.id===e)?.tick))}get rows(){return this.contexts.map((e,t)=>({events:this.events.filter(e=>e.staff===t),contexts:e}))}get eventStartX(){return this.events.length?Math.min(...this.events.map(e=>e.x)):this.startX}get startX(){return this.position.left}get width(){return this.position.right-this.position.left}get tickMap(){return this.events.concat([this.endEvent]).filter(Boolean).reduce((e,t)=>(Number.isFinite(t.tick)&&(e.has(t.tick)||e.set(t.tick,[]),e.get(t.tick).push(t)),e),new Map)}get tickToX(){return[...this.tickMap.entries()].reduce((e,[t,s])=>{if((s=s.filter(e=>!e.fullMeasureRest&&!e.grace)).length){const i=Math.min(...s.map(e=>e.x));e[t]=i}return e},{})}get tickRates(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest);return e.sort((e,t)=>e.x-t.x),e.slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)})}get tickRatesInStaves(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace).reduce((e,t)=>(e[t.staff]=e[t.staff]||[],e[t.staff].push(t),e),{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickRatesInGroups(){const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>e.sort((e,t)=>e.x-t.x).slice(0,e.length-1).map((t,s)=>{const i=e[s+1];return(i.tick-t.tick)/Math.max(i.x-t.x,.001)}));return[].concat(...t)}get tickTwist(){if(!this.duration||!this.staffGroups)return;const e=this.events.filter(e=>Number.isFinite(e.tick)&&!e.fullMeasureRest&&!e.grace&&!e.tremoloCatcher&&!(e.rest&&0===e.division)).reduce((e,t)=>{const s=this.staffGroups.findIndex(e=>e.includes(t.staff));return e[s]=e[s]||[],e[s].push(t),e},{}),t=Object.values(e).map(e=>{const t=[...e].sort((e,t)=>e.pivotX-t.pivotX),s=this.position.right-t[0].x,i=t.slice(1).map((e,i)=>{const r=t[i],n=e.pivotX-r.pivotX,a=e.tick-r.tick;if(!a)return n/s;return(4*Math.atan2(a/this.duration,n/s)/Math.PI-1)**2});return Math.max(0,...i)});return Math.max(0,...t)}get eventMap(){return this.events.reduce((e,t)=>(e[t.id]=t,e),{})}get empty(){return!this.events?.length||!this.voices?.length}get hasIllEvent(){const e=this.voices.flat(1),t=this.eventMap;return this.regulated&&e.some(e=>{const s=t[e];return!s.zeroHolder&&!Number.isFinite(s.tick)&&!s.fullMeasureRest})}get brief(){return[`${this.timeSignature.numerator}/${this.timeSignature.denominator}`,...this.events.map(e=>[e.staff,e.intX,Math.round(e.tip?e.tip.y:e.ys?.[0]??0),e.fullMeasureRest?0:e.division,e.fullMeasureRest?0:e.dots,e.rest?"r":"",e.grace||"",e.stemDirection,e.beam||""].join("|"))].join("\n")}get regulationHash(){return p.default(this.brief)}get regulationHash0(){return this.originalRegulationHash||this.regulationHash}get regulationHashes(){return Array.from(new Set([this.originalRegulationHash,this.regulationHash].filter(Boolean)))}get featureWords(){if(!this.regulated||!this.voices||!this.voices.length)return null;const e=this.tickRatesInStaves.some(e=>e<0),t=this.events.filter(e=>!e.zeroHolder&&!e.rest).map(e=>e.ys).flat(1).map(e=>"Y"+2*-e),s=Array.from(new Set(t));this.keySignature&&s.push(`K${this.keySignature}`);const i=this.voices.map(e=>e.map(e=>this.events.find(t=>t.id===e)).filter(e=>!e.zeroHolder&&!e.rest)).filter(e=>e.length),r=e?[]:i.map(e=>e.map(e=>e.scaleChord).join("-")),n=e?[]:i.map(e=>e.map(e=>e.division).join(""));return this.timeSignature&&n.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`),[s,r,n]}get barType(){if(this.voltaEnd)return"VoltaRight";const e=Object.entries(this.barTypes).sort((e,t)=>t[1]-e[1]);return e[0]&&e[0][1]>=1?e[0][0]:null}get partialDuration(){if(!Number.isFinite(this.duration))return!1;const e=$(we,this.timeSignature);return this.duration{const t=e.events.filter(e=>e.grace);if(!t.length)return;const s=[...e.tickMap.entries()].reduce((e,[t,s])=>(s.forEach(s=>{if(!s.grace){e[s.staff]=e[s.staff]||{};const i=e[s.staff][t];e[s.staff][t]=!i||i.x>s.x?s:i}}),e),{}),i=Object.entries(s).reduce((t,[s,i])=>{t[s]=Object.entries(i).map(([e,t])=>({event:t,tick:Number(e),preTick:-240,graces:[]})).sort((e,t)=>e.event.x-t.event.x),t[s].push({tick:e.duration,event:e.endEvent,preTick:0,graces:[]});let r=0;return t[s].forEach(e=>{e.tick>r&&(e.preTick=r,r=e.tick)}),t},{});t.forEach(e=>{const t=i[e.staff];if(t){const s=t.find(t=>t.event.x>e.x);s&&s.graces.push(e),e.roundX=e.x}}),Object.values(i).forEach(e=>e.forEach(e=>{if(e.graces.length){e.event.graceIds=e.graces.map(e=>e.id);const t=e.graces.reduce((e,t)=>e+t.duration,0),s=Math.min(t,e.tick-e.preTick)/t;let i=e.tick;[...e.graces].reverse().forEach(e=>{e.tick=Math.round(i-e.duration*s),i=e.tick})}}))})(this),(e=>{const t=e.events.filter(e=>e.tremoloCatcher&&!e.grace),s=e.events.filter(e=>e.tremoloLink===Ie.Pitcher&&!e.grace);t.forEach(t=>{let i=s.filter(e=>e.division===t.division&&e.xNumber.isFinite(e.tick)&&!e.grace&&!e.rest&&e.division===t.division&&e.dots===t.dots&&e.xt.x-e.x),i.length){const e=i[0];e.catcherId=t.id;const r=Math.max(e.tremolo||3,t.tremolo||3);e.tremolo=r,t.tremolo=r,t.tick||(t.tick=e.tick+e.duration/2);const n=s.indexOf(e);n>=0&&s.splice(n,1)}})})(this),this.updateContextTick()}updateRoundX(){const e=this.tickToX;e&&this.events.forEach(t=>{const s=e[t.tick];Number.isFinite(s)&&(t.roundX=s)})}updateContextTick(){if(!this.staffGroups)return;const e=this.contexts.flat(1);this.staffGroups.flat(1).forEach(t=>{const s=[...this.events.filter(e=>e.staff===t),...e.filter(e=>e.staff===t)];s.sort((e,t)=>t.x-e.x);let i=this.duration;s.forEach(e=>{e instanceof EventTerm?e.fullMeasureRest||e.zeroHolder||(i=e.tick):e instanceof ContextedTerm&&(e.tick=i)})})}asSolution(e=void 0){return this.regulated?{events:this.events.map(t=>{const s={id:t.id,tick:t.tick,tickGroup:t.tickGroup,timeWarp:t.timeWarp};if(e){const i=e.events.find(e=>e.id===t.id);i&&(t.division!==i.division&&(s.division=t.division),t.dots!==i.dots&&(s.dots=t.dots),t.grace!==i.grace&&(s.grace=!!t.grace),t.beam!==i.beam&&(s.beam=t.beam),t.fullMeasureRest!==i.fullMeasureRest&&(s.fullMeasure=t.fullMeasureRest))}return s}),voices:this.voices,duration:this.duration,priority:-this.solutionStat?.loss}:null}applySolution(e){e.timeSignature&&this.basics.forEach(t=>{t.timeSignature=e.timeSignature,t.doubtfulTimesig=!1}),this.voices=e.voices,this.duration=e.duration,this.events.forEach(t=>{t.timeWarp=null,t.tick=null,t.tickGroup=null;const s=e.events?.find(e=>e.id===t.id);s&&(t.tick=s.tick,t.timeWarp=s.timeWarp,t.tickGroup=s.tickGroup,Number.isFinite(s.division)&&(t.division=s.division),Number.isFinite(s.dots)&&(t.dots=s.dots),void 0!==s.beam&&(t.beam=s.beam),void 0!==s.grace&&(t.grace=s.grace?Ee.Grace:void 0),s.fullMeasure&&(t.rest="R"))}),Number.isFinite(e.priority)&&(this.solutionStat={loss:-e.priority}),this.postRegulate()}cleanupRegulation(){this.voices=null,this.duration=null,this.events.forEach(e=>{e.tick=null,e.tickGroup=null,e.timeWarp=null})}regulateTest(){this.duration=0,this.voices=this.rows.map(e=>e.events.map(e=>e.id)),this.voices.forEach(e=>{let t=0;e.map(e=>this.events.find(t=>t.id===e)).forEach((e,s)=>{e.tickGroup=s,e.tick=t,t+=e.duration}),this.duration=Math.max(this.duration,t)})}regulateSimple(){Ae.computeMeasureTicks(this),Ae.computeMeasureVoices(this)}async regulateEquations(e){await Pe.regulateMeasure(this,e)}async regulate({policy:e="advanced",...t}={}){switch(e){case"test":this.regulateTest();break;case"equations":case"advanced":await this.regulateEquations(t);break;default:this.regulateSimple()}this.postRegulate()}createPatch(){return new PatchMeasure({measureIndex:this.measureIndex,staffMask:this.staffMask,basic:this.basics[0],events:this.events,contexts:this.contexts,marks:this.marks,voices:this.voices})}createClusters(){const e=this.voices&&new Set(this.voices.flat(1));return this.staffGroups.filter(e=>e.length).map(t=>{const s=this.position.staffYs[0],i=e=>this.position.staffYs[t.indexOf(e)]-s,r=this.events.filter(e=>t.includes(e.staff));if(!r.length)return null;const n=r.map(s=>({index:s.id,voice:(this.voices||[]).findIndex(e=>e.includes(s.id)),type:s.rest?X.REST:X.CHORD,staff:t.indexOf(s.staff),x:s.tipX,pivotX:s.pivotX,y1:i(s.staff)+("u"===s.stemDirection?s.tipY:s.ys[s.ys.length-1]),y2:i(s.staff)+("u"===s.stemDirection?s.ys[0]:s.tipY),headY:"u"===s.stemDirection?s.ys[0]:s.ys[s.ys.length-1],feature:s.feature,division:s.division,dots:s.dots,beam:s.beam||null,stemDirection:s.stemDirection,grace:!!s.grace,tremoloCatcher:s.tremoloCatcher,timeWarped:!!s.timeWarp,fullMeasure:s.fullMeasureRest,tick:s.tick||0,fake:!s.fullMeasureRest&&!s.grace&&this.voices&&!e.has(s.id)}));if(!n.some(e=>!e.fake))return null;const a=$(we,this.timeSignature);n.unshift({index:0,type:X.BOS,staff:null,division:null,beam:null,dots:null,stemDirection:null,grace:!1,tremoloCatcher:!1,fullMeasure:!1,x:this.position.left,pivotX:this.position.left,y1:0,y2:0,headY:0,feature:null,timeWarped:this.durationn.map(()=>0)),this.voices.forEach(e=>{let t=0;e.forEach(e=>{const s=n.findIndex(t=>t.index===e);s>0&&t>=0&&(o[s][t]=1),t=s}),t>=0&&(o[n.length-1][t]=1)}));const c={...this.solutionStat,patched:this.patched},l=this.backgroundImages&&this.backgroundImages.map(({url:e,position:t})=>({url:e,position:{...t,y:t.y-s}}));return new EventCluster({index:this.measureIndex,duration:this.duration,signatureDuration:a,staffY0:s,elements:n,matrixH:o,annotation:c,backgroundImages:l})}).filter(Boolean)}applyClusters(e){const t=this.events.reduce((e,t)=>Math.max(e,t.id),0)+1;this.matrixH=Array(t+1).fill(null).map(()=>Array(t).fill(0)),e.forEach(e=>{const s=e.elements.map(e=>e.index);console.assert(e.matrixH.length===s.length-1,"unexpected matrixH size:",e.matrixH.length,s.length);for(let i=1;i{const t=this.events.find(t=>t.id===e.index);t&&(t.predisposition=e.predisposition,void 0!==t.predisposition.grace&&(t.grace=t.predisposition.grace?Ee.Grace:null))})}),this.estimatedDuration=e.reduce((e,t)=>e+t.estimatedDuration,0)/e.length}}SpartitoMeasure.className="SpartitoMeasure",SpartitoMeasure.blackKeys=["staffGroups","solutionStat","measureNumber","deposit"];class EditableEvent extends EventTerm{constructor(e){super(e)}get agent(){return new Proxy(this,{get(e,t){const s=e;switch(t){case"id":case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"beam":case"tremolo":case"tremoloLink":case"arpeggioStyle":{const e=s[t];return void 0===e?null:e}case"tying":case"tied":case"glissando":{const e=s[t];return void 0!==e&&e}case"grace":return!!s.grace;case"timeWarp":return s.timeWarp?`${s.timeWarp.numerator}/${s.timeWarp.denominator}`:null;case"multiplier":return s.multiplier?`${s.multiplier.numerator}/${s.multiplier.denominator}`:null;case"pitches":return s.pitches}},set:(e,t,s)=>{const i=e;switch(t){case"tick":case"duration":case"rest":case"division":case"dots":case"stemDirection":case"tying":case"tied":case"beam":case"tremolo":case"tremoloLink":case"glissando":case"arpeggioStyle":return i[t]=s,!0;case"grace":return i.grace=s?Ee.Grace:null,!0;case"timeWarp":if(i.timeWarp=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.timeWarp={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"multiplier":if(i.multiplier=null,s&&"string"==typeof s){const e=s.match(/^(\d+)\/(\d+)/);e&&(i.multiplier={numerator:parseInt(e[1]),denominator:parseInt(e[2])})}return!0;case"id":case"pitches":return!0}return!1},ownKeys:()=>["id","duration","rest","division","dots","stemDirection","tying","tied","beam","timeWarp","multiplier","tremolo","tremoloLink","glissando","arpeggioStyle","tick","grace","pitches"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}}class EditableMeasure extends SpartitoMeasure{constructor(e){super(e),this.events=null,this.events=e.events,this.events?.some(e=>!(e instanceof EditableEvent))&&(this.events=this.events.map(e=>new EditableEvent(e))),this.voices&&this.syncVoiceToEvents()}syncVoiceToEvents(){this.events.forEach(e=>e.voice=-1),this.voices.forEach((e,t)=>{e.forEach(e=>{const s=this.events.find(t=>t.id===e);s?s.voice=t:console.warn("no event with id:",e,this.events.length)})})}syncVoiceFromEvents(){const e=[];this.events.forEach(t=>{t?.voice>=0&&(e[t.voice]=e[t.voice]||[],e[t.voice].push(t))}),e.forEach(e=>e.sort((e,t)=>e.tick-t.tick)),this.voices=e.map(e=>e.map(e=>e.id))}get agent(){return new Proxy(this,{get:(e,t)=>{const s=e;switch(t){case"measureIndex":case"duration":return s[t];case"voices":return s.voices?.map(e=>e.join(","))||null;case"timeSignature":case"keySignature":case"doubtfulTimesig":return s.basics[0][t];case"toJSON":return()=>({measureIndex:s.measureIndex,voices:s.voices,duration:s.duration,timeSignature:s.basics[0].timeSignature,keySignature:s.basics[0].keySignature})}},set:(e,t,s)=>{const i=e;switch(t){case"timeSignature":case"keySignature":case"doubtfulTimesig":return i.basics[0][t]=s,i.basics=i.basics.map(()=>i.basics[0]),!0;case"duration":return i.duration=s,!0;case"measureIndex":case"voices":return!0}return!1},ownKeys:()=>["measureIndex","timeSignature","doubtfulTimesig","keySignature","duration","voices"],getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0})})}makeMIDI(e=120){if(!this.regulated)return null;const t=6e7/e,s=this.voices.map((e,s)=>{const i=e.map(e=>{const t=this.events.find(t=>t.id===e);if(t){const e=t.graceIds?t.graceIds.map(e=>this.events.find(t=>t.id===e)):[];return[...e,t]}return[]}).flat(1),r=i.filter(e=>!e.rest&&Number.isFinite(e.tick)&&e.tick>=0&&Number.isFinite(e.duration)).map(e=>e.pitches.map(t=>[{id:e.id,time:e.tick,type:"channel",subtype:"noteOn",channel:e.staff,noteNumber:q(t),velocity:96},{id:e.id,time:e.tick+e.duration,type:"channel",subtype:"noteOff",channel:e.staff,noteNumber:q(t)}])).flat(2);return r.sort(function(e,t){return e.time-t.time}),0===s&&r.unshift({time:0,type:"meta",subtype:"timeSignature",numerator:this.timeSignature.numerator,denominator:this.timeSignature.denominator,thirtyseconds:8},{time:0,type:"meta",subtype:"setTempo",microsecondsPerBeat:t}),r.forEach(e=>{e.ticks=Math.round(e.time-0)}),r.forEach((e,t)=>{e.deltaTime=e.ticks-(t>0?r[t-1].ticks:0)}),r.push({deltaTime:0,type:"meta",subtype:"endOfTrack"}),r});return{header:{formatType:0,ticksPerBeat:480},tracks:s}}}EditableMeasure.className="EditableMeasure",EditableMeasure.blackKeys=[],function(e){e.ByLines="ByLines",e.ByBlocks="ByBlocks"}(Re||(Re={})),function(e){e.Title="Title",e.Author="Author",e.TempoText="TempoText",e.TempoNumeral="TempoNumeral",e.TextualMark="TextualMark",e.Lyric="Lyric",e.Instrument="Instrument",e.MeasureNumber="MeasureNumber",e.Times="Times",e.Alternation1="Alternation1",e.Alternation2="Alternation2",e.Chord="Chord",e.PageMargin="PageMargin",e.Other="Other"}(De||(De={}));const Fe={[Ne.Open]:1,[Ne.Continue]:0,[Ne.Close]:-1},Le=e=>{if(!e.regulated)return;const t=e.eventMap,s=e.events.length,i=e.voices.flat(1).length,r=e.events.filter(e=>e.timeWarp).length,n=new Set(e.events.filter(e=>e.timeWarp&&!(e.rest&&0===e.division)).map(e=>`${e.timeWarp.numerator}/${e.timeWarp.denominator}`)),a=new Set(n);a.delete("2/3");const o=e.voices.some(e=>{const s=e.map(e=>t[e]);if(!s.some(e=>e.timeWarp))return!1;let i=0,r=0,n=0;return s.some((e,t)=>{const a=e.timeWarp?e.timeWarp.denominator:0;if(a!==i){if(i>0&&(r%i||n<2))return!0;r=0,n=0}return i=a,r+=e.duration,++n,!!(t===s.length-1&&i>0&&(r%i||n<2))})}),c=e.voices.some(e=>{const s=e.map(e=>t[e]);let i=0;return s.some(e=>!e.grace&&(e.ticke.timeWarp&&e.timeWarp.denominator>3).map(e=>e.duration)).size>1,u=$(we,e.timeSignature),h=e.doubtfulTimesig?e.duration:u,m=e.voices.flat(1).map(e=>t[e]),f=m.some(e=>!e||!Number.isFinite(e.tick)||!Number.isFinite(e.division)||e.division<0||!Number.isFinite(e.duration)||e.duration<=0),d=m.reduce((e,t)=>e||t.tick<0||t.tick+t.duration>h,!1),p=e.duration>u,g=m.some(e=>e.grace),y=e.events.filter(e=>e.grace).length,v=y>=m.length,x=m.some(e=>{let t=e.tick*2**(e.division+2);if(e.timeWarp&&(t*=e.timeWarp.denominator),!Number.isFinite(t))return!0;return R(Math.round(t),we)e.reduce(({status:e,broken:s},i,r)=>{const n=t[i];return n.beam?(0===r&&[Ne.Continue,Ne.Close].includes(n.beam)&&(e=1),e+=Fe[n.beam],s=s||!(e>=0&&e<=1)):n.rest||(s=s||0!==e),{status:e,broken:s}},{status:0,broken:!1})).some(({broken:e})=>e);let b=0,k=0;e.voices.forEach(s=>{const i=s.reduce((e,s)=>e+t[s].duration,0);b+=Math.max(0,e.duration-i),k+=Math.max(0,i-e.duration)}),b/=we;const T=e.events.filter(e=>!(e.grace||e.fullMeasureRest||e.tremoloCatcher||e.predisposition&&!(e.predisposition.fakeP<.1)||Number.isFinite(e.tick))).length,w=e.events.filter(e=>!(e.fullMeasureRest||e.grace||e.tremoloCatcher||m.includes(e))).length,{voiceRugged:M}=e.voices.flat(1).reduce((e,t)=>!e.voiceRugged&&e.es.has(t)?{voiceRugged:!0,es:e.es}:(e.es.add(t),e),{voiceRugged:!1,es:new Set}),E=e.tickTwist||0,N=f||E>=1||c||M||e.tickRatesInStaves.some(e=>e<0)||T>2||!e.timeSignature||d||e.duration>h||e.events.some(e=>e.timeWarp&&e.timeWarp.numerator/e.timeWarp.denominator<=.5),I=!N&&!p&&E<.2&&!o&&!a.size&&!x&&!b&&!k&&!!e.voices.length&&!S&&!g&&!v&&(e.duration===h||Number.isFinite(e.estimatedDuration)&&e.estimatedDuration<=.75*h),C=!(N||p||!(E<.3)||o||x||k||S||g);let _=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(_=Math.max(0,Math.min(_,e.estimatedDuration)));const O=e.duration/_;let B=0;if(e.patched&&!f)B=1;else if(!N){const t=Math.tanh(1*Math.abs(b/Math.max(1,e.voices.length)));let s=Math.min(h,3840);Number.isFinite(e.estimatedDuration)&&(s=Math.max(0,Math.min(s,e.estimatedDuration)));B=(1-t)*(1-(s?Math.max(0,1-O)**2:0))*(1-Math.tanh(a.size))*(1-E**2)}return{events:s,validEvents:i,voiceRugged:M,nullEvents:T,fakeEvents:w,warpedEvents:r,complicatedTimewarp:l,spaceTime:b,surplusTime:k,durationRate:O,beamBroken:S,fractionalWarp:o,irregularWarpsN:a.size,irregularTick:x,tickTwist:E,tickOverlapped:c,graceInVoice:g,graceN:y,graceDominant:v,perfect:I,fine:C,error:N,qualityScore:B}};var $e;!function(e){e.Ordinary="ordinary",e.Full="full",e.Conservative="conservative",e.Once="once"}($e||($e={}));const je=(e,t=$e.Ordinary)=>[].concat(...e.map(e=>e.serialize(t))),He=(e,{withBrackets:t=!1}={})=>{let s="",i=!1;for(let t=0;t0&&!i&&(s+=", "),i=!1,s+=e[t].code)}return t?`[${s}]`:s};class SingleMLayout extends SimpleClass{static from(e){const t=new SingleMLayout;return t.measure=e,t}constructor(e=void 0){super(),this.assign(e)}serialize(){return[this.measure]}get seq(){return[this]}get code(){return this.measure.toString()}}SingleMLayout.className="SingleMLayout";class BlockMLayout extends SimpleClass{static trimSeq(e){const t=[];for(const s of e)if(s instanceof BlockMLayout)for(const e of s.seq)t.push(e);else t.push(s);const s=[];let i=null;for(const e of t)e instanceof SingleMLayout?e.measure>i&&(s.push(e),i=e.measure):s.push(e);return s}static fromSeq(e){const t=new BlockMLayout;return t.seq=BlockMLayout.trimSeq(e),t}constructor(e=void 0){super(),this.assign(e)}serialize(e){return je(this.seq,e)}get code(){return He(this.seq,{withBrackets:!0})}}BlockMLayout.className="BlockMLayout";class VoltaMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=je(this.body);if(this.alternates){const s=this.alternates.map(e=>je(e)),i=s[s.length-1];switch(e){case $e.Ordinary:return t.concat(...s);case $e.Conservative:case $e.Full:return[...[].concat(...Array(this.times-1).fill(null).map((e,i)=>[...t,...s[i%(this.times-1)]])),...t,...i];case $e.Once:return[...t,...i]}}else switch(e){case $e.Ordinary:case $e.Conservative:case $e.Once:return t;case $e.Full:return[].concat(...Array(this.times).fill(null).map(()=>t))}console.warn("the current case not handled:",e,this)}get seq(){const e=this.alternates?this.alternates[this.alternates.length-1]:[];return[...this.body,...e]}get code(){const e=He(this.body,{withBrackets:!0});let t=`${this.times}*${e}`;return this.alternates&&(t+="{"+this.alternates.map(e=>He(e,{withBrackets:e.length>1})).join(", ")+"}"),t}}VoltaMLayout.className="VoltaMLayout";class ABAMLayout extends SimpleClass{constructor(e=void 0){super(),this.assign(e)}serialize(e){const t=this.main.serialize(e),s=je(this.main.seq,$e.Once),i=je(this.rest,e);switch(e){case $e.Ordinary:return[...t,...i];case $e.Once:return[...i,...s];case $e.Conservative:case $e.Full:return[...t,...i,...s];default:console.warn("the current case not handled:",e,this)}}get seq(){return[this.main,...this.rest]}get code(){return"<"+this.main.code+", "+He(this.rest)+">"}}ABAMLayout.className="ABAMLayout";var Ve=Object.freeze({__proto__:null,get LayoutType(){return $e},SingleMLayout:SingleMLayout,BlockMLayout:BlockMLayout,VoltaMLayout:VoltaMLayout,ABAMLayout:ABAMLayout}),ze=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,13],s=[1,16],i=[1,15],r=[1,26],n=[1,29],a=[1,28],o=[1,30],c=[5,13,22,27,29],l=[2,15],u=[1,32],h=[5,14,21,22,27,28,29],m={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,measure_layout:4,EOF:5,index_wise_measure_layout:6,"i:":7,"s:":8,segment_wise_measure_layout:9,iw_sequence:10,iw_item:11,range:12,",":13,UNSIGNED:14,"..":15,single:16,iw_block_item:17,iw_volta:18,iw_aba:19,iw_block:20,"[":21,"]":22,"*":23,iw_optional_alternates:24,iw_alternates:25,"{":26,"}":27,"<":28,">":29,sw_sequence:30,sw_item:31,segment:32,sw_block_item:33,sw_volta:34,sw_aba:35,sw_block:36,sw_optional_alternates:37,sw_alternates:38,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"i:",8:"s:",13:",",14:"UNSIGNED",15:"..",21:"[",22:"]",23:"*",26:"{",27:"}",28:"<",29:">"},productions_:[0,[3,2],[4,1],[4,2],[4,2],[6,1],[10,1],[10,1],[10,3],[10,3],[12,3],[11,1],[11,1],[11,1],[11,1],[16,1],[17,1],[20,3],[18,4],[24,0],[24,1],[25,3],[19,5],[9,1],[30,1],[30,2],[31,1],[31,1],[31,1],[31,1],[32,1],[33,1],[36,3],[34,4],[37,0],[37,1],[38,3],[35,4]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:this.$=f(null,n[o]);break;case 3:this.$=f("index-wise",n[o]);break;case 4:this.$=f("segment-wise",b(n[o]));break;case 5:case 23:1===n[o].length&&"BlockMLayout"===n[o][0].__prototype?this.$=n[o][0]:this.$=p(n[o]);break;case 6:case 24:this.$=[n[o]];break;case 7:case 11:case 12:case 13:case 14:case 20:case 27:case 28:case 29:case 35:this.$=n[o];break;case 8:this.$=[...n[o-2],n[o]];break;case 9:this.$=[...n[o-2],...n[o]];break;case 10:this.$=S(n[o-2],n[o]);break;case 15:this.$=d(n[o]);break;case 16:case 31:this.$=p(n[o]);break;case 17:case 32:this.$=n[o-1];break;case 18:case 33:this.$=g(n[o-3],n[o-1],n[o]);break;case 19:case 34:this.$=null;break;case 21:case 36:this.$=x(n[o-1]);break;case 22:this.$=y(n[o-3],n[o-1]);break;case 25:this.$=[...n[o-1],n[o]];break;case 26:this.$=p([n[o]]);break;case 30:this.$=v(n[o]);break;case 37:this.$=y(n[o-2],n[o-1])}},table:[{3:1,4:2,6:3,7:[1,4],8:[1,5],10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[3]},{5:[1,17]},{5:[2,2]},{6:18,10:6,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{9:19,14:r,21:n,28:a,30:20,31:21,32:22,33:23,34:24,35:25,36:27},{5:[2,5],13:o},e(c,[2,6]),e(c,[2,7]),e(c,[2,11]),e(c,[2,12]),e(c,[2,13]),e(c,[2,14]),e(c,l,{15:[1,31],23:u}),e(c,[2,16]),{11:33,14:[1,34],16:9,17:10,18:11,19:12,20:14,21:s,28:i},{10:35,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{1:[2,1]},{5:[2,3]},{5:[2,4]},{5:[2,23],14:r,21:n,28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(h,[2,24]),e(h,[2,26]),e(h,[2,27]),e(h,[2,28]),e(h,[2,29]),e(h,[2,30],{23:[1,37]}),e(h,[2,31]),{14:r,21:n,28:a,31:38,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,28:a,30:39,31:21,32:22,33:23,34:24,35:25,36:27},{11:40,12:41,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{14:[1,42]},{20:43,21:s},{13:[1,44]},{13:l,23:u},{13:o,22:[1,45]},e(h,[2,25]),{21:n,36:46},{14:r,21:n,28:a,30:47,31:21,32:22,33:23,34:24,35:25,36:27},{14:r,21:n,22:[1,48],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,8]),e(c,[2,9]),e(c,[2,10]),e(c,[2,19],{24:49,25:50,26:[1,51]}),{10:52,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},e([5,13,22,26,27,29],[2,17]),e(h,[2,34],{37:53,38:54,26:[1,55]}),{14:r,21:n,28:a,29:[1,56],31:36,32:22,33:23,34:24,35:25,36:27},e([5,14,21,22,26,27,28,29],[2,32]),e(c,[2,18]),e(c,[2,20]),{10:57,11:7,12:8,14:t,16:9,17:10,18:11,19:12,20:14,21:s,28:i},{13:o,29:[1,58]},e(h,[2,33]),e(h,[2,35]),{14:r,21:n,28:a,30:59,31:21,32:22,33:23,34:24,35:25,36:27},e(h,[2,37]),{13:o,27:[1,60]},e(c,[2,22]),{14:r,21:n,27:[1,61],28:a,31:36,32:22,33:23,34:24,35:25,36:27},e(c,[2,21]),e(h,[2,36])],defaultActions:{3:[2,2],17:[2,1],18:[2,3],19:[2,4]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};const f=(e,t)=>({__prototype:"MesaureLayout",type:e,data:t}),d=e=>({__prototype:"SingleMLayout",measure:Number(e)}),p=e=>({__prototype:"BlockMLayout",seq:e}),g=(e,t,s)=>({__prototype:"VoltaMLayout",times:Number(e),body:t,alternates:s}),y=(e,t)=>({__prototype:"ABAMLayout",main:e,rest:t}),v=e=>({segment:!0,length:Number(e)}),x=e=>e.map(e=>"BlockMLayout"===e.__prototype?e.seq:[e]),S=(e,t)=>{if(e=Number(e),!((t=Number(t))>=e))throw new Error(`invalid measure range: ${e}..${t}`);return Array(t+1-e).fill(0).map((t,s)=>d(e+s))},b=(e,t={index:1})=>{const s=e=>[].concat(...e.map(e=>((e,t)=>{if(e.segment){const s=t.index;return t.index+=e.length,Array(e.length).fill(0).map((e,t)=>d(s+t))}return[b(e,t)]})(e,t)));switch(e.__prototype){case"BlockMLayout":e.seq=s(e.seq);break;case"VoltaMLayout":e.body=s(e.body),e.alternates=e.alternates&&e.alternates.map(s);break;case"ABAMLayout":e.main=b(e.main,t),e.rest=s(e.rest)}return e};var k={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:case 3:case 4:return t.yytext;case 2:return 14;case 5:return 5}},rules:[/^(?:\s+)/,/^(?:([*,\[\]<>{}]))/,/^(?:(([1-9])([0-9])*))/,/^(?:(([a-z])+):)/,/^(?:\.\.)/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function T(){this.yy={}}return m.lexer=k,T.prototype=m,m.Parser=T,new T}();ze.Parser;ze.Parser;var qe=function(){return ze.parse.apply(ze,arguments)};var Ge,We;!function(e){e[e.Default=0]="Default",e[e.Brace=1]="Brace",e[e.Bracket=2]="Bracket",e[e.Square=3]="Square"}(Ge||(Ge={})),function(e){e[e.Blank=0]="Blank",e[e.Dashed=1]="Dashed",e[e.Solid=2]="Solid"}(We||(We={}));const Ue=e=>({type:Ge.Default,staff:e}),Ye={"{":Ge.Brace,"}":Ge.Brace,"<":Ge.Bracket,">":Ge.Bracket,"[":Ge.Square,"]":Ge.Square},Xe={",":We.Blank,"-":We.Solid,".":We.Dashed},Ke=()=>btoa(Math.random().toString().substr(2)).replace(/=/g,"").split("").reverse().slice(0,6).join(""),Ze=(e,t)=>{let s=t;for(;s.length;){const t=s.shift(),i=Ye[t];if(i){if("}>]".includes(t)&&i===e.type)break;if("{<[".includes(t)){const t={type:i,level:Number.isFinite(e.level)?e.level+1:0};s=Ze(t,s),e.subs=e.subs||[],e.subs.push(t)}}else e.subs=e.subs||[],e.subs.push(Ue(t))}for(;e.type===Ge.Default&&e.subs&&1===e.subs.length;){const t=e.subs[0];e.type=t.type,e.subs=t.subs,e.staff=t.staff,e.level=t.level}for(;e.subs&&1===e.subs.length&&e.subs[0].type===Ge.Default;){const t=e.subs[0];e.subs=t.subs,e.staff=t.staff}return e.grand=e.type===Ge.Brace&&e.subs&&e.subs.every(e=>e.staff),s},Je=e=>e.staff?e.staff:e.subs?Je(e.subs[0]):void 0,Qe=e=>e.staff?e.staff:e.subs?Qe(e.subs[e.subs.length-1]):void 0,et=(e,t)=>{t[(e=>e.staff?e.staff:e.subs?`${Je(e)}-${Qe(e)}`:void 0)(e)]=e,e.subs&&e.subs.forEach(e=>et(e,t))};class StaffLayout{constructor(e){const t=new Set;e.forEach((e,s)=>{e.id=((e,t,s)=>{let i=s;for(i?e.has(i)&&(i+="_"+t.toString()):i=t.toString();e.has(i);)i+="_"+Ke();return i})(t,s+1,e.id),t.add(e.id)}),this.staffIds=e.map(e=>e.id),this.conjunctions=e.slice(0,e.length-1).map(e=>e.conjunction?Xe[e.conjunction]:We.Blank);const s=[].concat(...e.map(e=>[...e.leftBounds,e.id,...e.rightBounds]));this.group={type:Ge.Default},Ze(this.group,s);const i={};et(this.group,i),this.groups=Object.entries(i).map(([e,t])=>{let s=e.split("-");1===s.length&&(s=[s[0],s[0]]);return{group:t,range:s.map(e=>this.staffIds.indexOf(e)),key:e}}),this.maskCache=new Map}get stavesCount(){return this.staffIds?this.staffIds.length:null}get partGroups(){const e=this.groups.filter(e=>e.group.grand);return this.groups.filter(t=>{if(t.group.grand)return!0;if(t.range[0]===t.range[1]){const s=t.range[0];return!e.some(e=>e.range[0]<=s&&e.range[1]>=s)}return!1})}get standaloneGroups(){const e=[],t=s=>{s.grand?e.push(s.subs.map(e=>e.staff)):s.staff?e.push([s.staff]):s.subs&&s.subs.forEach(e=>t(e))};return t(this.group),e}conjunctionBetween(e,t){if(t<=e)return null;let s=We.Solid;for(let i=e;it&1<({ids:e.staffIds.slice(t.range[0],t.range[1]+1).filter(e=>s.includes(e)),...t})).filter(({ids:e})=>e.length).map(({ids:e,...t})=>({key:t.key,group:t.group,range:[s.indexOf(e[0]),s.indexOf(e[e.length-1])]})),r=s.slice(0,s.length-1).map((t,i)=>{const r=s[i+1];return e.conjunctionBetween(e.staffIds.indexOf(t),e.staffIds.indexOf(r))});return{staffIds:s,conjunctions:r,groups:i}}mask(e){return this.maskCache.get(e)||this.maskCache.set(e,StaffLayout.makeMaskLayout(this,e)),this.maskCache.get(e)}partialMaskCode(e,t=!1){const s=this.staffIds.map((t,s)=>s(e[this.staffIds[s]]=t,e),{}),i=e=>{if(e.staff)return[s[e.staff]?e.staff:null,null===s[e.staff]];const t=e.subs.map(e=>i(e)),r=t.map(e=>e[0]).filter(Boolean).join(","),n=t.some(([e,t])=>t),a=r?((e,t=!1)=>{if(e===Ge.Default)return e=>e;if(t)switch(e){case Ge.Brace:return e=>`{${e}`;case Ge.Bracket:return e=>`<${e}`;case Ge.Square:return e=>`[${e}`;default:return e=>e}switch(e){case Ge.Brace:return e=>`{${e}}`;case Ge.Bracket:return e=>`<${e}>`;case Ge.Square:return e=>`[${e}]`;default:return e=>e}})(e.type,n)(r):null;return[a,n]};let[r]=i(this.group);return r=r||"",t||(r=r.replace(/[_\w]+/g,"")),r}}var tt=function(){var e=function(e,t,s,i){for(s=s||{},i=e.length;i--;s[e[i]]=t);return s},t=[1,15],s=[1,16],i=[1,17],r=[1,11],n=[1,12],a=[1,13],o=[1,24],c=[1,25],l=[1,26],u=[5,11,12,13,15,16,17,21,22,23,24],h=[15,16,17,21,22,23,24],m=[11,12,13,15,16,17,21,22,23,24],f=[5,11,12,13,21,22,23,24],d={trace:function(){},yy:{},symbols_:{error:2,start_symbol:3,staff_layout:4,EOF:5,seq:6,seq_id:7,seq_br:8,seq_con:9,bound_left:10,"<":11,"[":12,"{":13,bound_right:14,">":15,"]":16,"}":17,bound_lefts:18,bound_rights:19,conjunction:20,"-":21,",":22,".":23,ID:24,seq_bl:25,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",11:"<",12:"[",13:"{",15:">",16:"]",17:"}",21:"-",22:",",23:".",24:"ID"},productions_:[0,[3,2],[4,1],[6,0],[6,1],[6,1],[6,1],[10,1],[10,1],[10,1],[14,1],[14,1],[14,1],[18,1],[18,2],[19,1],[19,2],[20,1],[20,1],[20,1],[7,1],[7,2],[7,2],[7,2],[7,2],[25,1],[25,2],[25,2],[25,2],[8,2],[8,2],[8,2],[9,1],[9,2],[9,2],[9,2],[9,2]],performAction:function(e,t,s,i,r,n,a){var o=n.length-1;switch(r){case 1:return n[o-1];case 2:n[o].next(),this.$=n[o].toJSON();break;case 3:this.$=new Seq;break;case 13:case 15:this.$=[n[o]];break;case 14:case 16:this.$=[...n[o-1],n[o]];break;case 20:this.$=new Seq,this.$.tip.i(n[o]);break;case 21:case 23:n[o-1].next(),n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 22:case 24:n[o-1].tip.i(n[o]),this.$=n[o-1];break;case 25:this.$=new Seq,this.$.tip.bl(n[o]);break;case 26:case 27:n[o-1].next(),n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 28:n[o-1].tip.bl(n[o]),this.$=n[o-1];break;case 29:case 30:case 31:n[o-1].tip.br(n[o]),this.$=n[o-1];break;case 32:this.$=new Seq,this.$.tip.con(n[o]),this.$.next();break;case 33:case 34:case 35:case 36:n[o-1].tip.con(n[o]),n[o-1].next(),this.$=n[o-1]}},table:[{3:1,4:2,5:[2,3],6:3,7:4,8:5,9:6,10:14,11:t,12:s,13:i,18:10,20:9,21:r,22:n,23:a,24:[1,7],25:8},{1:[3]},{5:[1,18]},{5:[2,2]},{5:[2,4],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:22,19:20,20:21,21:r,22:n,23:a,24:[1,19]},{5:[2,5],10:14,11:t,12:s,13:i,18:29,20:28,21:r,22:n,23:a,24:[1,27]},{5:[2,6],10:14,11:t,12:s,13:i,14:23,15:o,16:c,17:l,18:33,19:31,20:32,21:r,22:n,23:a,24:[1,30]},e(u,[2,20]),{14:23,15:o,16:c,17:l,19:35,20:36,21:r,22:n,23:a,24:[1,34]},e(u,[2,32]),e(h,[2,25],{10:37,11:t,12:s,13:i}),e(u,[2,17]),e(u,[2,18]),e(u,[2,19]),e(m,[2,13]),e(m,[2,7]),e(m,[2,8]),e(m,[2,9]),{1:[2,1]},e(u,[2,21]),e(f,[2,29],{14:38,15:o,16:c,17:l}),e(u,[2,33]),e(h,[2,26],{10:37,11:t,12:s,13:i}),e(u,[2,15]),e(u,[2,10]),e(u,[2,11]),e(u,[2,12]),e(u,[2,23]),e(u,[2,35]),e(h,[2,27],{10:37,11:t,12:s,13:i}),e(u,[2,24]),e(f,[2,31],{14:38,15:o,16:c,17:l}),e(u,[2,36]),e(h,[2,28],{10:37,11:t,12:s,13:i}),e(u,[2,22]),e(f,[2,30],{14:38,15:o,16:c,17:l}),e(u,[2,34]),e(m,[2,14]),e(u,[2,16])],defaultActions:{3:[2,2],18:[2,1]},parseError:function(e,t){if(!t.recoverable){var s=new Error(e);throw s.hash=t,s}this.trace(e)},parse:function(e){var t=this,s=[0],i=[null],r=[],n=this.table,a="",o=0,c=0,l=r.slice.call(arguments,1),u=Object.create(this.lexer),h={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(h.yy[m]=this.yy[m]);u.setInput(e,h.yy),h.yy.lexer=u,h.yy.parser=this,void 0===u.yylloc&&(u.yylloc={});var f=u.yylloc;r.push(f);var d=u.options&&u.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var p,g,y,v,x,S,b,k,T=function(){var e;return"number"!=typeof(e=u.lex()||1)&&(e=t.symbols_[e]||e),e},w={};;){if(g=s[s.length-1],this.defaultActions[g]?y=this.defaultActions[g]:(null==p&&(p=T()),y=n[g]&&n[g][p]),void 0===y||!y.length||!y[0]){var M="";for(x in k=[],n[g])this.terminals_[x]&&x>2&&k.push("'"+this.terminals_[x]+"'");M=u.showPosition?"Parse error on line "+(o+1)+":\n"+u.showPosition()+"\nExpecting "+k.join(", ")+", got '"+(this.terminals_[p]||p)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==p?"end of input":"'"+(this.terminals_[p]||p)+"'"),this.parseError(M,{text:u.match,token:this.terminals_[p]||p,line:u.yylineno,loc:f,expected:k})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+p);switch(y[0]){case 1:s.push(p),i.push(u.yytext),r.push(u.yylloc),s.push(y[1]),p=null,c=u.yyleng,a=u.yytext,o=u.yylineno,f=u.yylloc;break;case 2:if(S=this.productions_[y[1]][1],w.$=i[i.length-S],w._$={first_line:r[r.length-(S||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(S||1)].first_column,last_column:r[r.length-1].last_column},d&&(w._$.range=[r[r.length-(S||1)].range[0],r[r.length-1].range[1]]),void 0!==(v=this.performAction.apply(w,[a,c,o,h.yy,y[1],i,r].concat(l))))return v;S&&(s=s.slice(0,-1*S*2),i=i.slice(0,-1*S),r=r.slice(0,-1*S)),s.push(this.productions_[y[1]][0]),i.push(w.$),r.push(w._$),b=n[s[s.length-2]][s[s.length-1]],s.push(b);break;case 3:return!0}}return!0}};class Item{constructor(){this.id=null,this.leftBounds=[],this.rightBounds=[],this.conjunction=null}i(e){return this.id=e,this}bl(e){return this.leftBounds=e,this}br(e){return this.rightBounds=e,this}con(e){return this.conjunction=e,this}}class Seq{constructor(){this.body=[],this.tip=new Item}next(){return this.body.push(this.tip),this.tip=new Item,this}toJSON(){return this.body}}var p={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,s=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var i=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===i.length?this.yylloc.first_column:0)+i[i.length-s.length].length-s[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var s,i,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(i=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=i.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:i?i[i.length-1].length-i[i.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],s=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),s)return s;if(this._backtrack){for(var n in r)this[n]=r[n];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,s,i;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),n=0;nt[0].length)){if(t=s,i=n,this.options.backtrack_lexer){if(!1!==(e=this.test_match(s,r[n])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,r[i]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,s,i){switch(s){case 0:break;case 1:return t.yytext;case 2:return 24;case 3:return 5}},rules:[/^(?:\s+)/,/^(?:([-,.\[\]<>{}]))/,/^(?:([a-zA-Z_0-9]+))/,/^(?:$)/],conditions:{INITIAL:{rules:[0,1,2,3],inclusive:!0}}};function g(){this.yy={}}return d.lexer=p,g.prototype=d,d.Parser=g,new g}();tt.Parser;tt.Parser;var st=function(){return tt.parse.apply(tt,arguments)};const it=e=>{const t=st(e);return new StaffLayout(t)};class SemanticGraph extends SimpleClass{constructor(e){super(),super.assign(e)}static fromPoints(e=[]){const t=new SemanticGraph;return t.points=e,t}getLayer(e){return this.points.filter(t=>t.semantic===e)}getConfidentLayer(e,t){return this.points.filter(s=>s.semantic===e&&(!Number.isFinite(s.confidence)||s.confidence>=t))}getSystemPoints(){return this.points.filter(e=>N.includes(e.semantic))}getStaffPoints(){return this.points.filter(e=>!N.includes(e.semantic))}offset(e,t){this.points.forEach(s=>{s.x+=e,s.y+=t})}scale(e){this.points.forEach(t=>{t.x*=e,t.y*=e})}transform(e){this.points.forEach(t=>{let s=t.x*e[0][0]+t.y*e[1][0]+e[2][0];const i=t.x*e[0][1]+t.y*e[1][1]+e[2][1];if(t.extension){if(Number.isFinite(t.extension.y1)){const i=t.x*e[0][1]+t.extension.y1*e[1][1]+e[2][1],r=t.x*e[0][1]+t.extension.y2*e[1][1]+e[2][1];s=t.x*e[0][0]+.5*(t.extension.y1+t.extension.y2)*e[1][0]+e[2][0],t.extension.y1=i,t.extension.y2=r}if(Number.isFinite(t.extension.width)){const s=Math.sqrt(e[0][0]*e[1][1]-e[0][1]*e[1][0]);t.extension.width*=s,t.extension.height*=s}}t.x=s,t.y=i})}}SemanticGraph.className="SemanticGraph";const rt=[w.ClefG,w.ClefF,w.ClefC,w.TimesigC44,w.TimesigC22,w.TimesigZero,w.TimesigOne,w.TimesigTwo,w.TimesigThree,w.TimesigFour,w.TimesigFive,w.TimesigSix,w.TimesigSeven,w.TimesigEight,w.TimesigNine,w.OctaveShift8va,w.OctaveShift8vb,w.OctaveShift0,w.Zero,w.One,w.Two,w.Three,w.Four,w.Five,w.Six,w.Seven,w.Eight,w.Nine,w.AccNatural,w.AccSharp,w.AccDoublesharp,w.AccFlat,w.AccFlatflat,w.NoteheadS0,w.NoteheadS1,w.NoteheadS2,w.NoteheadS1stemU,w.NoteheadS1stemD,w.NoteheadS2stemU,w.NoteheadS2stemD,w.Rest0,w.Rest1,w.Rest2,w.Rest3,w.Rest4,w.Rest5,w.Rest6,w.Rest0W,w.RestM1,w.SlurBegin,w.SlurEnd,w.Dot,w.f,w.p,w.m,w.n,w.r,w.s,w.z,w.ScriptFermata,w.ScriptShortFermata,w.ScriptSforzato,w.ScriptStaccato,w.ScriptStaccatissimo,w.ScriptTurn,w.ScriptTrill,w.ScriptSegno,w.ScriptCoda,w.ScriptArpeggio,w.ScriptPrall,w.ScriptMordent,w.ScriptMarcato,w.ScriptTenuto,w.ScriptPortato,w.PedalStar,w.PedalPed,w.GraceNotehead,w.BeamLeft,w.BeamRight,w.BeamContinue,w.CrescendoBegin,w.CrescendoEnd,w.DecrescendoBegin,w.DecrescendoEnd,w.TremoloLeft,w.TremoloRight,w.TremoloMiddle],nt=[w.AccNatural,w.AccSharp,w.AccDoublesharp,w.AccFlat,w.AccFlatflat,w.NoteheadS0,w.NoteheadS1,w.NoteheadS2,w.NoteheadS1stemU,w.NoteheadS1stemD,w.NoteheadS2stemU,w.NoteheadS2stemD],at=[w.SignLined,w.SignInterval],ot=[w.NoteheadS1,w.NoteheadS2],ct={AccSharp:K.KeySharp,AccNatural:K.KeyNatural,AccFlat:K.KeyFlat},lt={[w.NoteheadS1]:{up:w.NoteheadS1stemU,down:w.NoteheadS1stemD},[w.NoteheadS2]:{up:w.NoteheadS2stemU,down:w.NoteheadS2stemD}},ut=[w.Rest0,w.Rest1,w.Rest2,w.Rest3,w.Rest4,w.Rest5,w.Rest6],ht={[K.BeamLeft]:"Open",[K.BeamRight]:"Close",[K.BeamContinue]:"Continue"},mt={Alter1:De.Alternation1,Alter2:De.Alternation2},ft=(e,t)=>{switch(e.length){case 0:return;case 1:return e[0];case 2:return"u"===t?Math.min(...e):Math.max(...e);default:{const s=e.reduce((e,t)=>e+t,0)/e.length;return e.sort((e,t)=>Math.abs(e-s)-Math.abs(t-s)),ft(e.slice(0,e.length-1),t)}}};class Measure extends SimpleClass{constructor(e){super(),super.assign(e),this.tokens=this.tokens||[],this.antiTokens=this.antiTokens||[],this.barTypes=this.barTypes||{}}get right(){return this.left+this.width}get noteheads(){return this.tokens.filter(e=>e.isNotehead).sort((e,t)=>e.x-t.x)}get chordRects(){const e=this.noteheads.filter(e=>[K.NoteheadS0,K.NoteheadS1stemU,K.NoteheadS2stemU,K.NoteheadS1stemD,K.NoteheadS2stemD].includes(e.type));let t=0;const s=e.reduce((e,s)=>{const i=s.tip?`${s.tip.x}|${s.tip.y}`:`nul${t}`;let r=`${s.type}|${i}`;return!s.tip&&e[r]&&(e[r].some(e=>Math.abs(e.x-s.x){const t=Math.min(...e.map(e=>e.x)),s=Math.max(...e.map(e=>e.x)),i=Math.min(...e.map(e=>e.y)),r=Math.max(...e.map(e=>e.y)),n=e[0],a=n&&n.tip?n.tip.x:t;let o=t,c=s-t,l=null;switch(n.type){case K.NoteheadS0:o-=M.NoteheadS0/2,c+=M.NoteheadS0;break;case K.NoteheadS1stemU:case K.NoteheadS2stemU:l="u",o-=M.NoteheadS1,c+=M.NoteheadS1;break;case K.NoteheadS1stemD:case K.NoteheadS2stemD:l="d",c+=M.NoteheadS1}return{x:o,width:c,stemX:a,stemDirection:l,top:i,bottom:r,tip:n.tip}})}get timeWarped(){return this.tokens&&this.tokens.some(e=>e.timeWarped)}get additionalLines(){const e=this.getChords();return[...e.filter(e=>e.ys.some(e=>e<=-3)).map(e=>({left:e.left,right:e.right,n:Math.ceil(Math.min(...e.ys))+2})),...e.filter(e=>e.ys.some(e=>e>=3)).map(e=>({left:e.left,right:e.right,n:Math.floor(Math.max(...e.ys))-2}))].map(e=>({left:e.left-.28,right:e.right+.28,n:e.n}))}getChords(){const e=this.tokens.filter(e=>ue.includes(e.type)),t=this.tokens.filter(e=>pe.includes(e.type)),s=this.tokens.filter(e=>ye.includes(e.type)),i=this.chordRects.map(e=>{const t=this.noteheads.filter(t=>t.direction===e.stemDirection&&t.left>=e.x&&t.right<=e.x+e.width+.2&&t.y>=e.top&&t.y<=e.bottom);t.sort((e,t)=>t.y-e.y);const s=t.map(e=>e.y),i=t.map(e=>e.id),r=t.reduce((e,t)=>Math.max(e,t.division),0);return{rect:e,left:e.x,right:e.x+e.width,pivotX:(n=t,ft(n.map(e=>Number.isFinite(e.pivotX)?e.pivotX:e.x),n[0].direction)),ys:s,tip:e.tip,noteIds:i,division:r,dots:null,rest:!1,stemDirection:e.stemDirection,beam:null};var n}).sort((e,t)=>t.left-e.left),r=new Set,n=i.map(({rect:i,...n})=>{if(n.division>=1){const t=[i.bottom,i.top];switch(i.stemDirection){case"u":t[0]=i.tip?i.tip.y-.2:i.top-6-.5;break;case"d":t[1]=i.tip?i.tip.y+.2:i.bottom+6+.5}const a=e.filter(e=>!r.has(e.id)&&e.x>i.stemX-.2&&e.xt[0]&&e.yMath.max(e,t.division),n.division),a.forEach(e=>r.add(e.id)),n.division>=3){const e=i.tip&&s.find(e=>Math.abs(i.tip.x-e.x)<.3&&Math.abs(i.tip.y-e.y)<.7);e&&(n.beam=ht[e.type])}}const a=t.filter(e=>!r.has(e.id)&&e.x>i.x+i.width-.2&&e.xi.top-1&&e.y<=i.bottom+.5);return n.dots=a.reduce((e,t)=>Math.max(e,t.dots),0),a.forEach(e=>r.add(e.id)),n});return n.reverse(),n}getRests(){const e=this.tokens.filter(e=>le.includes(e.type)),t=this.tokens.filter(e=>pe.includes(e.type));return e.map(e=>{const s=t.filter(t=>t.x>e.x+.5&&t.xe.y-1&&t.yMath.max(e,t.dots),0);return{left:e.x-.75,right:e.x+.75,pivotX:e.x,rest:!0,ys:[e.y],noteIds:[e.id],dots:s,division:e.division,stemDirection:null}})}getEvents(){return[...this.getChords(),...this.getRests()].sort((e,t)=>e.left-t.left)}getContexts(e={}){return this.tokens.filter(e=>e.isContexted).sort((e,t)=>e.x-t.x).map(t=>new ContextedTerm({x:t.x,y:t.y,tokenType:t.type,...e}))}assignAccessoriesOnEvents(e){e.forEach(e=>e.accessories=e.accessories||[]);this.tokens.filter(e=>xe.includes(e.type)).forEach(t=>{const s=e.filter(e=>t.x>e.left-1&&t.x0){let e=s[0];s.length>1&&(e=s.map(e=>({event:e,d:Math.min(...e.ys.map(e=>Math.abs(e-t.y)))})).sort(({d:e},{d:t})=>e-t).map(({event:e})=>e)[0]);let i=t.y>Math.max(...e.ys)?Me.Down:Me.Up;Se.includes(t.type)&&(i=null),e.accessories.push({type:t.type,id:t.id,direction:i,x:t.x-e.left})}});const t=[...e];t.sort((e,t)=>e.left-t.left);this.tokens.filter(e=>e.type===K.ScriptArpeggio).forEach(e=>{const s=t.find(t=>e.xtt>e.y));s&&s.accessories.push({type:K.ScriptArpeggio,id:e.id,x:e.x-s.left})});this.tokens.filter(e=>e.type===K.GraceNotehead).forEach(t=>{const s=e.find(e=>t.x>e.left&&t.xMath.abs(t.y-e)<.4));s&&(s.grace=Ee.Grace)});const s=this.tokens.filter(e=>e.type===K.TremoloLeft),i=this.tokens.filter(e=>e.type===K.TremoloRight),r=this.tokens.filter(e=>e.type===K.TremoloMiddle),n=e.filter(e=>!e.rest).map(e=>{const t=[...e.ys];e.tip?t.push(e.tip.y):(t.push(e.ys[0]+2),t.push(e.ys[e.ys.length-1]-2));const s=e.tip?e.tip.x:e.left,i=e.tip?e.tip.x:e.right;return{event:e,top:Math.min(...t),bottom:Math.max(...t),stemL:s,stemR:i}});r.forEach(e=>{const t=n.find(t=>!!t.event.tip&&(e.y>t.top&&e.y{const t=n.find(t=>e.y>t.top&&e.yt.stemR&&e.x{const t=n.find(t=>e.y>t.top&&e.yt.stemL-1.6);t&&(t.event.tremolo=t.event.tremolo||2,++t.event.tremolo,t.event.tremoloLink=Ie.Catcher)})}assignFeaturesOnEvents(e,t){const s=t.filter(e=>e.x>this.left&&e.xut.includes(e.semantic)),r=s.filter(e=>e.semantic===w.Flag3),n=s.filter(e=>e.semantic===w.Dot),a=s.filter(e=>e.semantic===w.BeamLeft),o=s.filter(e=>e.semantic===w.BeamContinue),c=s.filter(e=>e.semantic===w.BeamRight),l=s.filter(e=>e.semantic===w.GraceNotehead),u=s.filter(e=>e.semantic===w.TremoloRight),h=s.filter(e=>e.semantic===w.vline_Stem),m=s.filter(e=>e.semantic===w.NoteheadS0),f=s.filter(e=>e.semantic===w.NoteheadS1),d=s.filter(e=>e.semantic===w.NoteheadS2);e.forEach(e=>{const t=e.tip?e.tip.x:(e.left+e.right)/2,s=e.tip?Math.min(e.tip.y,e.ys[e.ys.length-1]):e.ys[e.ys.length-1],p=e.tip?Math.max(e.tip.y,e.ys[0]):e.ys[0],g=e.tip?e.tip.x:e.left,y=[0,0,0,0,0,0,0];if(e.rest){i.filter(s=>P(s,{x:t,y:e.ys[0]})<.5).forEach(e=>{const t=ut.indexOf(e.semantic);y[t]=Math.max(y[t],e.confidence)})}else{const i=[m,f,d].map(t=>t.filter(t=>t.x>e.left&&t.xs-.25&&t.yMath.max(0,...e.map(e=>e.confidence))),n=r.filter(e=>e.y>s-.2&&e.yt.confidence-e.confidence),y[0]=i[0],y[1]=i[1],y[2]=i[2],Array(y.length-3).fill(0).forEach((e,t)=>y[3+t]=n[t]?n[t].confidence:0)}const v=n.filter(s=>s.x>t&&s.xv.some(t=>e.x>t.x&&Math.abs(e.y-t.y)<.2)),S=[Math.max(0,...v.map(e=>e.confidence)),Math.max(0,...x.map(e=>e.confidence))],b=[a,o,c].map(e=>e.filter(e=>Math.abs(e.x-t)<.2&&e.y>s-.2&&e.yMath.max(0,...e.map(e=>e.confidence))),k=h.filter(s=>P({x:t,y:e.ys[0]},{x:s.x,y:s.extension.y2})<.5),T=h.filter(s=>P({x:t,y:e.ys[e.ys.length-1]},{x:s.x,y:s.extension.y1})<.5),w=[Math.max(0,...k.map(e=>e.confidence)),Math.max(0,...T.map(e=>e.confidence))],M=l.filter(s=>Math.abs(s.x-t)<.6&&e.ys.some(e=>Math.abs(s.y-e)<.4)),E=Math.max(0,...M.map(e=>e.confidence)),N=0===e.division?u.filter(t=>t.x>e.left-2&&t.xe.y>s-.04&&e.yg-2&&e.xe.confidence));e.feature={divisions:y,dots:S,beams:b,stemDirections:w,grace:E,tremoloCatcher:I}})}}Measure.className="Measure",Measure.blackKeys=["tokens","antiTokens"];class Staff extends SimpleClass{constructor({measureCount:e=null,measureBars:t=null,...s}={}){if(super(),super.assign(s),this.height=this.height||10,this.staffY=this.staffY||5,t){let e=0;this.measures=t.map(t=>{const s=new Measure({left:e,width:t-e,height:this.height});return e=t,s})}else this.measures=e?Array(e).fill(null).map(()=>new Measure):[]}get noteRange(){const e=[].concat(...this.measures.map(e=>e.noteheads)).map(e=>e.y);return{top:Math.min(-2,...e),bottom:Math.max(2,...e)}}get additionalLines(){return[].concat(...this.measures.map(e=>e.additionalLines))}rearrangeMeasures(e){if(!e.length)return void console.warn("rearrangeMeasures error, measureBars are empty.");const t=this.measures?.map(e=>e.tokens).flat(1)||[];let s=0;this.measures=e.map(e=>{const t=new Measure({left:s,width:e-s,height:this.height});return s=e,t}),this.reassignTokens(t)}reassignTokens(e=null){e||(e=[].concat(...this.measures.map(e=>e.tokens))),this.measures.forEach(e=>e.tokens=[]),e.forEach(e=>{for(const t of this.measures)if(e.xe.semantic===w.TempoNotehead).forEach(e=>{const t=i.findIndex(t=>/^Notehead/.test(t.semantic)&&P(e,t)<.3);t>=0&&i.splice(t,1)});const r=e=>t.displacementSemantics?.[e]?this.semantics.find(t=>t.id===e):null;i.filter(e=>rt.includes(e.semantic)).forEach(e=>this.appendPoint(e,{points:i}));const n=i.filter(e=>e.semantic===w.vline_Stem).filter(e=>e.extension.y2-e.extension.y1>1.5).map(e=>({x:e.x,y1:e.extension.y1,y2:e.extension.y2,direction:null})),a=i.filter(e=>ot.includes(e.semantic)&&e.y>this.semanticTop&&e.y{if((s?1:0)^(e.x{const t=a.filter(t=>Math.abs(t.x-e.x)-M[t.semantic]/2<.32&&Math.abs(t.x-e.x)-M[t.semantic]/2>-.44&&t.y>e.y1-.5&&t.ye.x&&t.y>e.y2)&&!(t.xe.y-t.y);const s=Math.min(...t.map(t=>t.y-e.y1)),n=Math.min(...t.map(t=>e.y2-t.y));if(Math.min(s,n)>.5)return;const a=s!o.has(e.id)).forEach(e=>{const a=n.filter(t=>Math.abs(t.x-e.x)<2&&e.y>t.y1&&e.yMath.abs(t.x-e.x)-Math.abs(s.x-e.x)),o=a[0];if(o){const t="d"===o.direction,s=t?lt[e.semantic].down:lt[e.semantic].up;this.appendPoint({id:e.id,semantic:s,x:o.x+c(e,o,t),y:e.y,pivotX:e.x,confidence:e.confidence},{tip:{x:o.x,y:t?o.y2:o.y1},antiPoint:r(e.id),points:i})}else s.debug("isolated notehead:",t.index,this.index,e)});const l=i.filter(e=>e.semantic===w.Flag3);l.sort((e,t)=>e.x-t.x),this.appendFlags(l,n);const u=i.filter(e=>e.semantic===w.Dot).map(e=>{const t=A(e.y,.5);return{x:e.x,y:t}}).reduce((e,t)=>(e[t.y]=e[t.y]||[],e[t.y].push(t),e),{});Object.entries(u).forEach(([e,t])=>{const s=Number(e);if(t.length>1){t.sort((e,t)=>e.x-t.x);for(let e=0;ee.x>n.x&&e.x-n.x<1.2)&&this.appendPoint({id:n.id,x:n.x,y:s,confidence:n.confidence},{type:K.DotDot,antiPoint:r(n.id),points:i})}}});const h=i.filter(e=>e.semantic===w.KeyAcc);i.filter(e=>ct[e.semantic]).forEach(e=>{h.some(t=>Math.abs(e.x-t.x)<.5&&Math.abs(e.y-t.y)<1)&&this.appendPoint({id:e.id,x:e.x,y:e.y,confidence:e.confidence},{type:ct[e.semantic],points:i})});i.filter(e=>e.semantic===w.OctaveShift8).forEach(e=>{const t=e.y<0?K.OctaveShift8va:K.OctaveShift8vb;this.appendPoint({id:e.id,x:e.x,y:e.y,confidence:e.confidence},{type:t,points:i})});const m=this.semantics.filter(e=>[w.VoltaLeft,w.VoltaRight].includes(e.semantic));m.sort((e,t)=>e.x-t.x);const f=m.reduce((e,t)=>{const s=e[t.semantic],i=Array.from(Object.keys(s)).map(Number).find(e=>t.x{if(s.length>1){const i=s.reduce((e,t)=>e+t.confidence,0);s[0].y*s[1].y<0&&i>=2*e&&this.appendPoint(s[0],{type:K[t]})}})}appendPoint(e,{type:t,points:s=null,antiPoint:i,...r}={}){const n=e.x,a=this.measures.find(e=>nat.includes(t.semantic)&&Math.abs(t.y-e.y)<.2&&Math.abs(t.x-e.x)<1.2);t.some(e=>e.semantic===w.SignLined)?o=!0:t.some(e=>e.semantic===w.SignInterval)&&(c=!0)}t=t||K[e.semantic];const l=Te[t];let u=ke[t];(o||c)&&(u=Math.max(u,1));let h=e.y;Number.isFinite(l)?h=l:u&&(h=c?A(h+.5,u)-.5:A(h,u));const m=a.tokens.find(e=>e.type===t&&Math.abs(e.x-n)<.1&&Math.abs(e.y-h)<.1);m?Number.isFinite(m.confidence)&&m.confidence3||(a.tokens.push(new Token({id:e.id,type:t,x:n,y:h,pivotX:e.pivotX,confidence:e.confidence,...r})),i&&a.antiTokens.push(new Token({id:i.id,type:t,x:n,y:i.y,confidence:i.confidence})))}appendFlags(e,t){t.map(t=>({...t,flags:e.filter(e=>Math.abs(e.x-t.x)<.3&&e.y>t.y1-.5&&e.ye.flags.length).forEach(e=>{const t=e.flags.reduce((e,t)=>e&&e.confidence>t.confidence?e:t,null),s="d"===e.direction,i=s?Math.min(e.y2,e.y1+6):Math.max(e.y1,e.y2-6),r=e.flags.map(e=>({tip:(i-e.y)*(s?1:-1),confidence:e.confidence})).filter(e=>e.tip<2||e.confidence>.7*t.confidence).length,n=ue[r-1];n&&this.appendPoint({id:e.flags[0].id,x:e.x,y:i,confidence:Math.min(...e.flags.map(e=>e.confidence))},{type:n})})}clearTokens(){this.measures.forEach(e=>e.tokens=[]),this.semantics=[]}clearPredictedTokens(){this.measures.forEach(e=>e.tokens=e.tokens.filter(e=>!e.isPredicted))}}Staff.className="Staff",Staff.blackKeys=["index","semanticTop","semanticBttom"];class System extends SimpleClass{constructor({stavesCount:e,...t}){if(super(),super.assign(t),!this.measureBars){const e=5,t=(this.width-e)/this.measureCount;this.measureBars=Array(this.measureCount).fill(0).map((s,i)=>e+t*(i+1))}!t.staves&&e&&(this.staves=Array(e).fill(null).map(()=>new Staff({measureBars:this.measureBars}))),this.arrangePosition(),this.measureCount=this.measureCount||this.measureBars.length,this.sidBlackList=this.sidBlackList||[],this.sidWhiteList=this.sidWhiteList||[]}get noteRange(){if(!this.staves.length)return null;const e=this.staves[0],t=this.staves[this.staves.length-1];return{top:e.top+e.staffY+e.noteRange.top,bottom:t.top+t.staffY+t.noteRange.bottom}}get staffPositions(){return this.staves.map(e=>({y:e.top+e.staffY,radius:2}))}get staffMask(){return this.staffMaskChanged?this.staffMaskChanged:this.prev&&this.staves.length===this.prev.staves.length?this.prev.staffMask:2**this.staves.length-1}get staffTop(){const e=this.staffPositions;return e.length?e[0].y-e[0].radius:0}get staffBottom(){const e=this.staffPositions;return e.length?e[e.length-1].y+e[e.length-1].radius:0}arrangePosition(){let e=0;for(const t of this.staves){if(Number.isFinite(t.top))break;t.top=e,e+=t.height}}tidyMeasureBars(){this.measureBars=this.measureBars.filter(e=>e>1),this.measureBars.sort((e,t)=>e-t);const e=this.width-this.measureBars[this.measureBars.length-1];e>12?this.measureBars.push(this.width):e<2&&(this.measureBars[this.measureBars.length-1]=this.width),this.measureBars=this.measureBars.filter((e,t)=>t<1||e-this.measureBars[t-1]>4)}rearrangeMeasures(){this.measureCount=this.measureBars.length,this.staves.forEach(e=>e.rearrangeMeasures(this.measureBars))}get height(){return this.staves.reduce((e,t)=>e+t.height,0)}get connectionLine(){const e=this.staves[0],t=this.staves[this.staves.length-1];return e&&{top:e.top+e.staffY-2,bottom:t.top+t.staffY+2}}get middleY(){if(!this.staves.length)return 0;return this.staves.reduce((e,t)=>e+t.top+t.staffY,0)/this.staves.length}get timeSignatureOnHead(){return this.staves.some(e=>e.measures[0]?.tokens.some(e=>ee.includes(e.type)))}getStaffArray(e){let t=0;return Array(e).fill(null).map((e,s)=>{const i=this.staffMask&1<0?this.measureBars[e-1]:0,s=this.measureBars[e];return[...(this.tokens??[]).filter(e=>e.x>=t&&e.xTempoTerm.fromNumeralText(e.text)).filter(Boolean)]}getEvents(e){if(console.assert(Number.isInteger(this.headMeasureIndex),"invalid headMeasureIndex:",this.headMeasureIndex),!this.measureBars?.length&&this.staves.every(e=>!e.measures?.length))return{staffMask:this.staffMask,columns:[]};const t=this.getStaffArray(e).map(e=>e?e.measures.map(t=>{const s=t.getEvents();return t.assignAccessoriesOnEvents(s),t.assignFeaturesOnEvents(s,e.semantics),{events:s.map(t=>new EventTerm({staff:e.index,system:this.index,...t,rest:t.rest?"r":null})),contexts:t.getContexts({staff:e.index}),voltaBegin:t.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:t.tokens.some(e=>e.type===K.VoltaRight),alternative:t.alternative,barTypes:t.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts?.filter(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{!t[e]||t[e].contexts.length||t[e].events.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:this.getMarksInMeasure(s),duration:0,voltaBegin:t.some(e=>e[s]?.voltaBegin),voltaEnd:t.some(e=>e[s]?.voltaEnd),alternative:t.some(e=>e[s]?.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s]?.barTypes}),{})}));s.forEach(e=>{[].concat(...e.rows.filter(Boolean).map(e=>e.events)).forEach((e,t)=>e.id=t+1)});const i=s[s.length-1];return i&&(i.break=!0),{staffMask:this.staffMask,columns:s}}getEventsFunctional(e,t,s=[],{useXMap:i=!1}={}){const r=this.getStaffArray(e).map((e,s)=>e?e.measures.map((e,i)=>{const r=t(s,i);return r&&{events:r.map(e=>new EventTerm({system:this.index,...e,rest:e.rest?"r":null})),contexts:e.getContexts({staff:s}),voltaBegin:e.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===K.VoltaRight),alternative:e.alternative,barTypes:e.barTypes}}):Array(this.measureCount).fill(null).map(()=>({events:[],contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}}))),n=Array(this.measureCount).fill(null).map((e,t)=>{const s=r.map(e=>e[t]);if(s.some(e=>!e))return null;let n=null;if(i){const e=[].concat(...s.map(e=>e.events)).reduce((e,t)=>(Number.isFinite(t.tickGroup)&&(e[t.tickGroup]=e[t.tickGroup]||[]),e[t.tickGroup].push(t),e),{});n=Object.values(e).reduce((e,t)=>{const s=Math.min(...t.map(e=>(e.left+e.right)/2));return e.set(s,t),e},new Map)}return{measureIndex:this.headMeasureIndex+t,rows:s,marks:this.getMarksInMeasure(t),duration:0,xMap:n,voltaBegin:s.some(e=>e.voltaBegin),voltaEnd:s.some(e=>e.voltaEnd),alternative:s.some(e=>e.alternative),barTypes:s.reduce((e,t)=>({...e,...t.barTypes}),{})}});return s.forEach(e=>n.forEach(e)),{staffMask:this.staffMask,columns:n}}getContexts(e){const t=this.getStaffArray(e).map(e=>e?e.measures.map(e=>({events:null,contexts:e.getContexts(),voltaBegin:e.tokens.some(e=>e.type===K.VoltaLeft),voltaEnd:e.tokens.some(e=>e.type===K.VoltaRight),alternative:t.some(e=>e.alternative),barTypes:e.barTypes})):Array(this.measureCount).fill(null).map(()=>({events:null,contexts:[],voltaBegin:!1,voltaEnd:!1,alternative:!1,barTypes:{}})));for(let e=0;et[e]?.contexts.filter(e=>[Oe.TimeSignatureC,Oe.TimeSignatureN].includes(e.type))).find(e=>e?.length);s&&t.forEach(t=>{t[e].contexts.length||t[e].contexts.push(...s)})}const s=Array(this.measureCount).fill(null).map((e,s)=>({measureIndex:this.headMeasureIndex+s,rows:t.map(e=>e[s]),marks:[],duration:0,voltaBegin:t.some(e=>e[s].voltaBegin),voltaEnd:t.some(e=>e[s].voltaEnd),alternative:t.some(e=>e.alternative),barTypes:t.reduce((e,t)=>({...e,...t[s].barTypes}),{})}));return{staffMask:this.staffMask,columns:s}}assignSemantics(e,t){const s=this.staves[e];console.assert(s,"staff is null:",e,this.staves);const i=s.top+s.staffY;t.getSystemPoints().forEach(e=>{const t={...e};t.y+=i,t.extension&&(t.extension={...t.extension},Number.isFinite(t.extension.y1)&&(t.extension.y1+=i,t.extension.y2+=i)),this.semantics.push(t)})}assemble(e,t=new DummyLogger){if(this.measureBars=[],!this.semantics)return;const s=SemanticGraph.fromPoints(this.semantics).getConfidentLayer(w.vline_BarMeasure,e);s.sort((e,t)=>e.x-t.x);const i=this.staffTop,r=this.staffBottom;let n=0;const a=s.reduce((e,t)=>{const s=Number.isFinite(t.confidence)?Math.tanh(t.confidence):1,a=t.x-n>.4?t.x:n;n=t.x;let o=e[a]||0;return o+=(Math.min(t.extension.y2,r)-Math.max(t.extension.y1,i))*s,t.x!==a&&delete e[a],e[t.x]=o,e},{}),o=Object.entries(a).filter(([e,t])=>t>3*this.staves.length).map(([e])=>Number(e));if(this.sidWhiteList.length)for(const e of s)this.sidWhiteList.includes(e.id)&&!o.some(t=>Math.abs(t-e.x)<=2)&&o.push(e.x);o.sort((e,t)=>e-t),o.forEach((e,t)=>{(t<=0||e-o[t-1]>2)&&this.measureBars.push(e)}),this.measureBars.length||this.measureBars.push(this.width),this.tidyMeasureBars(),this.rearrangeMeasures();this.semantics.filter(e=>[w.vline_BarTerminal,w.vline_BarSegment].includes(e.semantic)).forEach(e=>{const t=this.staves[0].measures.find(t=>e.x>t.right-2&&e.x{for(;!(l&1<O(this.index,i,e)),s.clearPredictedTokens(),s.assemble(e,this,t))})}qualifiedSemantics(e,t=1){return e.filter(e=>this.sidWhiteList.includes(e.id)||!this.sidBlackList.includes(e.id)&&(e.confidence>=t||!Number.isFinite(e.confidence))).map(e=>this.displacementSemantics&&this.displacementSemantics[e.id]?{...e,...this.displacementSemantics[e.id]}:e)}clearTokens(){this.staves.forEach(e=>e.clearTokens()),this.semantics=[]}newPoint(e,t,s=1){const i=this.staves[e];console.assert(i,"staff index out of bound:",e,this.staves.length);const{semantic:r,x:n,y:a,confidence:o=0,extension:c=null}=t,l={semantic:r,x:n,y:a,confidence:o,extension:c};return l.extension||delete l.extension,O(this.index,e,l),i.semantics.push(l),i.clearPredictedTokens(),i.assemble(s,this),l}appendToken(e){switch(this.tokens.push(e),e.textType){case De.TempoNumeral:{const t=this.staves[0];if(t){const s=t.top+t.staffY;t.measures.forEach(t=>{t.tokens=t.tokens.filter(t=>!ae.includes(t.type)||Math.abs(t.x-e.x)>e.width/2||Math.abs(s+t.y-e.y)>e.fontSize/2)})}}break;case De.Alternation1:case De.Alternation2:this.staves[0].measures.forEach(t=>{const s=Math.min(t.left+t.width,e.x+e.width/2)-Math.max(t.left,e.x-e.width/2);t.alternative=t.alternative||s/t.width>.5})}}}System.className="System",System.blackKeys=["index","pageIndex","prev","next","headMeasureIndex","tokens","indent"];class Page extends SimpleClass{constructor(e){super(),super.assign(e),this.systems=this.systems||[],this.source&&(this.source.matrix=this.source.matrix||[1,0,0,1,0,0])}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}clearTokens(){this.semantics=null,this.tokens=null,this.systems.forEach(e=>e.tokens=null)}assignTexts(e,[t,s]){const i=this.source&&this.source.interval?this.source.interval*(t/this.source.dimensions.height):t/this.height;this.semantics=e.map(e=>{const r={x:(e.cx-s/2)/i,y:(e.cy-t/2)/i},n=this.source&&this.source.matrix?(a=r,{x:(o=this.source.matrix)[0]*a.x+o[2]*a.y+o[4],y:o[1]*a.x+o[3]*a.y+o[5]}):r;var a,o;return{confidence:e.score,x:n.x+this.width/2,y:n.y+this.height/2,semantic:w.rect_Text,extension:{text:e.text,type:e.type,width:e.width/i,height:e.height/i,theta:e.theta,textFeature:e.feature_dict}}})}assemble({textAnnotations:e=null}={},t=new DummyLogger){if(this.tokens=[],this.systems.forEach(e=>e.tokens=[]),this.systems.length){const e=this.systems.map(e=>e.left),t=e[Math.floor((e.length-1)/2)];this.systems.forEach(e=>e.indent=e.left>t+2)}if(this.semantics){const t=this.source?this.source.name:this.index.toString();this.semantics.forEach(s=>{B(t,s);const i={id:s.id,type:K.Text,confidence:s.confidence,textType:mt[s.extension.type]||s.extension.type,text:e&&e[s.id]||s.extension.text,textFeasure:s.extension.textFeature,width:s.extension.width,fontSize:s.extension.height};if(s.semantic===w.rect_Text)switch(i.textType){case De.Title:case De.Author:case De.PageMargin:case De.Other:this.tokens.push(new TextToken({x:s.x,y:s.y,...i}));break;case De.TempoNumeral:case De.Chord:case De.MeasureNumber:case De.Instrument:case De.Alternation1:case De.Alternation2:{const e=this.systems.find(e=>e.top+e.staffTop>s.y);e&&e.appendToken(new TextToken({x:s.x-e.left,y:s.y-e.top,...i}))}break;case De.TextualMark:case De.Times:{const e=[...this.systems].reverse().find(e=>e.topt>=e.top&&tr>=e.left&&r[e,dt[`TimeD${e}`]])),gt=Object.fromEntries(Array(12).fill(null).map((e,t)=>t+1).map(e=>[e,dt[`TimeN${e}`]])),yt=dt,vt={[yt.BOS]:"BOS",[yt.NoteheadS0]:"noteheads-s0",[yt.NoteheadS1]:"noteheads-s1",[yt.NoteheadS2]:"noteheads-s2",[yt.NoteheadGrace]:"GraceNotehead",[yt.Flag3]:"flags-u3",[yt.BeamLeft]:"BeamLeft",[yt.BeamContinue]:"BeamContinue",[yt.BeamRight]:"BeamRight",[yt.Dot]:"dot",[yt.Rest0]:"rests-0o",[yt.Rest1]:"rests-1o",[yt.Rest2]:"rests-2",[yt.Rest3]:"rests-3",[yt.Rest4]:"rests-4",[yt.Rest5]:"rests-5",[yt.Rest6]:"rests-6"},xt={[yt.NoteheadS0]:0,[yt.NoteheadS1]:1,[yt.NoteheadS2]:2,[yt.NoteheadGrace]:2},St=[yt.NoteheadS0,yt.NoteheadS1,yt.NoteheadS2,yt.NoteheadGrace],bt=[yt.Rest0,yt.Rest1,yt.Rest2,yt.Rest3,yt.Rest4,yt.Rest5,yt.Rest6],kt=[yt.BeamLeft,yt.BeamContinue,yt.BeamRight],Tt=[...St,...bt],wt=[...St,...bt,yt.vline_Stem],Mt=[yt.BOS,yt.NoteheadS0,yt.vline_Stem,...bt],Et=[...Tt,yt.vline_Stem],Nt={[yt.BeamLeft]:"Open",[yt.BeamRight]:"Close"},It=e=>({type:e,staff:-1,x:0,y1:0,y2:0}),Ct=It(dt.BOS),_t=e=>[It(gt[e.numerator]),It(pt[e.denominator])],Ot=(e,t)=>{const s=e.filter((e,s)=>t[s]),i=Math.max(...s);return e.findIndex(e=>e===i)};class SemanticCluster extends SimpleClass{static elementToJSON(e){const t={type:e.type,staff:e.staff,x:e.x,y1:e.y1,y2:e.y2};return e.id&&(t.id=e.id),t}constructor(e){super(),super.assign(e)}get sourceMask(){return this.elements.map(e=>wt.includes(e.type))}get targetMask(){return this.elements.map(e=>Mt.includes(e.type))}get vMask(){return this.elements.map(e=>Et.includes(e.type))}get compactMatrixH(){if(!this.matrixH)return null;const e=this.sourceMask,t=this.targetMask;return this.matrixH.filter((t,s)=>e[s]).map(e=>e.filter((e,s)=>t[s]))}set compactMatrixH(e){this.matrixH=Bt([].concat(...e),[this.sourceMask,this.targetMask])}get compactMatrixV(){if(!this._matrixV)return null;const e=this.vMask,t=this._matrixV.filter((t,s)=>e[s]).map(t=>t.filter((t,s)=>e[s]));return[].concat(...t.map((e,t)=>e.slice(0,t)))}set compactMatrixV(e){this.matrixV=e&&At(e,this.vMask)}get matrixV(){return this.groupsV&&Pt(this.elements.length,this.groupsV)}set matrixV(e){if(!e)return this.groupsV=null,void(this._matrixV=e);const t=[],s=e.map((t,s)=>t.some(Number.isFinite)||e.some(e=>Number.isFinite(e[s])));e.forEach((e,i)=>{if(s[i]){let s=!1;for(let r=0;r=.5){const e=t.findIndex(e=>e.includes(r));t[e].push(i),s=!0;break}}s||t.push([i])}}),this.groupsV=t,this._matrixV=e}toJSON(){return{__prototype:"SemanticCluster",index:this.index,elements:this.elements.map(SemanticCluster.elementToJSON),compactMatrixH:this.compactMatrixH,compactMatrixV:this.compactMatrixV}}static mapMatrix(e,t,s){return t.reduce((t,s,i)=>(t[s]?t[s]=t[s].map((t,s)=>t+e[i][s]?1:0):t[s]=e[i],t),[]).map(e=>s.map(t=>e[t]))}mergeOverlapping(){const e=this.overlappedNoteheads();if(e.length){const t=this.elements.map((t,s)=>{const i=e.find(e=>s===e[1]),r=i?i[0]:s;return r-e.filter(e=>e[1]t.findIndex(e=>e===s));this.elements=s.map(e=>this.elements[e]),console.assert(this.elements.every(Boolean),"null element found:",this,t,s),this.matrixH=SemanticCluster.mapMatrix(this.matrixH,t,s),this.groupsV=this.groupsV.map(e=>Array.from(new Set(e.map(e=>t[e]))))}}overlappedNoteheads(){const e=[],t=this.elements.filter(e=>St.includes(e.type));for(let s=0;st),t=this.masks?this.masks[1]:e.map(e=>Mt.includes(this.elements[e].type)),s=e.map(e=>this.elements[e].type===yt.vline_Stem&&this.elements[e].y2-this.elements[e].y1>2),i=e.filter(e=>[yt.NoteheadS1,yt.NoteheadS2,yt.NoteheadGrace].includes(this.elements[e].type)),r=e.filter(e=>this.elements[e].type===yt.NoteheadS0),n=e.map(()=>!1),a={};i.forEach(t=>{const i=this.elements[t];e.filter(e=>s[e]).filter(e=>this.elements[e].y1-.5i.y1).sort((e,s)=>this.matrixH[t][s]-this.matrixH[t][e]).slice(0,2).filter((e,s)=>0===s||this.matrixH[t][e]>=.5).forEach(e=>{a[e]=a[e]||[],a[e].push(t)})}),r.forEach(e=>{const s=this.elements[e],i=Ot(this.matrixH[e],t),r=this.elements[i];r.type===yt.NoteheadS0&&Math.abs(s.x-r.x)<2.6?(n[e]=!0,a[i]=a[i]||[i],a[i].push(e)):a[e]=a[e]||[e]});const o={},c=e.filter(e=>a[e]||bt.includes(this.elements[e].type));c.sort((e,t)=>this.elements[e].x-this.elements[t].x);const l=e.map(e=>e===yt.BOS);c.forEach(e=>{const t=Ot(this.matrixH[e],l);o[e]=t,t&&!bt.includes(this.elements[t].type)&&(l[t]=!1),l[e]=!0});const u=this.elements.filter(e=>e.type===yt.Dot),h=this.elements.filter(e=>e.type===yt.Flag3),m=this.elements.filter(e=>kt.includes(e.type)),f=this.groupsV;return c.map(e=>{const t=this.elements[e],s=f?f.findIndex(t=>t.includes(e)):null;if(bt.includes(t.type)){const i=u.filter(e=>e.x>t.x+.5&&e.xt.y1-1&&e.y1this.elements[e]),r=Math.min(...i.map(e=>e.x-.7)),n=Math.max(...i.map(e=>e.x+.7));i.sort((e,t)=>t.y1-e.y1);const c=i.map(e=>e.y1),l=i.map(e=>e.id),f=c[0],d=c[c.length-1],p=u.filter(e=>e.x>n&&e.xf-1&&e.y1{const s=A(t.y1,.5);return e[s]=e[s]||[],e[s].push(t),e},{}),g=Math.max(...Object.values(p).map(e=>e.length),0);let y=xt[i[0].type],v=null,x=null,S=null;if(t.type===yt.vline_Stem){if(v=f-t.y1>t.y2-d?"u":"d",S={x:t.x,y:"u"===v?t.y1:t.y2},2===y){const e="u"===v?[t.y1-.4,t.y2-1]:[t.y1+1,t.y2+.4];y+=h.filter(s=>Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1Math.abs(s.x-t.x)<.2&&s.y1>e[0]&&s.y1{const s=function*(){for(const t of e)yield t}(),[i,r]=t;return i.map(e=>r.map(t=>e&&t?s.next().value:null))},At=(e,t)=>{const s=function*(){for(const t of e)yield t}();return t.map((e,i)=>t.map((t,r)=>e&&t&&r{const s=Array(e).fill(null).map((e,s)=>t.findIndex(e=>e.includes(s)));return Array(e).fill(null).map((t,i)=>Array(e).fill(null).map((e,t)=>{if(t>=i)return null;const r=s[i],n=s[t];return r<0||n<0?null:r===n?1:0}))};var Rt;!function(e){e[e.None=0]="None",e.Mordent="mordent",e.Prall="prall",e.Turn="turn",e.Trill="trill",e.Tremolo="tremolo",e.Arpeggio="arpeggio"}(Rt||(Rt={}));const Dt=class Stream{constructor(e){this.array=new Uint8Array(e),this.position=0}eof(){return this.position>=this.array.length}read(e){const t=this.array.slice(this.position,this.position+e);return this.position+=e,t}readString(e){return Array.from(this.read(e)).map(e=>String.fromCharCode(e)).join("")}readInt32(){const e=(this.array[this.position]<<24)+(this.array[this.position+1]<<16)+(this.array[this.position+2]<<8)+this.array[this.position+3];return this.position+=4,e}readInt16(){const e=(this.array[this.position]<<8)+this.array[this.position+1];return this.position+=2,e}readInt8(e){let t=this.array[this.position];return e&&t>127&&(t-=256),this.position+=1,t}readVarInt(){let e=0;for(;;){const t=this.readInt8();if(!(128&t))return e+t;e+=127&t,e<<=7}}};const Ft=class OStream{constructor(){this.buffer=""}write(e){this.buffer+=e}writeInt32(e){this.buffer+=String.fromCharCode(e>>24&255)+String.fromCharCode(e>>16&255)+String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt16(e){this.buffer+=String.fromCharCode(e>>8&255)+String.fromCharCode(255&e)}writeInt8(e){this.buffer+=String.fromCharCode(255&e)}writeVarInt(e){if(e<0)throw new Error("OStream.writeVarInt minus number: "+e);const t=127&e;e>>=7;let s=String.fromCharCode(t);for(;e;){const t=127&e;e>>=7,s=String.fromCharCode(128|t)+s}this.buffer+=s}getBuffer(){return this.buffer}getArrayBuffer(){return Uint8Array.from(this.buffer.split("").map(e=>e.charCodeAt(0))).buffer}};var Lt={parseMidiData:function(e){function t(e){const t=e.readString(4),s=e.readInt32();return{id:t,length:s,data:e.read(s)}}let s;function i(e){const t={};t.deltaTime=e.readVarInt();let i=e.readInt8();if(240&~i){let r;128&i?(r=e.readInt8(),s=i):(r=i,i=s);const n=i>>4;switch(t.channel=15&i,t.type="channel",n){case 8:return t.subtype="noteOff",t.noteNumber=r,t.velocity=e.readInt8(),t;case 9:return t.noteNumber=r,t.velocity=e.readInt8(),0===t.velocity?t.subtype="noteOff":t.subtype="noteOn",t;case 10:return t.subtype="noteAftertouch",t.noteNumber=r,t.amount=e.readInt8(),t;case 11:return t.subtype="controller",t.controllerType=r,t.value=e.readInt8(),t;case 12:return t.subtype="programChange",t.programNumber=r,t;case 13:return t.subtype="channelAftertouch",t.amount=r,t;case 14:return t.subtype="pitchBend",t.value=r+(e.readInt8()<<7),t;default:throw new Error("Unrecognised MIDI event type: "+n)}}else{if(255!==i){if(240===i){t.type="sysEx";const s=e.readVarInt();return t.data=e.readString(s),t}if(247===i){t.type="dividedSysEx";const s=e.readVarInt();return t.data=e.readString(s),t}throw new Error("Unrecognised MIDI event type byte: "+i)}{t.type="meta";const s=e.readInt8(),i=e.readVarInt();switch(s){case 0:if(t.subtype="sequenceNumber",2!==i)throw new Error("Expected length for sequenceNumber event is 2, got "+i);return t.number=e.readInt16(),t;case 1:return t.subtype="text",t.text=e.readString(i),t;case 2:return t.subtype="copyrightNotice",t.text=e.readString(i),t;case 3:return t.subtype="trackName",t.text=e.readString(i),t;case 4:return t.subtype="instrumentName",t.text=e.readString(i),t;case 5:return t.subtype="lyrics",t.text=e.readString(i),t;case 6:return t.subtype="marker",t.text=e.readString(i),t;case 7:return t.subtype="cuePoint",t.text=e.readString(i),t;case 32:if(t.subtype="midiChannelPrefix",1!==i)throw new Error("Expected length for midiChannelPrefix event is 1, got "+i);return t.channel=e.readInt8(),t;case 47:if(t.subtype="endOfTrack",0!==i)throw new Error("Expected length for endOfTrack event is 0, got "+i);return t;case 81:if(t.subtype="setTempo",3!==i)throw new Error("Expected length for setTempo event is 3, got "+i);return t.microsecondsPerBeat=(e.readInt8()<<16)+(e.readInt8()<<8)+e.readInt8(),t;case 84:if(t.subtype="smpteOffset",5!==i)throw new Error("Expected length for smpteOffset event is 5, got "+i);const s=e.readInt8();return t.frameRate={0:24,32:25,64:29,96:30}[96&s],t.hour=31&s,t.min=e.readInt8(),t.sec=e.readInt8(),t.frame=e.readInt8(),t.subframe=e.readInt8(),t;case 88:if(t.subtype="timeSignature",4!==i)throw new Error("Expected length for timeSignature event is 4, got "+i);return t.numerator=e.readInt8(),t.denominator=Math.pow(2,e.readInt8()),t.metronome=e.readInt8(),t.thirtyseconds=e.readInt8(),t;case 89:if(t.subtype="keySignature",2!==i)throw new Error("Expected length for keySignature event is 2, got "+i);return t.key=e.readInt8(!0),t.scale=e.readInt8(),t;case 127:return t.subtype="sequencerSpecific",t.data=e.readString(i),t;default:return t.subtype="unknown",t.data=e.readString(i),t}}}}let r=e;"string"==typeof e&&(r=e.split("").map(e=>e.charCodeAt(0)));const n=new Dt(r),a=t(n);if("MThd"!==a.id||6!==a.length)throw new Error("Bad .mid file - header not found");const o=new Dt(a.data),c=o.readInt16(),l=o.readInt16(),u=o.readInt16();let h;if(32768&u)throw new Error("Expressing time division in SMTPE frames is not supported yet");h=u;const m={formatType:c,trackCount:l,ticksPerBeat:h},f=[];for(let e=0;e>16&255),e.writeInt8(t.microsecondsPerBeat>>8&255),e.writeInt8(255&t.microsecondsPerBeat);break;case"smpteOffset":e.writeInt8(84),e.writeVarInt(5);var s={24:0,25:32,29:64,30:96}[t.frameRate];e.writeInt8(t.hour|s),e.writeInt8(t.min),e.writeInt8(t.sec),e.writeInt8(t.frame),e.writeInt8(t.subframe);break;case"timeSignature":e.writeInt8(88),e.writeVarInt(4),e.writeInt8(t.numerator),e.writeInt8(Math.log2(t.denominator)),e.writeInt8(t.metronome),e.writeInt8(t.thirtyseconds);break;case"keySignature":e.writeInt8(89),e.writeVarInt(2),e.writeInt8(t.key),e.writeInt8(t.scale);break;case"sequencerSpecific":e.writeInt8(127),e.writeVarInt(t.data.length),e.write(t.data);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;case"sysEx":e.writeInt8(240),e.writeVarInt(t.data.length),e.write(t.data);break;case"dividedSysEx":e.writeInt8(247),e.writeVarInt(t.data.length),e.write(t.data);break;case"channel":switch(t.subtype){case"noteOn":e.writeInt8(144|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity);break;case"noteOff":e.writeInt8(128|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.velocity?t.velocity:0);break;case"noteAftertouch":e.writeInt8(160|t.channel),e.writeInt8(t.noteNumber),e.writeInt8(t.amount);break;case"controller":e.writeInt8(176|t.channel),e.writeInt8(t.controllerType),e.writeInt8(t.value);break;case"programChange":e.writeInt8(192|t.channel),e.writeInt8(t.programNumber);break;case"channelAftertouch":e.writeInt8(208|t.channel),e.writeInt8(t.amount);break;case"pitchBend":e.writeInt8(224|t.channel),e.writeInt8(255&t.value),e.writeInt8(t.value>>7&255);break;default:throw new Error("unhandled event subtype:"+t.subtype)}break;default:throw new Error("unhandled event type:"+t.type)}}const r=new Ft,n=new Ft;n.writeInt16(e.formatType),n.writeInt16(t.length),n.writeInt16(e.ticksPerBeat),s(r,"MThd",n.getBuffer());for(let e=0;e{const s=[];let i=120;const r=e.header.ticksPerBeat;for(let t=0;t0){e=a.ticksToEvent/r/(i/60)}"meta"==a.event.type&&"setTempo"==a.event.subtype&&(i=6e7/a.event.microsecondsPerBeat);const s=1e3*e*t||0;o.push([a,s]),a=n()}if(a=n())for(;a;)e()}(),o},trimSequence:e=>{const t=new Map;return e.filter(([{event:e,ticksToEvent:s}])=>{if(s>0&&t.clear(),"channel"!==e.type)return!0;const i=`${e.subtype}|${e.channel}|${e.noteNumber}`;return!t.get(i)&&(t.set(i,e),!0)})},fixOverlapNotes:e=>{const t=new Map,s=new Map,i=[];let r=-1;return e.forEach(([{event:e,ticksToEvent:n}],a)=>{if(n>0&&(r=a),"channel"!==e.type)return;const o=`${e.channel}|${e.noteNumber}`;switch(e.subtype){case"noteOn":t.get(o)?s.set(o,r):t.set(o,r);break;case"noteOff":s.get(o)?(i.push([s.get(o),a]),s.delete(o)):t.delete(o)}}),i.forEach((e,t)=>{for(let s=t-1;s>=0;--s){const t=i[s];if(t[1]t[0]&&++e[0]}}),i.forEach(([t,s])=>{if(s>=e.length-1||t<0)return;const i=e[s],r=e[s+1],n=e[t];if(!n[0].ticksToEvent)return void console.warn("invalid front index:",t,s,n);const a=n[1]/n[0].ticksToEvent;r[1]+=i[1],r[0].ticksToEvent+=i[0].ticksToEvent,i[0].ticksToEvent=n[0].ticksToEvent-1,n[0].ticksToEvent=1,i[1]=i[0].ticksToEvent*a,n[1]=n[0].ticksToEvent*a,e.splice(s,1),e.splice(t,0,i)}),e}};const jt=$t,Ht={64:"Sustain",65:"Portamento",66:"Sostenuto",67:"Soft"};class Notation$1{static parseMidi(e,{fixOverlap:t=!0}={}){const s=[],i={},r={},n=[],a=[];let o=0,c=5e3,l=0,u=4,h=0;const m={};let f,d=0,p=0;const g=[],y=e.header.ticksPerBeat;let v=jt.midiToSequence(e);t&&(v=jt.trimSequence(jt.fixOverlapNotes(v)));const x=v.map(e=>({data:e[0].event,track:e[0].track,deltaTime:e[1],deltaTicks:e[0].ticksToEvent}));let S=0;for(const e of x){if(d+=e.deltaTicks,p=Math.round(1*d),e.deltaTicks>0){const t=e.deltaTicks/y;for(let e=Math.ceil(l);es.channel==t.channel&&s.pitch==e);if(i>=0){const r=s.splice(i,1)[0];n[t.channel].push({channel:t.channel,startTick:r.startTick,endTick:p,pitch:e,start:r.start,duration:o-r.start,velocity:r.velocity,beats:r.beats,track:r.track,finger:r.finger})}else console.debug("unexpected noteOff: ",o,t);m.high=Math.max(m.high||e,e)}break;case"controller":switch(t.controllerType){case 64:case 65:case 66:case 67:const e=Ht[t.controllerType];i[t.channel]=i[t.channel]||{},r[t.channel]=r[t.channel]||[];const s=i[t.channel][e];s&&r[t.channel].push({type:e,start:s.start,duration:o-s.start,value:s.value}),i[t.channel][e]={start:o,value:t.value}}}break;case"meta":switch(t.subtype){case"setTempo":c=t.microsecondsPerBeat/1e3,g.push({tempo:t.microsecondsPerBeat,tick:p,time:o});break;case"timeSignature":u=t.numerator,h=0;break;case"text":if(!f&&/^find-corres:/.test(t.text)){const e=t.text.match(/:([\d\,-]+)/);f=(e&&e[1]||"").split(",").map(e=>Number(e))}else if(/fingering\(.*\)/.test(t.text)){const[e,i]=t.text.match(/\((.+)\)/),r=Number(i);if(!Number.isNaN(r)){const e=s[s.length-1];e&&(e.finger=r);const t=x.find(e=>e.index==S-1);t&&(t.data.finger=r)}}break;case"copyrightNotice":console.log("MIDI copyright:",t.text)}}}return s.forEach(e=>{console.debug("unclosed noteOn event at",e.startTick,e),n[e.channel].push({startTick:e.startTick,endTick:p,pitch:e.pitch,start:e.start,duration:o-e.start,velocity:e.velocity,beats:e.beats,track:e.track,finger:e.finger})}),new Notation$1({channels:n,keyRange:m,pedals:r,bars:a,endTime:o,endTick:p,correspondences:f,events:x,tempos:g,ticksPerBeat:y,meta:{}})}constructor(e){Object.assign(this,e),this.notes=[];for(const e of this.channels)if(e)for(const t of e)this.notes.push(t);this.notes.sort(function(e,t){return e.start-t.start});for(const e in this.notes)this.notes[e].index=Number(e);this.duration=this.notes.length>0?this.endTime-this.notes[0].start:0,this.pitchMap=[];for(const e in this.channels)for(const t in this.channels[e]){const s=this.channels[e][t].pitch;this.pitchMap[s]=this.pitchMap[s]||[],this.pitchMap[s].push(this.channels[e][t])}if(this.pitchMap.forEach(e=>e.sort((e,t)=>e.start-t.start)),this.meta.beatInfos)for(let e=0;e0){const s=this.meta.beatInfos[e-1];t.beatIndex=s.beatIndex+Math.ceil((t.tick-s.tick)/this.ticksPerBeat)}else t.beatIndex=0}{let e=0,t=0,s=5e5;for(const i of this.tempos){e+=s/1e3*(i.tick-t)/this.ticksPerBeat,t=i.tick,s=i.tempo,i.time=e}}}findChordBySoftindex(e,t=.8){return this.notes.filter(s=>Math.abs(s.softIndex-e)e.from,"range is invalid:",e);const t=t=>{const s=Math.max(e.from,this.tempos[t].tick),i=te+s.tempo*t(i),0)/(e.to-e.from))}ticksToTime(e){console.assert(Number.isFinite(e),"invalid tick value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.tick>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.time+(e-i.tick)*i.tempo*.001/this.ticksPerBeat}timeToTicks(e){console.assert(Number.isFinite(e),"invalid time value:",e),console.assert(this.tempos&&this.tempos.length,"no tempos.");const t=this.tempos.findIndex(t=>t.time>e),s=t<0?this.tempos.length-1:Math.max(t-1,0),i=this.tempos[s];return i.tick+(e-i.time)*this.ticksPerBeat/(.001*i.tempo)}tickRangeToTimeRange(e){return console.assert(e.to>=e.from,"invalid tick range:",e),{from:this.ticksToTime(e.from),to:this.ticksToTime(e.to)}}scaleTempo({factor:e,headTempo:t}){console.assert(this.tempos&&this.tempos.length,"[Notation.scaleTempo] tempos is empty."),t&&(e=t/this.tempos[0].tempo),console.assert(Number.isFinite(e)&&e>0,"[Notation.scaleTempo] invalid factor:",e),this.tempos.forEach(t=>{t.tempo*=e,t.time*=e}),this.events.forEach(t=>{t.deltaTime*=e,t.time*=e}),this.notes.forEach(t=>{t.start*=e,t.duration*=e}),this.endTime*=e}}var Vt={Notation:Notation$1};const{Notation:zt}=Vt,qt=()=>new Promise(e=>requestAnimationFrame(e));var Gt=class MidiPlayer$1{constructor(e,{cacheSpan:t=600,onMidi:s,onPlayFinish:i,onTurnCursor:r}={}){let n;this.cacheSpan=t,this.onMidi=s,this.onPlayFinish=i,this.onTurnCursor=r,n=e.notes&&Number.isFinite(e.endTime)?e:zt.parseMidi(e),this.notation=n,this.events=n.events,this.isPlaying=!1,this.progressTime=0,this.startTime=performance.now(),this.duration=n.endTime,this.cursorTurnDelta=0,console.assert(n.tempos&&n.tempos.length,"[MidiPlayer] invalid notation, tempos is empty.")}dispose(){this.isPlaying=!1,this.progressTime=0}get progressTicks(){return this.notation.timeToTicks(this.progressTime)}set progressTicks(e){this.progressTime=this.notation.ticksToTime(e),this.onTurnCursor&&this.onTurnCursor(this.progressTime)}async play({nextFrame:e=qt}={}){this.progressTime>=this.duration&&(this.progressTime=0);let t=performance.now();this.startTime=t-this.progressTime,this.isPlaying=!0;let s=this.events.findIndex(e=>e.time>=t-this.startTime);for(;this.isPlaying;){for(;sthis.progressTime+this.cacheSpan)break;"channel"===e.data.type&&this.startTime+e.time>=t&&this.onMidi&&this.onMidi(e.data,this.startTime+e.time)}if(await e(),!this.isPlaying)break;if(0!==this.cursorTurnDelta){const e=this.cursorTurnDelta<0;if(this.startTime-=this.cursorTurnDelta,this.cursorTurnDelta=0,e)for(;s>0;--s){const e=this.events[s].time;if(this.startTime+ethis.duration&&(this.isPlaying=!1,this.onPlayFinish&&this.onPlayFinish())}}pause(){this.isPlaying=!1}turnCursor(e){this.isPlaying?this.cursorTurnDelta+=e-this.progressTime:this.progressTime=e,this.onTurnCursor&&this.onTurnCursor(e)}},Wt={CostStepAttenuation:.6,SkipDeep:3,PriorDistanceSigmoidFactor:.1,PriorValueSigmoidFactor:.12,SkipCost:.5,LagOffsetCost:1,LeadOffsetCost:1.6,ZeroOffsetCost:.58,RelocationThreshold:6};const{pick:Ut}=y.default,Yt=Wt;class Node$2{constructor(e,t){this.s_note=e,this.c_note=t,console.assert(null!=this.s_note.softIndex,"s_note softIndex is null"),this.offset=this.s_note.softIndex-this.c_note.softIndex,this._prev=null,this._totalCost=0,this._value=0,this.cacheDirty=!0}get prev(){return this._prev}set prev(e){e!=this._prev&&(this._prev=e,this.cacheDirty=!0)}get si(){return this.s_note.index}get ci(){return this.c_note.index}get root(){return this.prev.root||this}get rootSi(){return this.prev.zero?this.si:this.prev.rootSi}get id(){return`${this.s_note.index},${this.c_note.index}`}static cost(e,t,s){return e*Yt.CostStepAttenuation+Math.tanh(t*Yt.SkipCost)+Math.tanh(.5*s)}updateCache(){this.cacheDirty&&(this._totalCost=Node$2.cost(this.prev.totalCost,this.si-this.prev.si-1,this.selfCost),this._value=this.prev.value+1-Math.tanh(.5*this.selfCost),this.cacheDirty=!1)}get totalCost(){return this.updateCache(),this._totalCost}get value(){return this.updateCache(),this._value}get deep(){return this.prev.deep+1}get path(){const e=[];for(let t=this;!t.zero;t=t.prev)e[t.si]=t.ci;for(let t=0;t=1,"node index error:",this,e);const s=Node$2.cost(e.totalCost,this.si-e.si-1,t);return(!this.prev||s0?Yt.LagOffsetCost:Yt.LeadOffsetCost))**2}return t}priorByOffset(e){const t=Math.abs(this.offset-e)/1;return Math.tanh(this.value*Yt.PriorValueSigmoidFactor)-Math.tanh(t*Yt.PriorDistanceSigmoidFactor)}static zero(){return{zero:!0,totalCost:0,value:0,si:-1,ci:-1,deep:0,offset:0}}}var Xt=Node$2;const Kt=Wt,Zt=Xt;var Jt=class Navigator$1{constructor(e,t,s={}){this.criterion=e,this.sample=t,this.getCursorOffset=s.getCursorOffset||(()=>null),this.outOfPage=s.outOfPage,this.bestNode=null,this.fineCursor=null,this.breakingSI=t.notes.length-1,this.zeroNode=Zt.zero(),this.zeroNode.offset=this.getCursorOffset()||0,this.relocationThreshold=s.relocationThreshold||Kt.RelocationThreshold}step(e){const t=this.sample.notes[e];if(t.matches.length>0){t.matches.forEach(t=>{t.evaluatePrev(this.zeroNode);for(let s=e-1;s>=Math.max(this.breakingSI+1,e-Kt.SkipDeep);--s){const i=this.sample.notes[s];console.assert(i,"prevNote is null:",s,e,this.sample.notes),i.matches.forEach(e=>{const s=t.offset-e.offset;s<2/Kt.LagOffsetCost&&s>-2/Kt.LeadOffsetCost&&t.evaluatePrev(e)})}if(t.prior=t.totalCost>1.99?-1:t.priorByOffset(this.zeroNode.offset),t.prior>0&&this.outOfPage){const e=this.criterion.notes[t.ci].startTick;this.outOfPage(e)&&(t.prior-=.7)}}),t.matches.sort((e,t)=>t.prior-e.prior),this.cursors=t.matches;let s=null;const i=this.nullSteps(e),r=this.cursors[0];r&&r.totalCost<1&&(r.prior>0||r.totalCost<.4&&Math.log(Math.max(i*r.value,.001))>this.relocationThreshold)&&(this.zeroNode.offset=r.offset,s=r,(!this.bestNode||r.value>this.bestNode.value)&&(this.bestNode=r)),s?this.fineCursor=s:this.resetCursor(e,{breaking:!1})||(this.zeroNode.offset+=t.deltaSi*Math.tanh(i),console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",t.deltaSi,i))}else this.cursors=[]}path({fromIndex:e=0,toIndex:t=this.sample.notes.length-1}={}){const s=[];let i=null;for(let r=t;r>=e;){const e=this.sample.notes[r];if(!e.matches.length||e.matches[0].prior<-.01||e.matches[0].totalCost>=1){s[r]=-1,--r;continue}null!=i&&(e.matches.forEach(e=>e.backPrior=e.totalCost<1.99?e.priorByOffset(i):-1),e.matches.sort((e,t)=>t.backPrior-e.backPrior));const t=e.matches[0];t.path.forEach((e,t)=>s[t]=e),i=t.root.offset,r=t.rootSi-1}return console.assert(s.length==t+1,"path length error:",s,e,t+1,this.sample.notes.length,this.sample.notes.length?this.sample.notes[this.sample.notes.length-1].index:null),s}nullSteps(e){return e-(this.fineCursor?this.fineCursor.si:-1)-1}resetCursor(e,{breaking:t=!0}={}){t&&(this.breakingSI=e);const s=this.getCursorOffset();return null!=s&&(this.zeroNode.offset=s,this.zeroNode.si=e,this.fineCursor=null,console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",s),!0)}get relocationTendency(){const e=this.cursors&&this.cursors[0];if(!e)return null;const t=this.nullSteps(e.si);return t<=0?0:Math.log(Math.max(t*e.value,.001))/this.relocationThreshold}};const Qt=Xt,es=Jt,ts=e=>Math.tanh(e/192),ss=function(e,t,{softIndexFactor:s=1}={}){const i=e[t=Number(t)];if(t>0){const r=e[t-1];console.assert(null!=i.start,"note.start is null",i),console.assert(null!=r.start,"lastNote.start is null",r),i.deltaSi=ts((i.start-r.start)*s),i.softIndex=r.softIndex+i.deltaSi,console.assert(!Number.isNaN(i.deltaSi),"note.deltaSi is NaN.",i.start,r.start)}else i.softIndex=0,i.deltaSi=0};var is={normalizeInterval:ts,makeNoteSoftIndex:ss,makeMatchNodes:function(e,t,s=Qt.zero()){e.matches=[];const i=t.pitchMap[e.pitch];if(i)for(const t of i){const i=new Qt(e,t);s&&i.evaluatePrev(s),e.matches.push(i)}},genNotationContext:function(e,{softIndexFactor:t=1}={}){for(let s=0;s"setTempo"==e.subtype)||(n.push({time:t,type:"meta",subtype:"timeSignature",numerator:4,denominator:4,thirtyseconds:8}),n.push({time:t,type:"meta",subtype:"setTempo",microsecondsPerBeat:e.microsecondsPerBeat}));let a=t||0;if(e.notes)for(const t of e.notes)n.push({time:t.start,type:"channel",subtype:"noteOn",channel:t.channel||0,noteNumber:t.pitch,velocity:t.velocity,finger:t.finger}),a=Math.max(a,t.start),Number.isFinite(s)&&(t.duration=t.duration||s),t.duration&&(n.push({time:t.start+t.duration,type:"channel",subtype:"noteOff",channel:t.channel||0,noteNumber:t.pitch,velocity:0}),a=Math.max(a,t.start+t.duration));if(e.events){const t=e.events.filter(e=>!ns.includes(e.data.subtype));for(const e of t)n.push({time:e.time,...e.data}),a=Math.max(a,e.time)}return n.push({time:a+100,type:"meta",subtype:"endOfTrack"}),n.sort(function(e,t){return e.time-t.time}),n.map((e,t)=>({event:e,index:t})).filter(({event:e})=>"noteOn"==e.subtype&&null!=e.finger).reverse().forEach(({event:e,index:t})=>n.splice(t+1,0,{time:e.time,type:"meta",subtype:"text",text:`fingering(${e.finger})`})),n.forEach(e=>e.ticks=Math.round((e.time-t)*i)),n.forEach((e,t)=>e.deltaTime=e.ticks-(t>0?n[t-1].ticks:0)),{header:r,tracks:[n]}}var os={sliceMidi:(e,t,s)=>({header:e.header,tracks:e.tracks.map(e=>((e,t,s)=>{(e=>{let t=0;e.forEach(e=>{t+=e.deltaTime,e.tick=t})})(e);const i=[],r={};return e.forEach(e=>{e.tick>=t&&e.tick<=s&&"endOfTrack"!==e.subtype?i.push({...e,tick:e.tick-t}):e.ticki.push({...e,tick:0})),i.push({tick:s-t,type:"meta",subtype:"endOfTrack"}),(e=>{let t=0;e.sort((e,t)=>e.tick-t.tick).forEach(e=>{e.deltaTime=e.tick-t,t=e.tick})})(i),i})(e,t,s))}),encodeToMIDIData:as,encodeToMIDI:function(e,t){const s=as(e,t);return rs.encodeMidiFile(s)}};var cs={MIDI:Lt,MusicNotation:Vt,MidiPlayer:Gt,Matcher:is,MidiUtils:os};const ls=["id","ids","pitch","velocity","track","channel","rest","tied","overlapped","implicitType","afterGrace","contextIndex","staffTrack","chordPosition","division"];class MetaNotation{static fromAbsoluteNotes(e,t,s){const i=new MetaNotation(s);return i.measures=Array(t.length).fill(null).map((s,i)=>{const r=t[i],n=t[i+1]?t[i+1]-r:0,a=e.filter(e=>e.measure===i+1).map(e=>({tick:e.startTick-r,duration:e.endTick-e.startTick,...d.default(e,ls),subNotes:[]}));return a.forEach(e=>["rest","tied","implicitType","afterGrace"].forEach(t=>{e[t]||delete e[t]})),{tick:r,duration:n,notes:a}}),i.idTrackMap=e.reduce((e,t)=>(t.id&&(e[t.id]=t.track),e),{}),i}static performAbsoluteNotes(e,{withRestTied:t=!1}={}){const s=e.filter(e=>(t||!e.rest&&!e.tied)&&!e.overlapped).map(e=>({measure:e.measure,channel:e.channel,track:e.track,start:e.start,startTick:e.startTick,endTick:e.endTick,pitch:e.pitch,duration:e.duration,velocity:e.velocity||127,id:e.id,ids:e.ids,staffTrack:e.staffTrack,contextIndex:e.contextIndex,implicitType:e.implicitType,chordPosition:e.chordPosition})).reduce((e,t)=>{const s=`${t.channel}|${t.start}|${t.pitch}`,i=e[s];return i?i.ids.push(...t.ids):e[s]=t,e},{});return Object.values(s)}constructor(e){this.ripe=!1,e&&Object.assign(this,e)}get trackTickBias(){const e=this.measures[0];return this.trackNames.reduce((t,s,i)=>{if(t[s]=0,e){const r=e.notes.find(e=>e.track===i);r&&(t[s]=Math.min(r.tick,0))}return t},{})}get idSet(){return this.measures.reduce((e,t)=>(t.notes.filter(e=>!e.rest).forEach(t=>t.ids.forEach(t=>e.add(t))),e),new Set)}toJSON(){return{__prototype:"LilyNotation",measures:this.measures,idTrackMap:this.idTrackMap,trackNames:this.trackNames,ripe:this.ripe}}toAbsoluteNotes(e){let t=0;const s=e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length);const i=s.notes.map(s=>({startTick:t+s.tick,endTick:t+s.tick+s.duration,start:t+s.tick,duration:s.duration,measure:e,...d.default(s,ls)}));return t+=s.duration,i});return[].concat(...s)}toPerformingNotation(e,t={}){const s=this.toAbsoluteNotes(e),i=MetaNotation.performAbsoluteNotes(s,t),r=Math.max(...i.map(e=>e.start+e.duration)),n=e.reduce((e,t)=>e+this.measures[t-1].duration,0);return new cs.MusicNotation.Notation({ticksPerBeat:480,meta:{},tempos:[],channels:[i],endTime:r,endTick:n})}toPerformingMIDI(e,{trackList:t}={}){if(!e.length)return null;const s=-Math.min(0,...this.measures[0]?.events.map(e=>e.ticks)||[],...this.measures[0]?.notes.map(e=>e.tick)||[]);let i=s;const r=e.map(e=>{const t=this.measures[e-1];console.assert(!!t,"invalid measure index:",e,this.measures.length);const s=t.events.map(t=>({ticks:i+t.ticks,track:t.track,data:{...t.data,measure:e}}));return i+=t.duration,s}),n=e=>e.ticks+("noteOff"===e.subtype?-1e-8:0),a=[].concat(...r).reduce((e,t)=>(e[t.track]=e[t.track]||[],e[t.track].push({ticks:t.ticks,...t.data}),e),[]);a[0]=a[0]||[],i=s,e.map(e=>{const s=this.measures[e-1];console.assert(!!s,"invalid measure index:",e,this.measures.length),Number.isFinite(s.duration)&&(s.notes.forEach(s=>{if(t&&!t[s.track])return;if(s.rest)return;const r=i+s.tick,n=a[s.track]=a[s.track]||[];s.subNotes.forEach(t=>{n.push({ticks:r+t.startTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOn",channel:s.channel,noteNumber:t.pitch,velocity:t.velocity,staffTrack:s.staffTrack,staff:s.staff}),n.push({ticks:r+t.endTick,measure:e,ids:s.ids,type:"channel",subtype:"noteOff",channel:s.channel,noteNumber:t.pitch,velocity:0,staffTrack:s.staffTrack,staff:s.staff})})}),i+=s.duration)});const o=i;for(let e=0;e{e.sort((e,t)=>n(e)-n(t));let t=0;e.forEach(e=>{e.deltaTime=e.ticks-t,Number.isFinite(e.deltaTime)?t=e.ticks:e.deltaTime=0}),e.push({deltaTime:Math.max(o-t,0),type:"meta",subtype:"endOfTrack"})}),{header:{formatType:0,ticksPerBeat:480},tracks:a,zeroTick:s}}toPerformingNotationWithEvents(e,t={}){if(!e.length)return null;const{zeroTick:s,...i}=this.toPerformingMIDI(e,t),r=cs.MusicNotation.Notation.parseMidi(i);us(r);let n=s;return r.measures=e.map(e=>{const t=n;return n+=this.measures[e-1].duration,{index:e,startTick:t,endTick:n}}),r}setTempo(e){let t=!1;for(const s of this.measures)for(const i of s.events)"setTempo"===i.data.subtype&&(i.data.microsecondsPerBeat=6e7/e,t=!0);return t}}const us=(e,t=["ids","measure","staffTrack"])=>{const s=(e,t,s)=>`${e}|${t}|${s}`,i=e.notes.reduce((e,t)=>(e[s(t.channel,t.pitch,t.startTick)]=t,e),{});e.events.forEach(e=>{if("noteOn"===e.data.subtype){const r=s(e.data.channel,e.data.noteNumber,e.ticks),n=i[r];console.assert(!!n,"cannot find note of",r),n&&Object.assign(n,d.default(e.data,t))}})};var hs,ms={exports:{}},fs={exports:{}};fs.exports=hs=hs||function(e,t){var s;if("undefined"!=typeof window&&window.crypto&&(s=window.crypto),"undefined"!=typeof self&&self.crypto&&(s=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(s=globalThis.crypto),!s&&"undefined"!=typeof window&&window.msCrypto&&(s=window.msCrypto),!s&&"undefined"!=typeof global&&global.crypto&&(s=global.crypto),!s)try{s=require("crypto")}catch(e){}var i=function(){if(s){if("function"==typeof s.getRandomValues)try{return s.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof s.randomBytes)try{return s.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},r=Object.create||function(){function e(){}return function(t){var s;return e.prototype=t,s=new e,e.prototype=null,s}}(),n={},a=n.lib={},o=a.Base={extend:function(e){var t=r(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},c=a.WordArray=o.extend({init:function(e,s){e=this.words=e||[],this.sigBytes=s!=t?s:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,s=e.words,i=this.sigBytes,r=e.sigBytes;if(this.clamp(),i%4)for(var n=0;n>>2]>>>24-n%4*8&255;t[i+n>>>2]|=a<<24-(i+n)%4*8}else for(var o=0;o>>2]=s[o>>>2];return this.sigBytes+=r,this},clamp:function(){var t=this.words,s=this.sigBytes;t[s>>>2]&=4294967295<<32-s%4*8,t.length=e.ceil(s/4)},clone:function(){var e=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],s=0;s>>2]>>>24-r%4*8&255;i.push((n>>>4).toString(16)),i.push((15&n).toString(16))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>3]|=parseInt(e.substr(i,2),16)<<24-i%8*4;return new c.init(s,t/2)}},h=l.Latin1={stringify:function(e){for(var t=e.words,s=e.sigBytes,i=[],r=0;r>>2]>>>24-r%4*8&255;i.push(String.fromCharCode(n))}return i.join("")},parse:function(e){for(var t=e.length,s=[],i=0;i>>2]|=(255&e.charCodeAt(i))<<24-i%4*8;return new c.init(s,t)}},m=l.Utf8={stringify:function(e){try{return decodeURIComponent(escape(h.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return h.parse(unescape(encodeURIComponent(e)))}},f=a.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=m.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var s,i=this._data,r=i.words,n=i.sigBytes,a=this.blockSize,o=n/(4*a),l=(o=t?e.ceil(o):e.max((0|o)-this._minBufferSize,0))*a,u=e.min(4*l,n);if(l){for(var h=0;h>>7)^(d<<14|d>>>18)^d>>>3,g=l[f-2],y=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;l[f]=p+l[f-7]+y+l[f-16]}var v=i&r^i&n^r&n,x=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),S=m+((o<<26|o>>>6)^(o<<21|o>>>11)^(o<<7|o>>>25))+(o&u^~o&h)+c[f]+l[f];m=h,h=u,u=o,o=a+S|0,a=n,n=r,r=i,i=S+(x+v)|0}s[0]=s[0]+i|0,s[1]=s[1]+r|0,s[2]=s[2]+n|0,s[3]=s[3]+a|0,s[4]=s[4]+o|0,s[5]=s[5]+u|0,s[6]=s[6]+h|0,s[7]=s[7]+m|0},_doFinalize:function(){var e=this._data,s=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return s[r>>>5]|=128<<24-r%32,s[14+(r+64>>>9<<4)]=t.floor(i/4294967296),s[15+(r+64>>>9<<4)]=i,e.sigBytes=4*s.length,this._process(),this._hash},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e}});s.SHA256=n._createHelper(u),s.HmacSHA256=n._createHmacHelper(u)}(Math),e.SHA256}(fs.exports);var ds=ms.exports;class HashVector{static fromHash(e){const t=[];for(const s of e)for(let e=0;e<8;++e)t.push(s>>e&1?1:-1);return new HashVector(t)}static fromString(e){const t=(e=>{const{words:t,sigBytes:s}=ds(e),i=t.map(e=>e<0?e+4294967296:e),r=s/t.length;return new Uint8Array(s).map((e,t)=>i[Math.floor(t/r)]>>8*(3-t%r)&255)})(e);return HashVector.fromHash(t)}static fromWords(e){return e.map(e=>HashVector.fromString(e)).reduce((e,t)=>e.add(t),HashVector.zero)}static concat(...e){const t=e.map(e=>e.fields).flat(1);return new HashVector(t)}constructor(e=null){this.fields=e||Array(256).fill(0)}get length(){return this.fields.length}toHash(){return Uint8Array.from(Array(this.length/8).fill(0).map((e,t)=>this.fields.slice(8*t,8*(t+1)).reduce((e,t,s)=>e|(t>0?1:0)<this.fields[s]=t+e.fields[s]),this}scale(e){return this.fields=this.fields.map(t=>t*e),this}sub(e){const t=e>0?this.fields.slice(0,e):this.fields.slice(e);return new HashVector(t)}static get zero(){return new HashVector}}const ps=Array(256).fill(0).map((e,t)=>(e=>{let t=0;for(let s=e;s>0;s>>=1)s%2&&++t;return t})(t));ps.reduce((e,t,s)=>({...e,[("0"+s.toString(16)).slice(-2)]:t}),{});const gs=(e,t)=>{const s=8*e.length,i=((e,t)=>e.map((e,s)=>e^t[s]))(e,t);return(s-2*i.reduce((e,t)=>e+ps[t],0))/s},ys=e=>("0"+e.toString(16)).slice(-2),vs=(e,t=!1)=>({empty:!0,duration:e.duration,tickMap:{0:EventTerm.space({duration:e.duration,tick:0})},timeSignature:e.timeSignature,timeSigNumeric:e.timeSigNumeric,keySignature:e.keySignature,contextedTerms:e.terms.filter(e=>e instanceof ContextedTerm&&(!e.staffLevel||t)),marks:[]}),xs=e=>{const t=[].concat(...e.measures.map(e=>Object.values(e.tickMap).filter(e=>e instanceof EventTerm)));for(let e=1;ee.type===K.SlurBegin)&&i.accessories.some(e=>e.type===K.SlurEnd)){const e=s.pitches.filter(e=>i.pitches.some(t=>t.note===e.note&&t.alter===e.alter));e.length>0&&(s.tying=!0,i.tied=!0,e.forEach(e=>{e.tying=!0;i.pitches.find(t=>t.note===e.note&&t.alter===e.alter).tied=!0}),e.forEach(()=>{const e=s.accessories.findIndex(e=>e.type===K.SlurBegin);e>=0&&s.accessories.splice(e,1);const t=i.accessories.findIndex(e=>e.type===K.SlurEnd);t>=0&&i.accessories.splice(t,1)}))}}};class Spartito extends SimpleClass{constructor(e){super(),super.assign(e),this.measures.forEach(e=>e.staffGroups=this.staffGroups)}get regulated(){return this.measures.every(e=>e.regulated)}get solidMeasureCount(){return this.measures.filter(e=>!e.empty).length}get measureIndexMapping(){let e=0;return this.measures.map(t=>t.empty?null:e++)}get headBPM(){for(const e of this.measures)if(e.marks){const t=e.marks.find(e=>e instanceof TempoTerm&&e.isValid());if(t)return t.bpm}return null}get measureLayoutCode(){const e=this.measures.filter(e=>!e.empty).map((e,t)=>({index:t+1,vb:e.voltaBegin,ve:e.voltaEnd,alter:e.alternative,leftSign:"",rightSign:""}));return e.forEach((t,s)=>{if(t.vb){const i=e.slice(s+1).findIndex(e=>e.vb),r=i>=0?s+i:e.length;e.slice(s,r-1).some(e=>e.ve)&&(t.leftSign="2*[")}if(t.ve){const i=e.slice(0,s+1).reverse(),r=i.slice(1).findIndex(e=>e.ve);if(r>=0&&!i.slice(1,r+1).some(e=>e.vb))return;if(t.alter){const r=i.findIndex(e=>!e.alter);r>0&&(i[r].rightSign="]",i[r-1].leftSign="{[",t.rightSign="],",e[s+1]&&(e[s+1].rightSign="},"))}else t.rightSign="],";i.some(e=>e.vb)||(e[0].leftSign="2*[")}}),e.map(e=>e.leftSign+e.index.toString()+e.rightSign+(e.rightSign?"":",")).join(" ").replace(/,$/,"")}get qualityScore(){const e=this.measures.filter(e=>!e.empty),t=e.map(Le).map(e=>e.qualityScore).reduce((e,t)=>e+t,0);return e.length?t/e.length:null}dumpEvaluations(){const e=this.measures.filter(e=>!e.empty).map(e=>({measureIndex:e.measureIndex,...Le(e)})),t=e.map(e=>e.qualityScore).reduce((e,t)=>e+t,0);console.log("qualityScore:",t/e.length),console.table(e)}regulate(e={}){this.measures.forEach(t=>t.regulated||t.regulate(e))}cleanupRegulation(){this.measures.forEach(e=>e.voices=null)}rectifyTimeSignatures(e=new DummyLogger){const t=this.measures.map((e,t)=>({measure:e,index:t})).filter(({measure:e,index:t})=>!t||e.timeSignatureChanged).map(({index:e})=>e);t.map((e,s)=>this.measures.slice(e,se.filter(e=>e.estimatedDuration>0)).filter(e=>e.length>=3||e.some(e=>e.doubtfulTimesig)).forEach(t=>{if(t[0].patched){const s=t[0].timeSignature,i=t.slice(1).filter(e=>!e.patched&&L(e.timeSignature)!==L(s));if(i.length){const t=i[0].timeSignature;i.forEach(e=>e.basics.forEach(e=>e.timeSignature=s)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by patched head:",`${L(t)} -> ${L(s)}`,i.map(e=>e.measureIndex))}return}const s=t[0].timeSignature,i=Number.isInteger(Math.log2(s.denominator));let r=i?4:8;i&&(r=Math.max(r,t[0].timeSignature.denominator));const n=t.map(e=>Math.round(e.estimatedDuration*r/we)),a=Object.entries(n.reduce((e,t)=>(e[t]=(e[t]||0)+1,e),{})).sort((e,t)=>t[1]-e[1]),o=a[0][1],c=a.filter(([e,t])=>t>.6*o).reduce((e,t)=>Number(t[0])>Number(e[0])?t:e);if(c[1]>1){let n=Number(c[0]);if(!i||s.denominator*n!==s.numerator*r){if(i&&r!==s.denominator){const e=n*s.denominator/r;Number.isInteger(e)&&(n=e,r=s.denominator)}const a=t.filter(e=>!e.patched),o=D(n,r);a.forEach(e=>e.basics.forEach(e=>e.timeSignature=o)),e.info("[rectifyTimeSignatures]\ttimesignator overwrote by estimation:",`${L(s)} -> ${n}/${r}`,a.map(e=>e.measureIndex))}}})}makeVoiceStaves(){this.regulate();const e=Math.max(...this.measures.map(e=>e.voices.length));if(!e||!Number.isFinite(e))return null;this.measures.filter(e=>e.patched).forEach(e=>{e.events.forEach(e=>{e.tied&&e.pitches.forEach(e=>e.tied=!0)})});for(let e=0;et.staff===e)||[]).reduce((e,t)=>Math.max(e,t.x||0),-1/0);if(!Number.isFinite(r))continue;const n=[];t.contexts[e]=i.filter(e=>!(0===e.type&&e.x>r)||(n.push(e),!1)),n.length>0&&s.contexts[e]&&(n.forEach(e=>e.tick=0),s.contexts[e]=[...n,...s.contexts[e]])}}const t=this.measures.map(t=>{console.assert(t.validRegulated,"[makeVoiceStaves] measure is invalid:",t);const s={};t.events.forEach(e=>s[e.id]=e);const i=new Set(Array(t.contexts.length).fill(null).map((e,t)=>t));let r=null;if(t.barType)switch(t.barType){case"Segment":r="||";break;case"Terminal":r="|."}const n=t.voices.map(e=>{const n=e.map(e=>s[e]);n.sort((e,t)=>e.tick-t.tick);const a={};let o=0,c=null;for(const e of n)Number.isFinite(e?.tick)?(e.tick>o?a[o]=EventTerm.space({tick:o,duration:e.tick-o}):!e.grace&&e.tick{const s=t.eventMap[e];s&&(a[s.tick]=s)}))):console.warn("invalid event tick:",e);t.endEvent&&t.endEvent.graceIds&&t.endEvent.graceIds.forEach(e=>{const s=t.eventMap[e];!s||c&&s.staff!==c.staff||(a[s.tick]=s)}),ot.duration&&Number.isFinite(t.duration)&&(c.timeWarp=F(t.duration-c.tick,c.duration)),console.assert(!c||!c.timeWarp||Number.isInteger(c.timeWarp.numerator)&&Number.isInteger(c.timeWarp.denominator),"invalid time warp:",c);const l=n[0]?n[0].staff:0;i.delete(l);const u=t.basics[l],h=t.contexts[l],m=n[n.length-1],f=m?m.staff:0;return{tickMap:a,duration:t.duration,...u,contextedTerms:h,marks:[],break:t.break,pageBreak:t.pageBreak,headStaff:l,tailStaff:f,bar:r}});for(;n.lengtht.headStaff!==e),o=vs({terms:r,duration:t.duration,...s,break:t.break,pageBreak:t.pageBreak},a);o.headStaff=e,o.tailStaff=e,n.push(o)}return n});t.forEach(e=>e.forEach(e=>{const t=[];e.empty||(t.push(`s${e.headStaff}`),t.push(`s${e.tailStaff}`)),Object.values(e.tickMap).forEach(e=>{if(e instanceof EventTerm){if(t.push(`s${e.staff}`),e.stemDirection){const s=`st${e.staff}-${e.stemDirection}`;t.push(s,s)}e.grace?t.push(`gd${e.mainDuration}`):t.push(`d${e.mainDuration}`),e.rest?t.push("r-"+e.rest):e.pitches.forEach(e=>{t.push(`p1-${e.note}`),t.push(`p8-${Math.round(e.note/8)}`)})}}),e.trait=HashVector.fromWords(t)}));const s=this.staffGroups.flat(1).reduce((e,t)=>(e[t]=this.staffGroups.findIndex(e=>e.includes(t)),e),{}),i=Array(e).fill(null).map((e,t)=>({vector:HashVector.zero,index:t,weight:0,headStaff:null}));t.forEach((e,t)=>{i.sort((e,t)=>t.weight-e.weight);const r=new Set(e);i.forEach(e=>{const i=[...r];let n=i[0];if(t>0&&i.length>1){const t=i.map(t=>s[t.headStaff]===s[e.headStaff]?gs(e.vector.toHash(),t.trait.toHash()):-1);n=i[G(t)]}r.delete(n),n.voiceIndex=e.index,e.vector.scale(.4).add(n.trait),e.weight=Object.keys(n.tickMap).length,0===t&&(e.headStaff=n.headStaff)}),e.sort((e,t)=>e.voiceIndex-t.voiceIndex)});const r=Array(this.stavesCount).fill(null).map(()=>[]);i.forEach(e=>{r[e.headStaff].push(e.index)});const n=Array(this.stavesCount).fill(null).map((e,s)=>{if(!t[0])return{voices:[]};return{voices:r[s].map(e=>({mode:"relative",measures:t.map(t=>t[e])}))}});return(e=>{if(!e[0]||!e[0].voices[0])return void console.warn("empty voices:",e);const t=e[0].voices[0].measures.length;Array(t).fill(null).map((t,s)=>{for(const t of e)for(const e of t.voices)if(!e.measures[s].empty)return!1;return!0}).forEach((t,s)=>{t&&e.forEach(e=>e.voices.forEach(e=>{e.measures[s].tickMap={}}))})})(n),n.forEach(e=>e.voices.forEach(xs)),n}perform(){const e=this.makeVoiceStaves();if(!e)return null;const t=new Map,s=Array(this.stavesCount).fill(null).reduce((e,t,s)=>(e[s]=s,e),{}),i=[].concat(...e.map((e,t)=>e.voices.map(()=>s[t])));let r=!1,n=0,a=null;const o=this.measures.filter(e=>!e.empty).map(s=>{const{systemIndex:o,right:c}=s.position,l=s.measureIndex,u=[].concat(...e.map(e=>e.voices.map(e=>e.measures[l]))),h=u[0],m=n;n+=h.duration;const f=[].concat(...u.map((e,s)=>{const r=i[s],n=Object.values(e.tickMap).filter(e=>e instanceof EventTerm&&!e.rest).map(e=>{const s=Math.round(1*e.duration);console.assert(Number.isFinite(e.tick),"invalid event term tick:",e),console.assert(Number.isFinite(s),"invalid event term duration:",e),e.tick>=0&&e.noteIds.forEach(s=>{t.set(s,{system:o,measure:l,x:e.roundX,endX:c})});const i=this.staffGroups.findIndex(t=>t.includes(e.staff));return{tick:Math.round(1*e.tick),duration:s,pitches:e.pitches,noteIds:e.noteIds,part:i,staff:e.staff}});return[].concat(...n.map(e=>{const t=e.pitches.reduce((e,t)=>(e[q(t)]=t,e),{});return Object.values(t).sort((e,t)=>e.note-t.note).filter(e=>!e.tied).map((t,s)=>{const i=q(t),n=e.noteIds&&e.noteIds[s];return{tick:e.tick,pitch:i,duration:e.duration,chordPosition:{index:s,count:e.pitches.length},tied:t.tied,id:n,ids:[n],track:e.part,staff:e.staff,channel:r,subNotes:[{startTick:0,endTick:e.duration,pitch:i,velocity:127}]}})}))})),d=[];a=a||d,s.marks&&s.marks.forEach(e=>{if(e instanceof TempoTerm){const t=e.bpm;if(e.isValid()){const s=r?d:a,i=r?e.tick:0;s.push({track:0,ticks:i,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:Math.round(6e7/t)}}),r=!0}}});const p=s.basics[0];return{tick:m,duration:s.duration,notes:f,events:d,timeSignature:p&&p.timeSignature,keySignature:p&&p.keySignature}});r||o[0].events.push({track:0,ticks:0,data:{type:"meta",subtype:"setTempo",microsecondsPerBeat:5e5}});return{notation:new MetaNotation({measures:o}),tokenMap:t}}performByEstimation(){const e=new Map;let t=0;const s=this.measures.filter(e=>e.events.some(e=>e.predisposition)).map(s=>{const i=t,r=Math.round(s.estimatedDuration||$(we,s.timeSignature)),n=s.basics[0];t+=r;const{systemIndex:a,right:o}=s.position,c=s.measureIndex;return{tick:i,duration:r,notes:s.events.filter(e=>e.predisposition&&e.predisposition.fake<.5&&!e.rest).map(t=>{const s=Math.round(t.predisposition.tick);return t.noteIds.forEach(s=>{e.set(s,{system:a,measure:c,x:t.roundX,endX:o})}),t.pitches.map((e,i)=>{const r=q(e),n=t.noteIds&&t.noteIds[i],a=this.staffGroups.findIndex(e=>e.includes(t.staff));return{tick:s,pitch:r,duration:t.duration,chordPosition:{index:i,count:t.pitches.length},tied:e.tied,id:n,ids:[n],track:a,staff:t.staff,channel:0,subNotes:[{startTick:0,endTick:t.duration,pitch:r,velocity:127}]}})}).flat(1),events:[],timeSignature:n&&n.timeSignature,keySignature:n&&n.keySignature}});return{notation:new MetaNotation({measures:s}),tokenMap:e}}featureHash(){const e=this.measures.slice(0,16).map(e=>e.featureWords),t=[1,4,16].map(t=>{const s=e.slice(0,t).filter(Boolean),i=s.map(e=>e[0]).flat(1),r=s.map(e=>e[1]).flat(1),n=s.map(e=>e[2]).flat(1),[a,o,c]=[i,r,n].map(HashVector.fromWords);return HashVector.concat(a,o.sub(128),c.sub(128))});return HashVector.concat(...t).toHash()}featureHashHex(){return e=this.featureHash(),Array.from(e).map(ys).join("");var e}featureHashBigInt(){return e=this.featureHash(),Array.from(e).reduce((e,t)=>0x100n*e+BigInt(t),0n);var e}assignMeasureNumbers(){let e=null;for(const t of this.measures)(t.discard||t.events.length)&&(t.indent&&(e=null),Number.isFinite(e)||(e=t.partialDuration?0:1),t.measureNumber=e++)}}Spartito.className="Spartito";const Ss=[0,2,4,5,7,9,11],bs=e=>{let t=e%7;for(;t<0;)t+=7;return t},ks=e=>{let t=e%12;for(;t<0;)t+=12;return t},Ts={[-2]:"♭♭",[-1]:"♭",0:"♮",1:"♯",2:"𝄪"};class StaffContext{constructor(){this.logger=new DummyLogger,this.clef=-3,this.keyAlters=[],this.octaveShift=0,this.alters=[],this.timeSignature={numerator:4,denominator:4},this.timeSigNumeric=!1,this.timeSigNumSet=!1,this.timeSigDenSet=!1,this.doubtingTimesig=!0}change(e){switch(e.type){case Oe.Clef:this.clef=e.clef;break;case Oe.KeyAcc:this.keyAlters[bs(this.yToNote(e.y))]=e.alter;break;case Oe.Acc:this.alters[this.yToNote(e.y)]=e.alter;break;case Oe.OctaveShift:this.octaveShift=e.octaveShift;break;case Oe.TimeSignatureC:switch(this.timeSigNumeric=!1,e.tokenType){case"timesig-C44":this.timeSignature.numerator=4,this.timeSignature.denominator=4;break;case"timesig-C22":this.timeSignature.numerator=2,this.timeSignature.denominator=2}this.doubtingTimesig=this.partialTimeSignature;break;case Oe.TimeSignatureN:switch(this.timeSigNumeric=!0,e.y){case 1:this.timeSigDenSet?this.timeSignature.denominator=10*this.timeSignature.denominator+e.number:this.timeSignature.denominator=e.number,this.timeSigDenSet=!0;break;case-1:this.timeSigNumSet?this.timeSignature.numerator=10*this.timeSignature.numerator+e.number:this.timeSignature.numerator=e.number,this.timeSigNumSet=!0;break;default:this.logger.warn("unexpected time signature Y:",e.y)}this.doubtingTimesig=this.partialTimeSignature}}resetMeasure(){this.alters=[],this.timeSigNumSet=!1,this.timeSigDenSet=!1}resetSystem(){this.keyAlters=[]}get keySignature(){return this.keyAlters.filter(e=>Number.isInteger(e)).reduce((e,t)=>e+t,0)}get partialTimeSignature(){return!this.timeSigNumSet!=!this.timeSigDenSet}noteToY(e){return-e/2-this.clef-3.5*this.octaveShift}pitchToNote(e,{preferredAlter:t=null}={}){t||(t=this.keySignature<0?-1:1);const s=Math.floor((e-60)/12),i=ks(e),r=Ss.includes(i)?i:ks(i-t),n=Ss.indexOf(r);this.logger.assert(n>=0,"invalid preferredAlter:",e,t,r);const a=7*s+n,o=i-r,c=this.keyAlters[n]||0;return{note:a,alter:Number.isInteger(this.alters[a])?o:o===c?null:o}}pitchToY(e,{preferredAlter:t=null}={}){const{note:s,alter:i}=this.pitchToNote(e,{preferredAlter:t});return{y:this.noteToY(s),alter:i}}yToNote(e){return this.logger.assert(Number.isInteger(2*e),"invalid y:",e),2*(-e-3.5*this.octaveShift-this.clef)}alterOnNote(e){if(Number.isInteger(this.alters[e]))return this.alters[e];const t=bs(e);return Number.isInteger(this.keyAlters[t])?this.keyAlters[t]:0}noteToPitch(e){const t=Math.floor(e/7),s=bs(e),i=60+12*t+Ss[s]+this.alterOnNote(e);return Number.isFinite(i)?i:(this.logger.warn("invalid pitch value:",i,e,t,s),-1)}yToPitch(e){return this.noteToPitch(this.yToNote(e))}yToPitchName(e){const t=this.yToNote(e),s=Math.floor(t/7),i=bs(t);let r=this.alterOnNote(t);return r||Number.isInteger(this.alters[t])||(r=null),`${Ts[r]?Ts[r]:""}${"CDEFGAB"[i]}${s+4}`}}const ws=e=>e.reduce((e,t,s)=>t?e|1<{if(e.version<3){const{version:t,stavesCount:s,layoutTemplate:i,...r}=e;let n=s>1?Array(s-1).fill(",").join(""):"";2===s&&(n="{-}"),e={version:3,staffLayoutCode:n,...r}}return e.version<8&&(e.pages.forEach(e=>{e.systems.forEach(e=>{if(e.semantics){const t=e.semantics.filter(e=>e.semantic===w.vline_BarMeasure);e.semantics=[].concat(...e.staves.map(e=>{const s=e.top+e.staffY;return t.map(e=>({...e,y:e.y+s,extension:{...e.extension,y1:e.extension.y1+s,y2:e.extension.y2+s}}))}))}})}),e.version=8),e.version<9&&(e.spartito=null,e.version=9),e})(e)),this.pages=this.pages||[],this.headers=this.headers||{},this.instrumentDict=this.instrumentDict||{},this.pageSize=this.pageSize||{width:794,height:1122},this.unitSize=this.unitSize||null,this.staffLayoutCode=this.staffLayoutCode||(2===this.maxStavesCount?"{-}":Array(this.maxStavesCount).fill("").join(","))}get systems(){return[].concat(...this.pages.map(e=>e.systems))}get measureCount(){return this.systems.reduce((e,t)=>e+(t.measureCount||0),0)}get imageKeys(){return[...this.pages.map(e=>e.source?.url),...this.systems.map(e=>e.backgroundImage),...[].concat(...this.systems.map(e=>[...e.staves.map(e=>e.backgroundImage),...e.staves.map(e=>e.maskImage)].filter(Boolean)))].filter(Boolean)}get breakSystemIndices(){const e=[];let t=0;return this.pages.forEach((s,i)=>{ie.staves.length),0)}get sidBlackList(){const e=[].concat(...this.systems.map(e=>e.sidBlackList));return new Set(e)}get sidWhiteList(){const e=[].concat(...this.systems.map(e=>e.sidWhiteList));return new Set(e)}get semanticHash(){const e=[].concat(...this.systems.map(e=>[].concat(...e.staves.map(t=>t.semantics?e.qualifiedSemantics(t.semantics).map(e=>e.id):[]))));return p.default(e.join(""))}eventSystemsToTermStaves(e,t=new DummyLogger){const s=Array(this.maxStavesCount).fill(null).map((t,s)=>({rows:e.map((e,t)=>e.columns.map((i,r)=>{const n=i.rows[s];console.assert(n,"[eventSystemsToTermStaves] measure is null:",s,i.rows);const a=n.contexts;0===r&&(a.some(e=>e.type===Oe.OctaveShift)||a.unshift(new ContextedTerm({staff:s,x:0,y:0,tokenType:K.OctaveShift0,tick:0})));const o=[...n.events||[],...a].sort((e,t)=>e.x-t.x),c=0===s&&r===e.columns.length-1&&this.breakSystemIndices.includes(t);return{terms:o,duration:i.duration,pageBreak:c}}))}));return s.forEach(e=>((e,t=new DummyLogger)=>{const s=new StaffContext;s.logger=t;for(const t of e.rows){for(const e of t){const t=e.terms.find(e=>e instanceof EventTerm);let i=t?Math.min(t.tick,0):0;e.terms.forEach(e=>{if(e instanceof ContextedTerm)e.tick=i,s.change(e);else if(e instanceof EventTerm){const t=e.tick+(e.duration||0);t>i&&(i=t),e.ys&&(e.pitches=e.ys.map(e=>{const t=s.yToNote(e);return{note:t,alter:s.alterOnNote(t),octaveShift:s.octaveShift}}))}}),e.timeSignature={...s.timeSignature},e.timeSigNumeric=s.timeSigNumeric,e.doubtfulTimesig=s.doubtingTimesig||!Number.isInteger(Math.log2(e.timeSignature.denominator))||e.timeSignature.numerator<=e.timeSignature.denominator/4,e.keySignature=s.keySignature,0===e.duration&&(e.duration=we*e.timeSignature.numerator/e.timeSignature.denominator),s.resetMeasure()}s.resetSystem()}})(e,t)),s}resetPageLayout(e){const{unitSize:t=this.unitSize,pageSize:s=this.pageSize}=e,i=.5*s.width/t,r=.5*s.height/t;this.pages.forEach(e=>{const n=i-e.width/2,a=r-e.height/2;e.systems.forEach(e=>{e.left+=n,e.top+=a}),e.semantics&&e.semantics.forEach(e=>{e.x+=n,e.y+=a}),e.width=s.width/t,e.height=s.height/t,e.assemble({textAnnotations:this.textAnnotations})}),this.unitSize=t,this.pageSize=s}getMeasure(e){let t=e;for(const s of this.systems){if(te&&e.measures[t]);return{measureIndex:e,system:s,localIndex:t,left:r.left,right:r.right,measures:n}}t-=s.measureCount}return null}getRawCluster(e,t,{timeSignature:s}={}){const i=this.getMeasure(e);if(!i)return null;const{system:r,left:n,right:a}=i,o=[Ct];s&&o.push(..._t(s));const c=r.staves[0].top+r.staves[0].staffY-2;return r.staves.forEach(e=>{let s=r.qualifiedSemantics(e.semantics,t).filter(e=>e.x>n&&e.xe.semantic===w.TempoNotehead).forEach(e=>{const t=s.findIndex(t=>/^Notehead/.test(t.semantic)&&P(e,t)<.3);t>=0&&s.splice(t,1)});const i=e.top+e.staffY-c;s.forEach(t=>{const s=dt[t.semantic];if(s){let r=t.y,a=t.y;s===dt.vline_Stem&&(r=t.extension.y1,a=t.extension.y2),o.push({id:t.id,type:s,staff:e.index,x:t.x-n,y1:r+i,y2:a+i})}})}),new SemanticCluster({index:e,elements:o})}getRawClusters(e=1){return Array(this.measureCount).fill(null).map((t,s)=>this.getRawCluster(s,e))}makeSpartito(e=new DummyLogger){let t=this.systems.map(e=>e.getEvents(this.maxStavesCount));const s=this.eventSystemsToTermStaves(t,e);t.forEach((e,t)=>{e.columns.forEach((e,i)=>{e.basics=s.map(e=>{const{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}=e.rows[t][i];return{timeSignature:s,timeSigNumeric:r,keySignature:n,doubtfulTimesig:a}})})});const i=[].concat(...t.map(e=>e.columns.map(t=>{const s=t.measureIndex,{system:i,localIndex:r,left:n,right:a}=this.getMeasure(s),o=[];i.staves.forEach(e=>o[e.index]=e.top+e.staffY);const c=this.patches&&this.patches.find(e=>e.measureIndex===s),l=c?c.events:SpartitoMeasure.reorderEvents([].concat(...t.rows.map(e=>e.events)),o),u=Object.fromEntries(Object.entries(t.barTypes).map(([e,t])=>[e,t/i.staves.length])),h=0===r&&i.indent;return new SpartitoMeasure({measureIndex:s,staffMask:e.staffMask,position:{systemIndex:i.index,localIndex:r,left:n,right:a,staffYs:i.staves.map(e=>e.top+e.staffY),staffYsFull:o},duration:c?c.duration:t.duration,events:l,contexts:t.rows.map(e=>e.contexts),marks:t.marks,break:t.break,pageBreak:t.pageBreak,voltaBegin:t.voltaBegin,voltaEnd:t.voltaEnd,alternative:t.alternative,barTypes:u,indent:h,basics:c?c.basics:t.basics,matrixH:null,matrixV:null,voices:c?c.voices:null,patched:!!c})}))),r=this.staffLayout,n=r.standaloneGroups.map(e=>e.map(e=>r.staffIds.indexOf(e)));return this.spartito=new Spartito({stavesCount:this.maxStavesCount,staffGroups:n,measures:i}),this.spartito}makeMusicSheet(){const e=this.spartito||this.makeSpartito();e.regulated||console.warn("[makeMusicSheet]\tspartito not regulated.");const t=e.makeVoiceStaves(),{title:s,pageSize:i,unitSize:r,staffLayout:n,paperOptions:a,headers:o,instrumentDict:c}=this;return{title:s,pageSize:i,unitSize:r,measureLayout:this.getMeasureLayout(),staffLayout:n,paperOptions:a,headers:o,voiceStaves:t,instrumentDict:c}}findPoint(e){for(const t of this.systems)for(let s=0;st.id===e);if(i){return{point:i,pageIndex:this.pages.findIndex(e=>e.systems.includes(t)),systemIndex:t.index,staffIndex:s}}}return null}getMeasureSemantics(e,t){const s=this.systems[e];if(!s)return null;const i=t?s.measureBars[t-1]:0,r=s.measureBars[t]||s.width;return s.staves.map((e,t)=>{const s=e.top+e.staffY;return e.semantics.filter(e=>e.x>=i&&e.x{const[i,r]=Number.isFinite(e.extension?.y1)?[e.extension.y1,e.extension.y2]:[e.y,e.y];return{...e,staff:t,sy1:i+s,sy2:r+s}})}).flat(1)}makeTimewiseGraph({store:e=!1}={}){if(!this.spartito)return null;return{measures:this.spartito.measures.filter(e=>e.events.length>0).map(t=>{const s=this.getMeasureSemantics(t.position.systemIndex,t.position.localIndex),i={measureIndex:t.measureIndex,left:t.position.left,right:t.position.right,points:s};return e&&(t.graph=i),i})}}getTokenMap(){const e=new Map;return this.systems.forEach(t=>t.staves.forEach(t=>t.measures.forEach(t=>t.tokens.forEach(t=>e.set(t.id,t))))),e}assemble(e=1,t=new DummyLogger){const s=new Map;this.pages.forEach((e,t)=>e.index=t);let i=0;this.systems.forEach((r,n)=>{r.index=n,r.headMeasureIndex=i,r.prev=this.systems[n-1]||null,r.next=this.systems[n+1]||null,r.semantics&&r.semantics.length&&r.semantics.forEach(e=>((e,i,r)=>{const n=O(e,i,r);t.assert(!s.has(n),"semantic point hash conflicted:",n,r,s.get(n)),s.set(n,r)})(n,null,e)),r.assemble(e,t),i+=r.measureCount}),this.pages.forEach((e,s)=>{e.systems.forEach(e=>e.pageIndex=s),e.assemble({textAnnotations:this.textAnnotations},t)})}assembleSystem(e,t=1){this.systems.forEach((e,t)=>e.index=t);const s=e.index;e.semantics&&e.semantics.length&&(e.semantics.forEach(e=>O(s,null,e)),e.assemble(t))}markVoices(e){const t=this.getTokenMap();for(const e of t.values())e.voice=0;const s=[].concat(...e.map((e,t)=>(e.voices||[]).map((e,s)=>[t,s]))).sort(([e,t],[s,i])=>t-i||e-s).map(([e,t])=>`${e}|${t}`);e.forEach((e,i)=>(e.voices||[]).forEach((e,r)=>e.measures.forEach(e=>{const n=s.indexOf(`${i}|${r}`);Object.values(e.tickMap).filter(e=>e instanceof EventTerm).forEach(e=>{const s=e.noteIds?e.noteIds.map(e=>t.get(e)).filter(Boolean):[],i=e.accessories?e.accessories.map(e=>t.get(e.id)).filter(Boolean):[];[...s,...i].forEach(e=>e.voice|=1<e.timeWarped=!0)})})))}async replaceImageKeys(e){await Promise.all([...this.pages.map(async t=>{t.source&&(t.source.url=await e(t.source.url))}),...this.systems.map(t=>Promise.all([e(t.backgroundImage).then(e=>t.backgroundImage=e),...t.staves.map(async t=>{t.backgroundImage=await e(t.backgroundImage),t.maskImage=await e(t.maskImage)})]))])}inferenceStaffLayout(){const e=Math.max(...this.systems.map(e=>e.staves.length),0);this.staffLayoutCode=Array(e).fill("").join(",");const t=this.systems.filter(t=>t.staves.length===e&&t.bracketsAppearance);if(!t.length)return;const s=t.map(e=>{try{return it(e.bracketsAppearance).staffIds.length!==e.staves.length?null:e.bracketsAppearance}catch(e){return null}}).filter(Boolean);if(!s.length)return;const i=s.reduce((e,t)=>{const s=e[t]||0;return e[t]=s+1,e},{}),r=Math.max(...Object.values(i)),n=Object.entries(i).find(([e,t])=>t===r)[0].replace(/\{,*\}/g,e=>e.replace(/,/g,"-")),a=it(n);this.staffLayoutCode=n;let o=null;for(const t of this.systems)if(o&&t.staves.length===o.staves.length&&t.bracketsAppearance===o.bracketsAppearance)t.staffMaskChanged=null;else{if(t.staves.length{if(s.length>a.staffIds.length)return null;if(s.reduce((e,t)=>e+t,0)===t.staves.length)return ws(s);for(const i of[1,0]){const r=[...s,i],n=a.partialMaskCode(r);if(n===t.bracketsAppearance)return ws(r);if(t.bracketsAppearance.startsWith(n)){const t=e(r);if(t)return t}}return null},s=e([]);t.staffMaskChanged=o&&s===o.staffMask?null:s}o=t}}assignBackgroundForMeasure(e){e.backgroundImages=[];const t=this.systems[e.position.systemIndex];t.backgroundImage&&e.backgroundImages.push({url:t.backgroundImage,position:t.imagePosition,original:!0}),t.staves.forEach(s=>{!t.backgroundImage&&s.backgroundImage&&e.backgroundImages.push({url:s.backgroundImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top},original:!0}),s.maskImage&&e.backgroundImages.push({url:s.maskImage.toString(),position:{...s.imagePosition,y:s.imagePosition.y+s.top}})})}blackoutFakeNotes(e="patched"){if(!this.spartito)return;let t=e=>!0;switch(e){case"patched":t=e=>e.patched;break;case"perfect":t=e=>e.patched||e.regulated&&Le(e).perfect}const s=this.spartito.measures.filter(t).reduce((e,t)=>{if(!t.regulated)return;const s=t.voices.flat(1);return t.events.filter(e=>!e.rest&&!e.grace&&!s.includes(e.id)).forEach(t=>t.noteIds&&e.push(...t.noteIds)),e},[]),i=new Set(s);return this.systems.forEach(e=>e.staves.forEach(t=>{const s=t.semantics.filter(e=>i.has(e.id)).map(e=>e.id);e.sidBlackList.push(...s)})),s}getMeasureLayout(){const e=this.spartito&&this.spartito.measureLayoutCode;if(e)try{return(e=>{const t=qe(e);return t?.data?b(t.data,Ve):null})(e)}catch(e){console.debug("invalid measure layout code:",e)}return null}*splitToSingleScoresGen(){this.assemble();const e=this.systems.filter(e=>e.index>0&&e.indent&&e.timeSignatureOnHead).map(e=>e.index);if(!e.length)return void(yield this.deepCopy());const t=new Score({...this,pages:[],topology:void 0,spartito:void 0,patches:void 0});this.pages.forEach(e=>{delete e.tokens,e.systems.forEach(e=>{delete e.tokens,e.staves.forEach(e=>{e.measures=[]})})});let s=0;for(const i of[...e,this.systems.length]){const e=e=>e.index>=s&&e.indext.systems.some(e)).map(t=>{const{systems:s,...i}=t;return new Page({...i,systems:s.filter(e).map(e=>new System({...e}))})}),n=t.deepCopy();n.headers.SubScoreSystem=`${s}-${i-1}`,n.headers.SubScorePage=`${r[0].index}-${r[r.length-1].index}`,n.pages=r,n.assemble(),n.inferenceStaffLayout(),s=i,yield n}}splitToSingleScores(){return[...this.splitToSingleScoresGen()]}}var Ms;Score.className="Score",function(e){e.Pass="i",e.Division="d",e.Dots="o"}(Ms||(Ms={}));const Es=["whole","half","quarter","eighth","sixteenth","thirtysecond","sixtyfourth","128th","256th"],Ns=.4/we,Is=1e-12,Cs=[void 0,"u","d"],_s=[void 0,Ne.Open,Ne.Continue,Ne.Close],Os=e=>({elements:e.elements.map(e=>({tick:e.tick,division:e.division,dots:e.dots,beam:e.beam,stemDirection:e.stemDirection,grace:e.grace,timeWarped:e.timeWarped,fullMeasure:e.fullMeasure,fake:e.fake,order:e.order,predisposition:e.predisposition}))});class BeadNode{constructor(e){Object.assign(this,e),this.children={},this.accessCount=0}nextBranch(){const e=this.possibilities.map((e,t)=>e/(this.children[t]?this.children[t].accessCount+1:1));return e.every(e=>!e)?(this.accessCount=1/0,null):G(e)}get currentElem(){return this.cluster.elements[this.elemIndex]}branchID(e){switch(this.type){case Ms.Pass:return`i_${e}`;case Ms.Division:return Es[e];case Ms.Dots:return"o"+".".repeat(e)}return""}async deduce({picker:e,logger:t,ptFactor:s},i=0){++this.accessCount;const r=this.nextBranch();if(t.debug(String.fromCodePoint(127817)+" ".repeat(i),this.branchID(r),this.accessCount>1?`[${this.accessCount}]`:""),!Number.isInteger(r)||r<0)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);var n;if(this.pretentiousness+=(n=this.possibilities[r],Math.min(100,-Math.log(n))),this.pretentiousness>100*s)return this.accessCount=1/0,As(this.cluster,this.currentElem.order+1,this.pretentiousness);let a=null;switch(this.type){case Ms.Pass:{const t=this.currentElem.order+1,s=this.cluster.elements[r];if(console.assert(s,"null element:",r,this.cluster.elements.length),s.type===X.EOS){if(a=As(this.cluster,t,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(this.cluster.elements[0].order=t,!this.children[r]){if(!e.quota)return a;const s=(await e.predictCluster(this.cluster,t+1)).map((e,s)=>this.cluster.elements[s].orderMath.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:r,type:Ms.Division,possibilities:e,pretentiousness:this.pretentiousness})}}break;case Ms.Division:if(this.currentElem.division=r,!this.children[r]){const e=this.currentElem.predisposition.dotsVector.map(e=>Math.max(Is,e));this.children[r]=new BeadNode({cluster:this.cluster,elemIndex:this.elemIndex,type:Ms.Dots,possibilities:e,pretentiousness:this.pretentiousness})}break;case Ms.Dots:if(this.currentElem.dots=r,a=As(this.cluster,this.currentElem.order+1,this.pretentiousness),!a.residue||a.fatalError)return this.accessCount=1/0,a;if(!this.children[r]){if(!e.quota)return a;const t=this.currentElem.order+1,s=(await e.predictCluster(this.cluster,t)).map((e,s)=>this.cluster.elements[s].order{t.order>e&&(t.order=void 0)}),this.cluster.elements.forEach(e=>e.order=e.order>this.currentElem.order?void 0:e.order),this.cluster.elements[this.cluster.elements.length-1].tick=a.endTick,a}return o}}const Bs=e=>we*2**-e.division*(2-2**-e.dots),As=(e,t,s)=>{const i=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order)&&e.ordere.order-t.order);const r=e.elements[e.elements.length-1];let n=0,a=0,o=0,c=1;const l=[[r.x,e.signatureDuration,e.signatureDuration]];let u=0;i.forEach(e=>{e.order>a+1&&(n=0,++c);const t=l.find(e=>e[1]>=n);if(t&&e.x>t[0]+3){const t=l.reduce((t,s)=>Math.abs(e.predisposition.tick-s[2])t[0]>e.x));l.splice(s,0,[e.x,e.tick,e.predisposition.tick]);let i=Bs(e);e.predisposition.timeWarped>.5&&(i=2*i/3),n+=i,u+=i,o=Math.max(o,n),a=e.order}),o>0&&(e.elements[e.elements.length-1].tick=o);const h=e.elements[e.elements.length-1].pivotX-e.elements[1].pivotX,m=Math.max(...i.map(e=>e.tick),o),f=[...i].sort((e,t)=>e.pivotX-t.pivotX),d=f.slice(1).map((e,t)=>{const s=f[t],i=e.pivotX-s.pivotX,r=e.tick-s.tick;if(!r)return i/h;return(4*Math.atan2(r/m,i/h)/Math.PI-1)**2}),p=Math.max(...d,0),g=i.map(e=>(e.tick-e.predisposition.tick)**2),y=g.length?Math.sqrt(g.reduce((e,t)=>e+t,0)/g.length):0,v=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&!(Number.isInteger(e.order)&&e.order.5)).length,x=p>=1||o>e.signatureDuration,S=Math.max(0,e.signatureDuration-u/c);return{tickErr:y,twist:p,residue:v,endTick:o,fatalError:x,voiceN:c,spaceDuration:S,pretentiousness:s,loss:y/we+p+.2*v+.002*c+S*Ns+.02*s}},Ps=async(e,t,s,i=200,r=0,n=1)=>{e.elements.forEach((e,t)=>e.order=t?void 0:0);const a=await t.predictCluster(e,1),o=new BeadNode({cluster:e,elemIndex:0,pretentiousness:0,type:Ms.Pass,possibilities:a});let c=null,l=null;for(t.quota=i;t.quota;){e.elements.forEach((e,t)=>e.order=t?void 0:0);const i=await o.deduce({picker:t,logger:s,ptFactor:n});if(s.debug("loss:",i),(!c||i.loss{e.elements.forEach((e,s)=>Object.assign(e,t.elements[s]))})(e,l);const u=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order)),h=e.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&!Number.isInteger(e.order));u.length&&h.forEach(e=>{if(e.tick=void 0,e.predisposition.fakeP<.5){const t=Bs(e),s=u.filter(e=>e.tick+t<=c.endTick);if(s.length){const t=s.reduce((t,s)=>Math.abs(s.x-e.x)e.order-t.order),[...u,...h].forEach(e=>{e.grace=!Number.isFinite(e.tick)&&e.predisposition.grace,e.timeWarped=e.predisposition.timeWarped>.5,e.fullMeasure=e.predisposition.fullMeasure>.5,e.stemDirection=Cs[G(e.predisposition.stemDirectionVector)],e.beam=_s[G(e.predisposition.beamVector)]});const m=e.elements.map(e=>e.index),f=e=>m.indexOf(e);return e.matrixH=e.elements.map(()=>Array(e.elements.length).fill(0)),u.forEach((t,s)=>{const i=u[s-1];!i||i.order{const{stopLoss:s=.09,quotaMax:i=1e3,quotaFactor:r=5,ptFactor:n=1,logger:a=new DummyLogger}=t;let o=0;const c=e.createClusters();for(const l of c){const c=Math.min(i,Math.ceil(l.elements.length*r));a.info(`[measure-${e.measureIndex}]`,c);const{loss:u}=await Ps(l,t.picker,a,c,s,n);o=Math.max(o,u)}const l=[],u=[],h=[];c.forEach(t=>{const s=t.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isInteger(e.order));if(s.sort((e,t)=>e.order-t.order),!s.length)return;let i=[];l.push(i);let r=0;s.forEach(e=>{e.fullMeasure||e.grace||e.tremoloCatcher||(e.order>r+1?(i=[e.index],l.push(i)):i.push(e.index),r=e.order)});let n=s[s.length-1];const a=t.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)&&Number.isFinite(e.tick)&&!Number.isInteger(e.order));for(;a.length;){const e=a.findIndex(e=>e.tick>=n.tick+Bs(n));e>=0?i.push(a.splice(e,1)[0].index):(n=a.splice(0,1)[0],i=[n.index],l.push(i))}if(s.some(e=>!e.fullMeasure&&Number.isInteger(e.order))){const e=t.elements.find(e=>e.type===X.EOS);u.push(e.tick)}const o=e.eventMap,c=t.elements.reduce((e,t)=>(Number.isFinite(t.tick)&&e.add(t.tick),e),new Set),m=Array.from(c).sort((e,t)=>e-t);s.forEach(e=>{const t=o[e.index];t&&h.push({id:t.id,tick:e.tick,tickGroup:m.indexOf(e.tick),division:e.division!==t.division?e.division:void 0,dots:e.dots!==t.dots?e.dots:void 0,timeWarp:e.timeWarped?D(2,3):void 0,beam:e.beam!==t.beam?e.beam:void 0,grace:e.grace!==!!t.grace?e.grace:void 0,fullMeasure:e.fullMeasure||void 0})})});const m=Math.max(...c.map(e=>e.estimatedDuration));return{voices:l.filter(e=>e.length),duration:Math.max(...u),events:h,priority:-o,estimatedDuration:m}},Ds=async(e,{picker:t,resetSignatureForDoubtfulOnly:s})=>{const i=e.createClusters(),r=e.eventMap;for(const n of i)s&&!e.doubtfulTimesig||(n.signatureDuration=0),n.elements.forEach((e,t)=>e.order=t?void 0:0),await t.predictCluster(n,1),n.elements.filter(e=>[X.CHORD,X.REST].includes(e.type)).forEach(e=>{r[e.index].predisposition=e.predisposition});e.estimatedDuration=Math.max(...i.map(e=>e.estimatedDuration))},Fs=async(e,t)=>Ds(e,{picker:t,resetSignatureForDoubtfulOnly:!0});var Ls=Object.freeze({__proto__:null,solveCluster:Ps,solveMeasure:Rs,estimateMeasure:Fs,glimpseMeasure:Ds}),$s=Object.freeze({__proto__:null,beadSolver:Ls,recoverJSON:b,SimpleClass:SimpleClass,EditableEvent:EditableEvent,EditableMeasure:EditableMeasure,get EventElementType(){return X},EventCluster:EventCluster,EventClusterSet:EventClusterSet,get PageLayoutMethod(){return Re},get TextType(){return De},evaluateMeasure:Le,PatchMeasure:PatchMeasure,VERSION:14,Score:Score,Page:Page,System:System,Staff:Staff,Measure:Measure,SemanticGraph:SemanticGraph,get SemanticType(){return w},glyphSemanticMapping:{"rests.1":"Rest1","rests.0o":"Rest0","rests.1o":"Rest1","rests.M1":"RestM1","rests.2":"Rest2","rests.3":"Rest3","rests.4":"Rest4","rests.5":"Rest5","rests.6":"Rest6","accidentals.sharp":"AccSharp","accidentals.doublesharp":"AccDoublesharp","accidentals.natural":"AccNatural","accidentals.flat":"AccFlat","accidentals.flatflat":"AccFlatflat","dots.dot":"Dot","scripts.ufermata":"ScriptFermata","scripts.dfermata":"ScriptFermata","scripts.ushortfermata":"ScriptShortFermata","scripts.dshortfermata":"ScriptShortFermata","scripts.staccato":"ScriptStaccato","scripts.ustaccatissimo":"ScriptStaccatissimo","scripts.dstaccatissimo":"ScriptStaccatissimo","scripts.turn":"ScriptTurn","scripts.trill":"ScriptTrill","scripts.segno":"ScriptSegno","scripts.coda":"ScriptCoda","scripts.arpeggio":"ScriptArpeggio","scripts.prall":"ScriptPrall","scripts.mordent":"ScriptMordent","scripts.umarcato":"ScriptMarcato","scripts.dmarcato":"ScriptMarcato","scripts.uportato":"ScriptPortato","scripts.dportato":"ScriptPortato","scripts.tenuto":"ScriptTenuto","scripts.sforzato":"ScriptSforzato","clefs.C":"ClefC","clefs.F":"ClefF","clefs.G":"ClefG","clefs.F_change":"ClefF","clefs.G_change":"ClefG","timesig.C44":"TimesigC44","timesig.C22":"TimesigC22","pedal.*":"PedalStar","pedal.Ped":"PedalPed","noteheads.s0":"NoteheadS0","noteheads.s1":"NoteheadS1","noteheads.s2":"NoteheadS2",f:"f",m:"m",p:"p",r:"r",s:"s",z:"z"},semanticPriorities:{ClefG:0,ClefF:0,TimesigFour:0,TimesigThree:0,TimesigTwo:0,NoteheadS0:0,NoteheadS1:0,NoteheadS2:0,Dot:0,vline_BarMeasure:0,vline_Stem:0,Flag3:0,TimesigC44:1,TimesigC22:1,TimesigEight:1,TimesigSix:1,AccNatural:1,AccSharp:1,AccFlat:1,KeyAcc:1,Rest0:1,Rest1:1,Rest2:1,Rest3:1,Rest4:1,OctaveShift8:1,OctaveShift0:1,AccDoublesharp:2,AccFlatflat:2,TimesigOne:2,TimesigNine:2,Rest5:2,Rest6:2,SlurBegin:2,SlurEnd:2,VoltaLeft:2,VoltaRight:2,vline_BarTerminal:2,vline_BarSegment:2,TempoNotehead:2,GraceNotehead:2,SignLined:2,SignInterval:2,BeamLeft:2,BeamRight:2,BeamContinue:2,TremoloLeft:2,TremoloRight:2,TremoloMiddle:2,StemTip:2,StemHead:2,f:3,p:3,m:3,ScriptFermata:3,ScriptSforzato:3,ScriptStaccato:3,ScriptStaccatissimo:3,ScriptTurn:3,ScriptTrill:3,ScriptSegno:3,ScriptCoda:3,ScriptArpeggio:3,ScriptPrall:3,ScriptMordent:3,ScriptTenuto:3,PedalStar:3,PedalPed:3,TimesigFive:3,TimesigSeven:3,TimesigZero:3,One:3,Two:3,Three:3,Four:3,Five:3,rect_Text:3,rect_Lyric:3,CrescendoBegin:3,CrescendoEnd:3,DecrescendoBegin:3,DecrescendoEnd:3,RestM1:4,ClefC:4,ScriptShortFermata:4,ScriptMarcato:4,ScriptPortato:4,s:4,r:4,z:4,Zero:4,Six:4,Seven:4,Eight:4,Nine:4},NOTEHEAD_WIDTHS:M,glyphCenters:E,ONE_D_SEMANTICS:["OctaveShift8va","OctaveShift8vb","OctaveShift8","OctaveShift0","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","vline_BarMeasure","vline_BarTerminal","vline_BarSegment"],SYSTEM_SEMANTIC_TYPES:N,CONFLICTION_GROUPS:C,STAMP_SEMANTICS:_,STAMP_RECTS:{ClefG:[-.0625,-1.125,3.6,8.6],ClefF:[.25,.5625,3.6,3.8],ClefC:[.25,0,3.25,4.5],NoteheadS0:[.0625,0,2.55,1.4],NoteheadS1:[.0625,0,1.8,1.4],NoteheadS2:[.0625,-.0625,1.65,1.35],Dot:[.25,0,.6,.6],Rest0:[0,-.75,3.25,.9],Rest1:[0,-.25,3.25,.9],Rest2:[-.0625,-.1875,1.6,3.375],Rest3:[0,.0625,1.2,2.25],Rest4:[.0625,.5625,1.65,3.375],Rest5:[.0625,.0625,1.95,4.375],Rest6:[.0625,.5625,1.95,5.375],RestM1:[-.4375,-1.5,.75,1.2],AccNatural:[0,0,.9,3.5],AccSharp:[0,0,1.5,3.5],AccDoublesharp:[0,0,1.5,1.5],AccFlat:[0,-.5625,1.2,3.125],AccFlatflat:[.1875,-.5625,1.95,3.125],TimesigC44:[-.0625,0,2.25,2.3],TimesigC22:[-.0625,0,2.25,3.2],TimesigZero:[0,0,1.8,2.2],TimesigOne:[-.125,0,1.5,2.2],TimesigTwo:[0,0,2.2,2.2],TimesigThree:[-.0625,0,1.9,2.4],TimesigFour:[.0625,0,1.95,2.2],TimesigFive:[0,0,1.8,2.3],TimesigSix:[0,0,2,2.4],TimesigSeven:[0,0,1.8,2.2],TimesigEight:[0,0,1.9,2.2],TimesigNine:[0,0,1.9,2.2],One:[-.0625,0,.75,1.6],Two:[0,0,1.2,1.6],Three:[0,0,1.2,1.6],Four:[0,0,1.2,1.6],Five:[0,0,1.2,1.6],OctaveShift8:[2.125,-.1875,4.75,3.6],OctaveShift0:[-.4,0,1.8,4.2],f:[.0625,-.125,2.55,3],p:[-.0625,.25,2.55,2.1],m:[-.125,-.0625,2.4,1.35],n:[-.3125,-.0625,1.95,1.35],r:[0,-.125,1.5,1.5],s:[0,-.0625,1.2,1.35],z:[.0625,0,1.35,1.5],ScriptFermata:[0,0,3.25,3.9],ScriptShortFermata:[0,0,2.4,4.95],ScriptSforzato:[-.0625,0,2.5,1.2],ScriptStaccato:[0,-.0625,.6,.45],ScriptStaccatissimo:[0,0,1.2,2.6],ScriptTurn:[0,0,2.7,1.5],ScriptTrill:[-.125,-.5,3,2.7],ScriptSegno:[0,0,2.4,3.5],ScriptCoda:[0,0,2.7,3.25],ScriptArpeggio:[-.0625,0,1.05,1.8],ScriptPrall:[0,0,2.4,1.2],ScriptMordent:[0,0,2.4,1.5],ScriptMarcato:[0,0,1.2,2.475],ScriptTenuto:[0,-.0625,1.5,.15],ScriptPortato:[0,0,1.5,1.65],PedalStar:[0,0,3.2,3.2],PedalPed:[0,-.25,4.7,2.4]},hashSemanticPoint:O,hashPageSemanticPoint:B,get SemanticElementType(){return dt},SemanticCluster:SemanticCluster,SemanticClusterSet:class SemanticClusterSet{constructor(e){if(e&&(this.clusters=e.clusters,e.vocab)){const t=e.vocab.map((e,t)=>[t,dt[e]]).filter(([e,t])=>e!==t).reduce((e,[t,s])=>(e[t]=s,e),{});this.clusters.forEach(e=>e.elements.forEach(e=>{Number.isFinite(t[e.type])&&(e.type=t[e.type])}))}}toJSON(){return{__prototype:"SemanticClusterSet",vocab:Object.entries(dt).filter(e=>Number.isFinite(e[1])).map(e=>e[0]),clusters:this.clusters.map(e=>e.toJSON())}}},ELEMENT_TOKEN_NAMES:vt,NOTEHEAD_ELEMENT_TYPES:St,NOTE_ELEMENT_TYPES:Tt,BOS_ELEMENT:Ct,fractionToElems:_t,expandMatrixByMasks:Bt,expandMatrixByMaskTriu:At,matrixFromGroups:Pt,emptyVoiceFromStaffMeasure:vs,SpartitoMeasure:SpartitoMeasure,Spartito:Spartito,mod7:bs,Term:Term,EventTerm:EventTerm,ContextedTerm:ContextedTerm,MarkTerm:MarkTerm,TempoTerm:TempoTerm,GlyphTerm:GlyphTerm,TextTerm:TextTerm,LyricTerm:LyricTerm,CommandTerm:CommandTerm,ChordmodeTerm:ChordmodeTerm,get ContextType(){return Oe},get GraceType(){return Ee},get GlissandoStyle(){return Ce},get ArpeggioStyle(){return _e},get AccessoryDirection(){return Me},WHOLE_DURATION:we,get StemBeam(){return Ne},get TremoloLink(){return Ie},TokenTypes:J,TokenClefs:Q,TokenTimesigs:ee,TokenTimesigsC:te,TokenTimesigsN:se,TokenOctshifts:ie,TokenNumbers:re,TokenAccidentals:ne,TokenNoteheads:ae,TokenBareNoteheads:oe,TokenDirectionalNoteheads:ce,TokenRests:le,TokenFlags:ue,TokenVolta:he,TokenDynamics:me,TokenScripts:fe,TokenPedals:de,TokenDots:pe,TokenArcs:ge,TokenBeams:ye,TokenWedges:ve,TokenAccessories:xe,TokenDirectionless:Se,TokenGlyphs:be,get TokenType(){return K},Token:Token,TextToken:TextToken,TOKEN_Y_ROUND:ke,TOKEN_Y_FIXED:Te});const js=[K.ClefG,K.ClefF,K.ClefC],Hs=e=>{let t=null;switch(e.tokenType){case K.ClefG:t="Treble";break;case K.ClefF:t="Bass";break;case K.ClefC:t=-1===e.y?"Tenor":"Alto"}return t};var Vs,zs={exports:{}},qs="object"==typeof Reflect?Reflect:null,Gs=qs&&"function"==typeof qs.apply?qs.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)};Vs=qs&&"function"==typeof qs.ownKeys?qs.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var Ws=Number.isNaN||function(e){return e!=e};function Us(){Us.init.call(this)}zs.exports=Us,zs.exports.once=function(e,t){return new Promise(function(s,i){function r(s){e.removeListener(t,n),i(s)}function n(){"function"==typeof e.removeListener&&e.removeListener("error",r),s([].slice.call(arguments))}ii(e,t,n,{once:!0}),"error"!==t&&function(e,t,s){"function"==typeof e.on&&ii(e,"error",t,s)}(e,r,{once:!0})})},Us.EventEmitter=Us,Us.prototype._events=void 0,Us.prototype._eventsCount=0,Us.prototype._maxListeners=void 0;var Ys=10;function Xs(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function Ks(e){return void 0===e._maxListeners?Us.defaultMaxListeners:e._maxListeners}function Zs(e,t,s,i){var r,n,a,o;if(Xs(s),void 0===(n=e._events)?(n=e._events=Object.create(null),e._eventsCount=0):(void 0!==n.newListener&&(e.emit("newListener",t,s.listener?s.listener:s),n=e._events),a=n[t]),void 0===a)a=n[t]=s,++e._eventsCount;else if("function"==typeof a?a=n[t]=i?[s,a]:[a,s]:i?a.unshift(s):a.push(s),(r=Ks(e))>0&&a.length>r&&!a.warned){a.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=a.length,o=c,console&&console.warn&&console.warn(o)}return e}function Js(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Qs(e,t,s){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:s},r=Js.bind(i);return r.listener=s,i.wrapFn=r,r}function ei(e,t,s){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?s?[r.listener||r]:[r]:s?function(e){for(var t=new Array(e.length),s=0;s{s=e,i=r,t>=0&&setTimeout(i,t,"timeout")}),s,i]}Object.defineProperty(Us,"defaultMaxListeners",{enumerable:!0,get:function(){return Ys},set:function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");Ys=e}}),Us.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},Us.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||Ws(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},Us.prototype.getMaxListeners=function(){return Ks(this)},Us.prototype.emit=function(e){for(var t=[],s=1;s0&&(n=t[0]),n instanceof Error)throw n;var a=new Error("Unhandled error."+(n?" ("+n.message+")":""));throw a.context=n,a}var o=r[e];if(void 0===o)return!1;if("function"==typeof o)Gs(o,this,t);else{var c=o.length,l=si(o,c);for(s=0;s=0;n--)if(s[n]===t||s[n].listener===t){a=s[n].listener,r=n;break}if(r<0)return this;0===r?s.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},Us.prototype.listeners=function(e){return ei(this,e,!0)},Us.prototype.rawListeners=function(e){return ei(this,e,!1)},Us.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):ti.call(e,t)},Us.prototype.listenerCount=ti,Us.prototype.eventNames=function(){return this._eventsCount>0?Vs(this._events):[]};class AsyncQueue extends zs.exports.EventEmitter{constructor(){super(),this.working=!1,this.working=!1,this.tasks=[],process.nextTick(()=>{this.emit("idle")})}async _digest(e){this.working=!0;const[t,s,i,r]=e;await t(s).then(i,r),this.tasks.length>0?await this._digest(this.tasks.shift()):(this.working=!1,this.emit("idle"))}addTask(e,{timeout:t=6e5}={}){const[s,i,r]=ri({timeout:t});return this.working?this.tasks.push([...e,i,r]):this._digest([...e,i,r]),s}}class ZeroClient{constructor(e=console){this.queue=new AsyncQueue,this.logger=e}bind(e){e&&(this.url=e),this.socket=new n.Request({sendTimeout:15e3,receiveTimeout:3e5}),this.socket.connect(this.url)}__request(e){let t=0;const s=async e=>{try{return this.socket.closed&&this.bind(),await this.socket.send(r.pack(e)).then(()=>this.socket.receive())}catch(i){if(t<2)return t++,console.log(`请求失败,${i.stack}`),console.error(`3s后重试第${t}次`),this.socket.close(),await new Promise(e=>setTimeout(e,3e3)),s(e);throw i}};return s(e)}async request(e,t=null,s=null){const[i,n]=Array.isArray(t)?[t,s]:[void 0,t],a={method:e};return i&&(a.args=i),n&&(a.kwargs=n),this.queue.addTask([async e=>{const[t]=await this.__request(e),s=r.unpack(t);return 0===s.code?s.data:Promise.reject(s.msg)},a])}}class PyProcessor extends ZeroClient{constructor(e,t={},s=console){super(s),this.retryCount=0,this.retryDelay=3e3,this.scriptPath=e,this.options=t}async bind(e){const t=e||await a.getPortPromise({port:12022,stopPort:12122}),s=i.defaultsDeep({args:[...this.options.args||[],"-p",`${t}`]},this.options);this.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`),this.pyShell=new o.PythonShell(this.scriptPath,s),this.pyShell.stdout.on("data",e=>this.logger.info(e)),this.pyShell.on("pythonError",e=>this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`,e)),this.pyShell.on("stderr",e=>this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`,e)),this.pyShell.on("error",e=>this.logger.error(`[python-shell]: ${this.scriptPath} error:`,e)),this.pyShell.on("close",()=>{this.retryCount<5&&(this.retryCount++,this.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`),setTimeout(()=>{this.bind()},this.retryDelay))}),super.bind(`tcp://127.0.0.1:${t}`)}}var ni={},ai=function(e){return e instanceof Buffer},oi={exports:{}},ci={exports:{}};"function"==typeof Object.create?ci.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:ci.exports=function(e,t){e.super_=t;var s=function(){};s.prototype=t.prototype,e.prototype=new s,e.prototype.constructor=e};try{var li=require("util");if("function"!=typeof li.inherits)throw"";oi.exports=li.inherits}catch(e){oi.exports=ci.exports}!function(e){var t=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),s={},i=0;i=a)return e;switch(e){case"%s":return String(r[i++]);case"%d":return Number(r[i++]);case"%j":try{return JSON.stringify(r[i++])}catch(e){return"[Circular]"}default:return e}}),c=r[i];i=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),m(s)?i.showHidden=s:s&&e._extend(i,s),g(i.showHidden)&&(i.showHidden=!1),g(i.depth)&&(i.depth=2),g(i.colors)&&(i.colors=!1),g(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=a),c(i,t,i.depth)}function a(e,t){var s=n.styles[t];return s?"["+n.colors[s][0]+"m"+e+"["+n.colors[s][1]+"m":e}function o(e,t){return e}function c(t,s,i){if(t.customInspect&&s&&b(s.inspect)&&s.inspect!==e.inspect&&(!s.constructor||s.constructor.prototype!==s)){var r=s.inspect(i,t);return p(r)||(r=c(t,r,i)),r}var n=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(p(t)){var s="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(s,"string")}if(d(t))return e.stylize(""+t,"number");if(m(t))return e.stylize(""+t,"boolean");if(f(t))return e.stylize("null","null")}(t,s);if(n)return n;var a=Object.keys(s),o=function(e){var t={};return e.forEach(function(e,s){t[e]=!0}),t}(a);if(t.showHidden&&(a=Object.getOwnPropertyNames(s)),S(s)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return l(s);if(0===a.length){if(b(s)){var v=s.name?": "+s.name:"";return t.stylize("[Function"+v+"]","special")}if(y(s))return t.stylize(RegExp.prototype.toString.call(s),"regexp");if(x(s))return t.stylize(Date.prototype.toString.call(s),"date");if(S(s))return l(s)}var k,T="",w=!1,E=["{","}"];(h(s)&&(w=!0,E=["[","]"]),b(s))&&(T=" [Function"+(s.name?": "+s.name:"")+"]");return y(s)&&(T=" "+RegExp.prototype.toString.call(s)),x(s)&&(T=" "+Date.prototype.toUTCString.call(s)),S(s)&&(T=" "+l(s)),0!==a.length||w&&0!=s.length?i<0?y(s)?t.stylize(RegExp.prototype.toString.call(s),"regexp"):t.stylize("[Object]","special"):(t.seen.push(s),k=w?function(e,t,s,i,r){for(var n=[],a=0,o=t.length;a60)return s[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+s[1];return s[0]+t+" "+e.join(", ")+" "+s[1]}(k,T,E)):E[0]+T+E[1]}function l(e){return"["+Error.prototype.toString.call(e)+"]"}function u(e,t,s,i,r,n){var a,o,l;if((l=Object.getOwnPropertyDescriptor(t,r)||{value:t[r]}).get?o=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(o=e.stylize("[Setter]","special")),M(i,r)||(a="["+r+"]"),o||(e.seen.indexOf(l.value)<0?(o=f(s)?c(e,l.value,null):c(e,l.value,s-1)).indexOf("\n")>-1&&(o=n?o.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+o.split("\n").map(function(e){return" "+e}).join("\n")):o=e.stylize("[Circular]","special")),g(a)){if(n&&r.match(/^\d+$/))return o;(a=JSON.stringify(""+r)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+o}function h(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function f(e){return null===e}function d(e){return"number"==typeof e}function p(e){return"string"==typeof e}function g(e){return void 0===e}function y(e){return v(e)&&"[object RegExp]"===k(e)}function v(e){return"object"==typeof e&&null!==e}function x(e){return v(e)&&"[object Date]"===k(e)}function S(e){return v(e)&&("[object Error]"===k(e)||e instanceof Error)}function b(e){return"function"==typeof e}function k(e){return Object.prototype.toString.call(e)}function T(e){return e<10?"0"+e.toString(10):e.toString(10)}e.debuglog=function(t){if(g(i)&&(i=process.env.NODE_DEBUG||""),t=t.toUpperCase(),!r[t])if(new RegExp("\\b"+t+"\\b","i").test(i)){var s=process.pid;r[t]=function(){var i=e.format.apply(e,arguments);console.error("%s %d: %s",t,s,i)}}else r[t]=function(){};return r[t]},e.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},e.isArray=h,e.isBoolean=m,e.isNull=f,e.isNullOrUndefined=function(e){return null==e},e.isNumber=d,e.isString=p,e.isSymbol=function(e){return"symbol"==typeof e},e.isUndefined=g,e.isRegExp=y,e.isObject=v,e.isDate=x,e.isError=S,e.isFunction=b,e.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},e.isBuffer=ai;var w=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function M(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.log=function(){var t,s;console.log("%s - %s",(t=new Date,s=[T(t.getHours()),T(t.getMinutes()),T(t.getSeconds())].join(":"),[t.getDate(),w[t.getMonth()],s].join(" ")),e.format.apply(e,arguments))},e.inherits=oi.exports,e._extend=function(e,t){if(!t||!v(t))return e;for(var s=Object.keys(t),i=s.length;i--;)e[s[i]]=t[s[i]];return e};var E="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function N(e,t){if(!e){var s=new Error("Promise was rejected with a falsy value");s.reason=e,e=s}return t(e)}e.promisify=function(e){if("function"!=typeof e)throw new TypeError('The "original" argument must be of type Function');if(E&&e[E]){var s;if("function"!=typeof(s=e[E]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(s,E,{value:s,enumerable:!1,writable:!1,configurable:!0}),s}function s(){for(var t,s,i=new Promise(function(e,i){t=e,s=i}),r=[],n=0;n>>32-t},rotr:function(e,t){return e<<32-t|e>>>t},endian:function(e){if(e.constructor==Number)return 16711935&mi.rotl(e,8)|4278255360&mi.rotl(e,24);for(var t=0;t0;e--)t.push(Math.floor(256*Math.random()));return t},bytesToWords:function(e){for(var t=[],s=0,i=0;s>>5]|=e[s]<<24-i%32;return t},wordsToBytes:function(e){for(var t=[],s=0;s<32*e.length;s+=8)t.push(e[s>>>5]>>>24-s%32&255);return t},bytesToHex:function(e){for(var t=[],s=0;s>>4).toString(16)),t.push((15&e[s]).toString(16));return t.join("")},hexToBytes:function(e){for(var t=[],s=0;s>>6*(3-r)&63)):t.push("=");return t.join("")},base64ToBytes:function(e){e=e.replace(/[^A-Z0-9+\/]/gi,"");for(var t=[],s=0,i=0;s>>6-2*i);return t}},di.exports=mi;var pi={utf8:{stringToBytes:function(e){return pi.bin.stringToBytes(unescape(encodeURIComponent(e)))},bytesToString:function(e){return decodeURIComponent(escape(pi.bin.bytesToString(e)))}},bin:{stringToBytes:function(e){for(var t=[],s=0;s>5]|=128<<24-r%32,i[15+(r+64>>>9<<4)]=r;for(var h=0;h>>31}var x=(a<<5|a>>>27)+u+(n[y]>>>0)+(y<20?1518500249+(o&c|~o&l):y<40?1859775393+(o^c^l):y<60?(o&c|o&l|c&l)-1894007588:(o^c^l)-899497514);u=l,l=c,c=o<<30|o>>>2,o=a,a=x}a+=m,o+=f,c+=d,l+=p,u+=g}return[a,o,c,l,u]}(i));return r&&r.asBytes?n:r&&r.asString?s.bytesToString(n):e.bytesToHex(n)};i._blocksize=16,i._digestsize=20,fi.exports=i}();var yi=fi.exports;const vi=({page:e,backgroundImage:t,detection:s,imageSize:i,position:r})=>{const n=(s.phi2-s.phi1)/s.interval,a=i.height/s.interval,o=e.systems[e.systems.length-1],c=r?r.y:(o?o.top+o.height:0)+4,l=r?r.x:4,u=[0,...Array(s.middleRhos.length-1).fill(0).map((e,t)=>(s.middleRhos[t]+s.middleRhos[t+1])/2/s.interval)],h=[n],m=u.map((e,t)=>new Staff({top:e,height:(u[t+1]||a)-e,staffY:s.middleRhos[t]/s.interval-e,measureBars:h})),f={x:-s.phi1/s.interval,y:0,width:i.width/s.interval,height:i.height/s.interval};return new System({staves:m,left:l,top:c,width:n,backgroundImage:t,imagePosition:f,measureBars:h})};async function xi(e,{format:t="webp",maxHeight:s=1080,quality:i=80}={}){let r=await(async e=>"string"==typeof e?/^https?:\/\//.test(e)?(await S.default(e,{responseType:"buffer",decompress:!0,https:{rejectUnauthorized:!1}})).body:/^data:image\//.test(e)?Buffer.from(e.split(",")[1],"base64"):Buffer.from(e):e)(e);const n=await new Promise(e=>{x.default(r).resize({width:s,height:s,fit:"inside",withoutEnlargement:!0}).toFormat(t,{quality:i}).toBuffer((t,s)=>{e(s)})});return{buffer:n,filename:`${v.default.ArrayBuffer.hash(n)}.${t}`}}globalThis.OffscreenCanvas=globalThis.OffscreenCanvas||c.Canvas,globalThis.Image=globalThis.Image||c.Image,globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Si=32,bi={viewportHeight:256,viewportUnit:8},ki=192,Ti=8,wi={viewportHeight:192,viewportUnit:8};const Mi=e=>Promise.all(e.map(e=>e())),Ei=async(e,t,{paddingLeft:s=0,scaling:i=1,spec:r})=>{if(!e||!e.backgroundImage)return null;const n=e.staves[t];if(!n)return null;const a=r.viewportHeight/r.viewportUnit/2,o=e.imagePosition.width*r.viewportUnit,l=e.imagePosition.height*r.viewportUnit,u=e.imagePosition.x*r.viewportUnit+s,h=(e.imagePosition.y-(n.top+n.staffY-a))*r.viewportUnit,m=new c.Canvas(Math.round(o+u)*i,r.viewportHeight*i),f=m.getContext("2d");return f.fillStyle="white",f.fillRect(0,0,m.width,m.height),f.drawImage(await c.loadImage(e.backgroundImage),u*i,h*i,o*i,l*i),m};async function Ni({system:e,staff:t,staffIndex:s}){const i=await Ei(e,s,{paddingLeft:Si,spec:wi});t.backgroundImage=i.toBufferSync("png"),t.imagePosition={x:-32/wi.viewportUnit,y:t.staffY-wi.viewportHeight/2/wi.viewportUnit,width:i.width/wi.viewportUnit,height:i.height/wi.viewportUnit}}async function Ii({system:e,staff:t,staffIndex:s,gaugeImage:i,pyClients:r}){const n=(await Ei(e,s,{paddingLeft:Si,spec:bi,scaling:2})).toBufferSync("png"),a=(e.middleY-(t.top+t.staffY))*bi.viewportUnit+bi.viewportHeight/2,{buffer:o,size:c}=await r.predictScoreImages("gaugeRenderer",[n,i,a]);t.backgroundImage=o,t.imagePosition={x:-32/bi.viewportUnit,y:t.staffY-c.height/2/bi.viewportUnit,width:c.width/bi.viewportUnit,height:c.height/bi.viewportUnit},t.maskImage=null}async function Ci({staff:e,staffIndex:t,maskImage:s}){const i=await c.loadImage(s);e.maskImage=s,e.imagePosition={x:-32/Ti,y:e.staffY-ki/2/Ti,width:i.width/Ti,height:i.height/Ti}}async function _i({score:e,staffIndex:t,system:s,staff:i,graph:r}){r.offset(-32/wi.viewportUnit,0),s.assignSemantics(t,r),i.assignSemantics(r),i.clearPredictedTokens(),e.assembleSystem(s,e.settings?.semanticConfidenceThreshold||1)}function Oi(e,t){[[e.source,"url"],...e.systems.map(e=>[[e,"backgroundImage"],...e.staves.map(e=>[[e,"backgroundImage"],[e,"maskImage"]]).flat()]).flat()].map(([e,s])=>{e[s]=t(e[s])})}class OMRProgress{constructor(e){this.state={},this.onChange=e}setTotal(e,t){this.state[e]=this.state[e]||{total:t,finished:0}}increase(e,t=1){(this.state[e]||{finished:0}).finished+=t,this.onChange(this.state)}}const Bi=new l.WeakLRUCache,Ai={get:async e=>Bi.getValue(e),async set(e,t){Bi.setValue(e,t)}},Pi=async e=>{if(e instanceof Buffer||"string"==typeof e&&(/^https?:\/\//.test(e)||/^data:image\//.test(e))){return`data:image/webp;base64,${(await xi(e)).buffer.toString("base64")}`}return e},Ri=e=>{const t=Math.random();let s=0;for(let i=0;it)return i;return e.length-1},Di=(e,t=.9)=>{const s=e.map(e=>Math.log(e)*t).map(Math.exp),i=s.reduce((e,t)=>e+t,0);return s.map(e=>e/i)},Fi=e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return e;const t=e.predisposition?.divisionVector?Di(e.predisposition.divisionVector):null,s=e.predisposition?.dotsVector?Di(e.predisposition.dotsVector):null;return new EventTerm({...e,predisposition:{...e.predisposition,divisionVector:t,dotsVector:s}})};class MeasureRectification{constructor(e){Object.assign(this,e)}toString(){return this.events.map(e=>{if(!e)return"";const{division:t="",dots:s=""}=e;return`${t}|${s}`}).join(",")}static default(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;const t=e.predisposition.divisionVector?e.division:void 0,s=e.predisposition.dotsVector?e.dots:void 0;return{id:e.id,division:t,dots:s}})})}static roll(e){return new MeasureRectification({events:e.map(e=>{if(!e.predisposition?.divisionVector&&!e.predisposition?.dotsVector)return null;let t,s;return e.predisposition.divisionVector&&(t=Ri(e.predisposition.divisionVector)),e.predisposition.dotsVector&&(s=Ri(e.predisposition.dotsVector)),{id:e.id,division:t,dots:s}})})}}const Li=new l.WeakLRUCache,$i={get:async e=>Li.getValue(e),async set(e,t){Li.setValue(e,t)},batchGet:async e=>e.map(e=>Li.getValue(e))};var ji;!function(e){e[e.ErrorOnly=0]="ErrorOnly",e[e.NotFine=1]="NotFine",e[e.Imperfect=2]="Imperfect"}(ji||(ji={}));const Hi=async(e,t,s,i,r=ji.NotFine,n=0,a)=>{const o=e.filter(({evaluation:e})=>!e||((e,t)=>{switch(t){case ji.ErrorOnly:return e.error;case ji.Imperfect:return!e.perfect}return!e.fine})(e,r));s?.write(".".repeat(o.length)),s?.write("\b".repeat(o.length));const c=o.length;let l=0;for(const e of o){const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups;const r=await Rs(s,{picker:e.picker,...i});s.applySolution(r);const o=Le(s),u=!e.evaluation||o.fine>e.evaluation.fine||o.qualityScore>e.evaluation.qualityScore&&o.fine===e.evaluation.fine;u&&(e.evaluation=o,Object.assign(e.current,s)),t(e.current,o,u),l++,a?.(e.current,o,u,{pass:n,remaining:c-l,total:c})}return o.length&&s?.write("\n"),o.length};globalThis.btoa=globalThis.btoa||(e=>Buffer.from(e,"binary").toString("base64"));const Vi=parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS||"30"),zi=parseInt(process.env.BASE_QUOTA_FACTOR||"40"),qi=parseInt(process.env.RECTIFICATION_QUOTA_FACTOR||"80"),Gi=(e,t,s)=>Math.min(Math.ceil((e+1)*t*Math.log(e+2)),Math.ceil(s*Math.min(1,(24/(e+1))**2)));async function Wi(e,{solver:t,quotaMax:s=1e3,quotaFactor:i=zi,solutionStore:r=$i,ignoreCache:n=!1,logger:a}={}){let o=0,c=0;return a?.info(`[solveMeasures] begin, measure total: ${e.length}.`),await Promise.all(e.map(async l=>{if(!n){const e=await r.get(l.regulationHash);if(e)return l.applySolution(e),void++o}const u=Gi(l.events.length,i,s);await l.regulate({policy:"equations",quota:u,solver:t});const h=Le(l);h.error||r.set(l.regulationHash0,{...l.asSolution(),priority:-l?.solutionStat?.loss}),h.perfect&&++c,a?.info(`[solveMeasures] measure[${l.measureIndex}/${e.length}] regulated: ${h.perfect?"solved":h.error?"error":"issue"}, ${l.regulationHash}`)})),a?.info(`[solveMeasures] ${o}/${e.length} cache hit, ${c} solved.`),{cached:o,computed:e.length-o,solved:c}}const Ui=async(e,{solver:t,quotaMax:s=4e3})=>{let i=Le(e),r=e.asSolution();const n=Gi(e.events.length,qi,s);let a=0;for(const s of function*(e){const t=new Set,s=MeasureRectification.default(e.events);t.add(s.toString()),yield s;let i=0,r=e.events;for(;i<100;){i&&i%10==0&&(r=r.map(Fi));const e=MeasureRectification.roll(r),s=e.toString();t.has(s)?++i:(i=0,t.add(s),yield e)}}(e)){const o=await Pe.regulateMeasureWithRectification(e,s,{solver:t,quota:n}),c=e.deepCopy();c.applySolution(o);const l=Le(c);if((l.perfect>i.perfect||l.error=i.perfect&&o.priority>r.priority)&&(i=l,r=o),l.perfect)break;if(++a,a>Vi)break}return r};const Yi=async(e,{solver:t,solutionStore:s=$i,logger:i,quotaMax:r=240,quotaFactor:n=16})=>{e.assemble();const a=e.spartito||e.makeSpartito(),o=a.measures.filter(e=>!e.regulated);await Wi(o,{solver:t,quotaMax:r,quotaFactor:n,solutionStore:s,logger:i}),console.assert(e.spartito?.regulated,"doSimpleRegulate: regulation incomplete:",a.measures.filter(e=>!e.regulated).length)};console.info("%cstarry-omr%c v1.0.0 2026-04-30T10:33:50.270Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;"),exports.DefaultSolutionStore=$i,exports.PyClients=class PyClients{constructor(e,t=console){this.options=e,this.logger=t,this.clients=new Map}async getClient(e){if(this.clients.has(e))return this.clients.get(e);const[t,s,i]=ri(),r=this.options[e];if(!r)throw new Error(`no config for client \`${e}\` found`);try{if("string"==typeof r){const e=new ZeroClient;e.bind(r),s(e)}else{const{scriptPath:e,...t}=r,i=new PyProcessor(e,t,this.logger);await i.bind(`${await ui()}`),s(i)}this.logger.info(`PyClients: ${e} started`)}catch(t){this.logger.error(`PyClients: ${e} start fail: ${JSON.stringify(t)}`),i(t)}return this.clients.set(e,t),t}async checkHost(e){return(await this.getClient(e)).request("checkHost")}async warmup(){const e=Object.keys(this.options);await Promise.all(e.map(e=>this.getClient(e)))}async predictScoreImages(e,...t){const s=e.split("$")[0],i=await this.getClient(s);let r=null;this.logger.info(`[predictor]: ${e} py start..`);const n=Date.now();switch(e){case"layout":r=await i.request("predictDetection",t);break;case"layout$reinforce":r=await i.request("predictReinforce",t);break;case"gauge":case"mask":r=await i.request("predict",t,{by_buffer:!0});break;case"semantic":case"textLoc":r=await i.request("predict",t);break;case"textOcr":case"brackets":case"topo":case"gaugeRenderer":case"jianpu":r=await i.request("predict",...t);break;default:this.logger.error(`[predictor]: no predictor ${e}`)}return this.logger.info(`[predictor]: ${e} py duration: ${Date.now()-n}ms`),r}},exports.abstractOMRStats=e=>{const{costTotal:t,pagesCostTotal:s,pagesTotal:i}=e.reduce((e,t)=>({costTotal:e.costTotal+t.cost,pagesCostTotal:e.pagesCostTotal+t.pagesCost,pagesTotal:e.pagesTotal+t.pages}),{costTotal:0,pagesCostTotal:0,pagesTotal:0});return{costTotal:t,costPerPage:i?t/i:null,pagesTotal:i,scoreN:e.length}},exports.abstractRegulationBeadStats=e=>{const{totalCost:t,pickerCost:s,measureN:i,timeN:r}=e.reduce((e,t)=>({totalCost:e.totalCost+t.totalCost,pickerCost:e.pickerCost+t.pickerCost,measureN:e.measureN+t.measures.computed,timeN:e.timeN+t.measures.tryTimes}),{totalCost:0,pickerCost:0,measureN:0,timeN:0}),n=i>0?t/i:null,a=r>0?t/r:null,{cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}=e.reduce((e,t)=>({cached:e.cached+t.measures.cached,simple:e.simple+t.measures.simple,computed:e.computed+t.measures.computed,tryTimes:e.tryTimes+t.measures.tryTimes,solved:e.solved+t.measures.solved,issue:e.issue+t.measures.issue,fatal:e.fatal+t.measures.fatal}),{cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0});return{scoreN:e.length,totalCost:t,pickerCost:s,costPerMeasure:n,costPerTime:a,cached:o,simple:c,computed:l,tryTimes:u,solved:h,issue:m,fatal:f}},exports.abstractRegulationStats=e=>{const{baseCostTotal:t,topoCostTotal:s,baseMeasures:i,topoMeasures:r}=e.reduce((e,t)=>({baseCostTotal:e.baseCostTotal+t.baseCost,topoCostTotal:e.topoCostTotal+t.topoCost,baseMeasures:e.baseMeasures+t.baseMeasures.computed,topoMeasures:e.topoMeasures+(t.topoMeasures.solved+t.topoMeasures.issue+t.topoMeasures.fatal)}),{baseCostTotal:0,topoCostTotal:0,baseMeasures:0,topoMeasures:0}),n=i>0?t/i:null,a=r>0?s/r:null,{cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}=e.reduce((e,t)=>({cached:e.cached+t.baseMeasures.cached,baseComputed:e.baseComputed+t.baseMeasures.computed,baseSolved:e.baseSolved+t.baseMeasures.solved,topoSolved:e.topoSolved+t.topoMeasures.solved,topoIssue:e.topoIssue+t.topoMeasures.issue,topoFatal:e.topoFatal+t.topoMeasures.fatal}),{cached:0,baseComputed:0,baseSolved:0,topoSolved:0,topoIssue:0,topoFatal:0});return{scoreN:e.length,baseCostTotal:t,topoCostTotal:s,baseCostPerMeasure:n,topoCostPerMeasure:a,cached:o,baseComputed:c,baseSolved:l,topoSolved:u,topoIssue:h,topoFatal:m}},exports.constructSystem=vi,exports.convertImage=xi,exports.doRegulate=async(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r})=>{t?.logger?.info(`[doRegulate] score: ${e.title}`),e.spartito=void 0,e.assemble();const n=e.makeSpartito();n.measures.forEach(t=>e.assignBackgroundForMeasure(t));const a=Date.now(),o=await Wi(n.measures,{solver:s,quotaMax:1e3,solutionStore:i,logger:t?.logger}),c=Date.now(),l=t?await async function(e,{pyClients:t,solver:s,solutionStore:i=$i,onSaveIssueMeasure:r}){t.logger.info(`[RegulateWithTopo] regulate score: ${e.title}, measures: ${e.spartito.measures.length}`);const n=e.spartito.measures.filter(e=>!Le(e).perfect);if(t.logger.info(`[RegulateWithTopo] basic issues: ${n.length}`),0===n.length)return{solved:0,issue:0,fatal:0};const a=[].concat(...n.map(e=>e.createClusters())),o=await t.predictScoreImages("topo",{clusters:a});console.assert(o.length===a.length,"prediction number mismatch:",a.length,o.length),a.forEach((e,t)=>{const s=o[t];console.assert(s,"no result for cluster:",e.index),e.assignPrediction(s)}),n.forEach(e=>{const t=a.filter(t=>t.index===e.measureIndex);e.applyClusters(t);const{matrixH:s}=Pe.estiamteMeasure(e);s.forEach((t,s)=>t.forEach((t,i)=>{e.matrixH[s][i]=.9*e.matrixH[s][i]+t*(1-.9)}))});const c=[],l=[];await Promise.all(n.map(async e=>{const n=e.regulationHash0,a=await Ui(e,{solver:s});a&&(e.applySolution(a),i.set(n,a),i.set(e.regulationHash,e.asSolution()),t.logger.info(`[RegulateWithTopo] solutionStore set: ${e.measureIndex}, ${n}, ${e.regulationHash}`));const o=Le(e);r?.({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:o.error?2:1}),o.perfect?c.push(e.measureIndex):o.error&&l.push(e.measureIndex)}));const u=n.length-c.length-l.length;return t.logger.info(`[RegulateWithTopo] score: ${e.title}, solved/issue/fatal: ${c.length}/${u}/${l.length}`),c.length&&t.logger.info(`[RegulateWithTopo] solved measures: ${c.join(", ")}`),l.length&&t.logger.info(`[RegulateWithTopo] error measures: ${l.join(", ")}`),{solved:c.length,issue:u,fatal:l.length}}(e,{pyClients:t,solver:s,solutionStore:i,onSaveIssueMeasure:r}):void 0;return{baseCost:c-a,topoCost:Date.now()-c,baseMeasures:o,topoMeasures:l,qualityScore:n.qualityScore}},exports.doSimpleRegulate=Yi,exports.encodeFindResource=function(e){const t=e.spartito.perform(),s=e.systems.map(e=>e.staves.map(e=>e?.maskImage)).flat(),i=s.filter(Boolean).length>s.length/2,r={},n=new Map,a=new Map,o=new Map;r.unitSize=e.unitSize,r.title={title:e.title};const c=e.pages[0].tokens;if(Array.isArray(c)&&c.length>0){const[t,...s]=c.filter(e=>e.type===K.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(r.title.title=t.text,r.title.t={size:t.fontSize}),s?.length>0&&(s.sort((e,t)=>e.y-t.y),r.title.subtitle=s.map(e=>e.text).join("\n"),r.title.s={size:s.reduce((e,t)=>e+t.fontSize,0)/s.length});const i=c.filter(t=>t.type===K.Text&&"Author"===t.textType&&t.x>e.pages[0].width/2);i.length>0&&(r.title.composer=i.map(e=>e.text).join("\n"),r.title.c={size:i.reduce((e,t)=>e+t.fontSize,0)/i.length})}if(r.page={w:e.pages[0].width,h:e.pages[0].height},r.pages=e.pages.map(t=>{const s=t.source.dimensions.width/t.source.interval,i=t.source.dimensions.height/t.source.interval,[r,n,a,o]=t.source.matrix;return{src:t.source.url,w:s,h:i,x:0,y:0,l1:e.systems.indexOf(t.systems[0]),ls:t.systems.length,matrix:[r,n,a,o,-.5*r*s+-.5*i*a+.5*t.width||0,-.5*n*s+-.5*i*o+.5*t.height||0]}}),r.parts=[],r.lines=[],i){const t=e.staffLayout.partGroups.map(e=>e.range[0]===e.range[1]?[e.range[0]]:e.range),s=e.getTokenMap(),i=[];for(const[c,l]of t.entries()){const u=t.slice(0,c).flat().length,h={measures:[]};e.systems.forEach((r,m)=>{const f=r.staves.slice(),d=t.flat().map(e=>1<m+1&&(p[m+1]=p[m]);continue}const g=[];for(const e of l){const t=d[e];t&&g.push(...t.measures[m].getChords().map(t=>({chord:t,staffIndexInPart:e-u})))}let y=0;const v=p[m],x=[];g.forEach(({staffIndexInPart:l,chord:u})=>{const h=[];let d=u.tip?u.tip.x:u.right-u.left/2;u.noteIds.forEach((e,i)=>{const r=s.get(e),m=`n_${t.length>1?c+"_":""}${f}_${y}`;y++,n.set(r.id,m),a.set(r.id,(r.left+r.right)/2-v),o.set(r.id,l+1),h.push({line:2*-u.ys[i],id:m,staff:l+1,x:(r.left+r.right)/2-d})}),i[f]=i[f]||[],i[f].push(d-v);const p=e.spartito.measures[r.headMeasureIndex+m].events.filter(e=>e.noteIds.some(e=>u.noteIds.includes(e)));x.push({elems:h,x:d-v,type:2**u.division,...p.some(e=>e.grace)?{grace:{}}:{}})}),h.measures[f]={w:p[m+1]-p[m],staves:l.length,notes:x}}});let m=null;e.spartito.measures.forEach((s,i)=>{const r=e.spartito.measureIndexMapping[i],n=s.contexts.flat().filter(e=>js.includes(e.tokenType)&&l.includes(e.staff)).map(e=>{const s=t.find(t=>t.includes(e.staff));return{x:e.x,clef:Hs(e),staff:s.indexOf(e.staff)+1,tick:e.tick}});n.length>0&&h.measures[r]&&(h.measures[r].clefs=n);const a=s.basics.filter((e,t)=>1<0&&(r.parts[c]=h)}e.systems.forEach((s,i)=>{const n=[],a=s.staves[0],o=s.staves[s.staves.length-1],c=a.top+a.staffY-2,l=o.top+o.staffY-2,u=s.staves.slice(),h=t.flat().map(e=>!(1<h.find(t=>t?.index===e)||null),a=t.map((e,t)=>[t,!e]).filter(e=>e[1]);let o=null;a.length>0&&(o=Object.fromEntries(a.map(e=>[e[0]+1,{hide:e[1]}])));let l=0,u=0;const f=t.filter(e=>!!e);if(f.length>0){const e=f[0],t=f[f.length-1],s=e.top+e.staffY-2,i=t.top+t.staffY-2;l=s-c,u=i-s+4}const{list:d,last:p}=t.reduce((e,t,s)=>(null===e.last||null===t?0===s&&l>0?e.list.push(l-4):e.list.push(0):e.list.push(t.top+t.staffY-(e.last.top+e.last.staffY)-4),e.last=t||e.last,e),{last:m,list:[]});m=p;const g=t.map(e=>{if(e?.maskImage){const t=e.imagePosition;return{src:e.maskImage,x:t.x,y:s.top+e.top+t.y-(s.top+e.top+e.staffY-2),w:t.width,h:t.height}}return null}),y=e.spartito.measures[s.headMeasureIndex];n.push({distances:d,imgs:g,y:l,staves:r.length,parti:i,height:u,...o?{details:o}:{},clef:Object.fromEntries(e.spartito.measures[s.headMeasureIndex]?.contexts.flat().filter(e=>js.includes(e.tokenType)&&r.includes(e.staff)).map(e=>[e.staff,Hs(e)])),fifths:y.basics.filter((e,t)=>1<e.spartito.measureIndexMapping[s.headMeasureIndex+i]).filter(e=>Number.isFinite(e));r.lines[i]={m1:f[0],m2:f.length>0?f[f.length-1]+1:void 0,x:s.left,y:s.top+c,w:s.measureBars[s.measureBars.length-1],h:l-c+4,lineStaves:n}});const c={0:"default",1:"brace",2:"bracket",3:"square"},l=it(e.staffLayoutCode),u=l.partGroups.map(e=>({sort:e.range[0],part:e})).sort((e,t)=>e.sort-t.sort).map(e=>e.part);r.groups=l.groups.filter(e=>0!==e.group.type).map((e,t)=>({type:c[e.group.type],p1:u.findIndex(t=>t.range.includes(e.range[0])),p2:u.findIndex(t=>t.range.includes(e.range[e.range.length-1]))})).filter(e=>"default"!==e.type)}let l;if(t&&(r.measInfo=t.notation.measures.map((e,t)=>{const s=new Map;return e.notes.forEach(e=>{s.set(e.tick,[...s.get(e.tick)||[],a.get(e.id)])}),Array.from(s.entries()).sort((e,t)=>+e[0]-t[0]).reduce((e,t,s)=>{const i=t[1].find(t=>t>e.last)||t[1][0];return e.list.push(i),e.last=i,e},{last:null,list:[]}).list.filter(Number.isFinite)})),t){l={};const s=new Map;let i,r;t.notation.measures.forEach((e,t)=>{const{numerator:s,denominator:n}=e.timeSignature;l.beats||l.beatsUnit||(l.beats=s,l.beatsUnit=n,i=s,r=n),l.beatInfos=l.beatInfos||[],i===s&&r===n||(i=s,r=n,l.beatInfos.push({tick:e.tick,beats:s,beatsUnit:n})),l.tempos=l.tempos||[],e.events.forEach(t=>{"meta"===t.data.type&&"setTempo"===t.data.subtype&&l.tempos.push({tick:e.tick,tempo:t.data.microsecondsPerBeat})})}),l.measures=t.notation.measures.reduce((e,t,i)=>{const r=Array.from(new Set(t.notes.map(e=>e.tick))).sort((e,t)=>e-t);return t.notes.forEach(e=>{s.set(e.id,r.indexOf(e.tick))}),e[t.tick]={measure:i,duration:t.duration,note_ticks:r},e},{}),l.measureInfos=t.notation.measures.map((e,t)=>({number:String(t+1),fifths:e.keySignature,beats:e.timeSignature.numerator,beatUnit:e.timeSignature.denominator}));const a=t.notation.toPerformingMIDI(t.notation.measures.map((e,t)=>t+1)).tracks,{partGroups:c}=e.staffLayout;let u=a.map((t,s)=>{const i=c[s].key;let r;switch(i){case"vi":case"vi1":case"vi2":r=40;break;case"viola":r=42;break;case"vo":r=55;break;case"basso":r=71;break;default:r=0}return{program:r,channel:s,name:e.instrumentDict[i]??"Piano",track:t}});if(c.some(e=>e.group.grand)){const t=/l\.?h\.?|左手|left hand/i,s=/r\.?h\.?|右手|right hand/i,i=Object.entries(e.instrumentDict).filter(([e,i])=>t.test(i)||s.test(i)).map(([e,s])=>({key:e,hand:t.test(s)?"left":"right"}));let r,n=null;if(2===i.length&&i[0].hand!==i[1].hand){const t=i.find(e=>"left"===e.hand),s=i.find(e=>"right"===e.hand);n=[e.staffLayout.staffIds.findIndex(e=>e===s?.key),e.staffLayout.staffIds.findIndex(e=>e===t?.key)],r=c.findIndex(e=>e.range[0]<=Math.min(...n)&&e.range[1]>=Math.max(...n))}if(Number.isFinite(r)&&r>-1){const e=u[r],t=[];e.track.forEach(e=>{Number.isFinite(e.staff)&&(t[e.staff]||(t[e.staff]=[]),t[e.staff].push(e)),"meta"===e.type&&t.forEach(t=>{t.push(e)})}),u.splice(r,1,t.filter(Boolean).map(t=>({...e,track:t}))),u=u.flat(),l.rightHandTrack=n[0],l.leftHandTrack=n[1]}else u.sort((e,t)=>e===u[r]?-1:0)}l.tracks=u.map(({program:e,channel:t,name:s})=>({program:e,channel:t,name:s}));const h=u.map(({track:e})=>{const t=new Map;return e.map(e=>{if("noteOn"===e.subtype&&t.set(e.noteNumber,e),"noteOff"===e.subtype){const s=t.get(e.noteNumber);s?.noteNumber===e.noteNumber&&(s.duration=e.ticks-s.ticks)}return e})}),m=new Map(Object.entries(l.measures).map(([e,t])=>[t.measure,+e]));l.events=h.map((e,t)=>e.filter(e=>"channel"===e.type).map(e=>{e?.ids?.[0]&&(e.numId=n.get(e.ids[0]));let i=[0,0,0];switch(e.subtype){case"noteOn":i=[144|e.channel,e.noteNumber,e.velocity];break;case"noteOff":i=[128|e.channel,e.noteNumber,e.velocity?e.velocity:0];break;case"noteAftertouch":i=[160|e.channel,e.noteNumber,e.amount];break;case"controller":i=[176|e.channel,e.controllerType,e.value];break;case"programChange":i=[192|e.channel,e.programNumber,0];break;case"channelAftertouch":i=[208|e.channel,e.amount,0];break;case"pitchBend":i=[224|e.channel,255&e.value,e.value>>7&255];break;default:throw new Error("unhandled event subtype:"+e.subtype)}return{..."noteOn"===e.subtype?{id:n.get(e?.ids?.[0])}:{},tick:e.ticks,channel:e.channel,duration:e.duration,track:t,event:i,elem_ids:e?.ids.map(e=>n.get(e)),measure:e.measure-1,meas_start_tick:m.get(e.measure-1),staff:o.get(e.ids[0]),note:s.get(e.ids[0])}})).flat(1).sort((e,t)=>{for(const s of["tick","measure","track"])if(e[s]!==t[s])return e[s]-t[s];return 0})}return{scoreJson:r,midiJson:l}},exports.evaluateScoreQuality=async(e,t)=>(e.spartito?.regulated||await Yi(e,t),e.spartito.regulated?e.spartito.qualityScore:null),exports.getScoreJsonImages=e=>[...e.pages.map(e=>e?.src),...e.lines.map(e=>e.lineStaves.map(e=>e.imgs)).flat(2).map(e=>e?.src).filter(Boolean)],exports.predictPages=async(e,t,s={outputWidth:1200,pageStore:Ai,onReplaceImage:Pi})=>{const i=e.logger;s.outputWidth=s.outputWidth||1200,s.pageStore=s.pageStore||Ai,s.onReplaceImage=s.onReplaceImage||Pi,s.processes=Array.isArray(s.processes)&&s.processes.length>0?s.processes:["layout","text","gauge","mask","semantic","brackets"];const r=new OMRProgress(s.onProgress),n=Date.now();t.forEach(e=>{e.layout?.detection?e.layout.detection.areas=e.layout.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0):delete e.layout});const a=new Score({title:s?.title,stavesCount:2,paperOptions:{raggedLast:!0,raggedLastBottom:!0},headers:{},instrumentDict:{},settings:{enabledGauge:s.processes.includes("gauge"),semanticConfidenceThreshold:1}});i.info(`[predictor]: download_source_images-${t.length}`);const o=await Promise.all(t.map(e=>c.loadImage(e.url)));i.info(`[predictor]: source_images_downloaded-${t.length}`);const l=o.map((e,s)=>function(e,t){let s=e.height/e.width*t;const i=new c.Canvas(t,s);return i.getContext("2d").drawImage(e,0,0,t,t*e.height/e.width),i}(e,t[s].layout?.sourceSize?.width??e.width));r.setTotal("layout",o.length),r.setTotal("text",o.length);const u=await Promise.all(l.map(async(s,i)=>t[i].layout?!t[i].enableGauge&&t[i]?.layout?.detection?.areas?.length?(await e.predictScoreImages("layout$reinforce",[s.toBufferSync("png")],[t[i].layout]))?.[0]:t[i].layout:(await e.predictScoreImages("layout",[s.toBufferSync("png")]))?.[0]));u.forEach(e=>{e.detection.areas=e.detection?.areas?.filter(e=>e?.staves?.middleRhos?.length>0)});const h=new Map,m=async e=>{const t=await s.onReplaceImage(e);h.set(e,t)};async function f(e,i){const{url:n,key:o,layout:u,enableGauge:h}=t[i],m=yi(JSON.stringify({key:o||n,layout:u,enableGauge:h})),f=await s.pageStore.get(m),d=!s.renew&&(f&&!t[i].renew||!e.detection.areas?.length),p=a.pages[i]=d&&f?b(f,$s):new Page({source:{name:o||("string"==typeof n&&/https?:\/\//.test(n)?n:null),size:0,url:n,crop:{unit:"%",x:0,y:0,width:100,height:100},dimensions:e.sourceSize,matrix:[Math.cos(e.theta),-Math.sin(e.theta),Math.sin(e.theta),Math.cos(e.theta),0,0],interval:e.interval,needGauge:t[i].enableGauge},layout:e.detection}),g=d?null:await async function({page:e,score:t,pageCanvas:s}){if(!e?.layout?.areas?.length)return null;e.width=t.pageSize.width/t.unitSize,e.height=t.pageSize.height/t.unitSize;const i=new c.Canvas(s.width,s.height),r=i.getContext("2d");r.save();const{width:n,height:a}=i,[o,l,u,h]=e.source.matrix;r.setTransform(o,l,u,h,-.5*n+.5*o*n+.5*l*a,-.5*a+.5*u*n+.5*h*a),r.drawImage(s,0,0),r.restore();const m=e.source.interval;return e.layout.areas.map((t,i)=>{console.assert(t.staves?.middleRhos?.length,"[shootImageByDetection] empty area:",t);const n=r.getImageData(t.x,t.y,t.width,t.height),a=new c.Canvas(t.width,t.height);a.getContext("2d").putImageData(n,0,0);const o=t.staves,l={width:t.width,height:t.height},u=s.width/2/m,h=s.height/2/m,f={x:(t.x+t.staves.phi1)/m-u+e.width/2,y:t.y/m-h+e.height/2};e.systems[i]=vi({page:e,backgroundImage:a.toBufferSync("png"),detection:o,imageSize:l,position:f})}),i}({score:a,page:p,pageCanvas:l[i]});return r.increase("layout"),{page:p,omit:d,hash:m,correctCanvas:g}}!function(e,t,s){const i=t.filter(e=>e&&e.detection&&e.detection.areas?.length).map((e,t)=>{const s=Math.min(...e.detection.areas.filter(e=>e.staves?.middleRhos?.length).map(e=>e.staves.interval)),i=e.sourceSize;return{...e,index:t,vw:i.width/s,hwr:i.height/i.width}});if(!i.length)throw new Error("empty result");const r=i.sort((e,t)=>t.vw-e.vw)[0],n=Math.max(...i.map(e=>e.hwr));e.unitSize=s/r.vw,e.pageSize={width:s,height:s*n}}(a,u,s.outputWidth);const d=u.reduce((e,t)=>e+(t.detection.areas?.length??0),0),p=u.reduce((e,t)=>e+(t.detection.areas?.reduce?.((e,t)=>e+(t.staves?.middleRhos?.length??0),0)??0),0);r.setTotal("gauge",p),r.setTotal("mask",p),r.setTotal("semantic",p),r.setTotal("brackets",d);const g=[],y=[],v=Date.now();let x=0;for(const n of u.keys()){const o=[],{page:l,correctCanvas:d,omit:p,hash:v}=await f(u[n],n);if(o.push(m(l.source.url)),o.push(...l.systems.map(e=>m(e.backgroundImage))),i.info(`[predictor]: check_cache_pageIndex-${n} omit: ${p}`),p)y.push(n);else{const u=l.systems.map((e,t)=>e.staves.map((s,i)=>({pageIndex:n,systemIndex:t,staffIndex:i,page:l,system:e,staff:s}))).flat(1);await Mi([async()=>{if(!s.processes.includes("brackets"))return;const t=l.layout,a=l.source.interval,o=Date.now(),u=l.systems.map((e,s)=>{const{x:i,y:r,staves:{middleRhos:n,phi1:o}}=t.areas[s],l=n[0],u=n[n.length-1],h={x:i+o-4*a,y:r+l-4*a,width:8*a,height:u-l+8*a},m=new c.Canvas(64,h.height/a*8);return m.getContext("2d").drawImage(d,h.x,h.y,h.width,h.height,0,0,m.width,m.height),{system:e,buffer:m.toBufferSync("png")}});i.info(`[predictor]: brackets js [pageIndex-${n}] duration: ${Date.now()-o}`);const h=await e.predictScoreImages("brackets",{buffers:u.map(e=>e.buffer)});r.increase("brackets",u.length),u.forEach(({system:e},t)=>{h[t]&&(e.bracketsAppearance=h[t])})},async()=>{if(s.processes.includes("text"))try{const t=Date.now(),o=d.toBufferSync("png"),c=(await e.predictScoreImages("textLoc",[o]))[0].filter(e=>e.score>0);if(c.length>0){const[t]=await e.predictScoreImages("textOcr",{buffers:[o],location:c});l.assignTexts(t.areas,t.imageSize),l.assemble()}if(i.info(`[predictor]: text js [pageIndex-${n}] duration: ${Date.now()-t}`),r.increase("text"),!s.title){const e=a.pages[0].tokens;if(Array.isArray(e)&&e.length>0){const[t]=e.filter(e=>e.type===K.Text&&"Title"===e.textType).sort((e,t)=>t.fontSize-e.fontSize);t&&(a.title=t.text)}}}catch(e){i.error(`[predictor]: text js [pageIndex-${n}] ${JSON.stringify(e)}`)}},async()=>{var c;await(c=async()=>{if(s.processes.includes("gauge")&&!1!==t[n].enableGauge){const t=await e.predictScoreImages("gauge",await Promise.all(u.map(async({staffIndex:e,system:t})=>{const s=Date.now(),r=await Ei(t,e,{paddingLeft:Si,spec:bi});return i.info(`[predictor]: gauge js shoot [page-${n}, staff-${e}] duration: ${Date.now()-s}`),r.toBufferSync("png")})));for(const[s,{system:n,staff:a,pageIndex:c,staffIndex:l}]of u.entries()){const u=Date.now();i.info(`[predictor]: gauge js [page-${c}, staff-${l}] start..`),await Ii({pyClients:e,system:n,staff:a,staffIndex:l,gaugeImage:t[s].image}),i.info(`[predictor]: gauge js [page-${c}, staff-${l}] duration: ${Date.now()-u}`),r.increase("gauge"),o.push(m(a.backgroundImage))}}else for(const[e,{system:t,staff:s,staffIndex:i}]of u.entries())await Ni({system:t,staff:s,staffIndex:i}),o.push(m(s.backgroundImage))},c()),await Mi([async()=>{if(!s.processes.includes("mask"))return;const t=await e.predictScoreImages("mask",u.map(({staff:e})=>e.backgroundImage));for(const[e,{staff:s,staffIndex:a}]of u.entries()){const c=Date.now();await Ci({staff:s,staffIndex:a,maskImage:t[e].image}),i.info(`[predictor]: mask js [page-${n}, ${e}, staff-${a}] duration: ${Date.now()-c}`),r.increase("mask"),o.push(m(s.maskImage))}},async()=>{if(!s.processes.includes("semantic"))return;const t=b(await e.predictScoreImages("semantic",u.map(({staff:e})=>e.backgroundImage)),$s);u.forEach(({system:e})=>e.clearTokens());for(const[e,{staffIndex:s,system:o,staff:c}]of u.entries()){const l=Date.now();await _i({score:a,system:o,staff:c,staffIndex:s,graph:t[e]}),i.info(`[predictor]: semantic js [page-${n}, system-${o.index}, staff-${c.index}] duration: ${Date.now()-l}`),r.increase("semantic")}}])}]),++x}g.push(Promise.all(o).then(()=>(Oi(l,e=>h.get(e)),i.info(`[predictor]: pageStore set: [${n}]`),s.pageStore.set(v,JSON.stringify(l)))))}const S=Date.now();await Promise.all(g),i.info(`[predictor]: inferenceStaffLayout: ${a.title}, [${a.systems.length}]`),a.inferenceStaffLayout(),i.info(`[predictor]: done: ${a.title}`),a.assemble();const k=Date.now();return{score:a,omitPages:y,stat:{cost:k-n,pagesCost:S-v,pages:x}}},exports.regulateWithBeadSolver=async(e,{logger:t,pickers:s,solutionStore:i=$i,ignoreCache:r,freshOnly:n,onSaveIssueMeasure:a,onProgress:o,onPassStart:c})=>{e.spartito=void 0,e.assemble();const l=e.makeSpartito();l.measures.forEach(t=>e.assignBackgroundForMeasure(t));const u=Date.now();t?.info(`[regulateWithBeadSolver] begin, measure total: ${l.measures.length}.`,r?"ignoreCache":"",n?"freshOnly":"");const h=l.measures.filter(e=>e.events?.length&&!e.patched).map(e=>({origin:e.deepCopy(),current:e,evaluation:void 0,baseQuality:0}));for(const e of l.measures.filter(e=>e.events?.length)){const t=s.find(t=>t.n_seq>e.events.length+1);t&&await Fs(e,t)}l.rectifyTimeSignatures(t),s.forEach(e=>e.cost=0);const m={cached:0,simple:0,computed:0,tryTimes:0,solved:0,issue:0,fatal:0};if(t?.info("[regulateWithBeadSolver] measures estimation finished."),i&&!r)for(const e of h){const t=await i.get(e.origin.regulationHash0);t&&(e.current.applySolution(t),++m.cached,e.evaluation=Le(e.current),e.baseQuality=e.evaluation.qualityScore)}t?.info("[regulateWithBeadSolver]",`${m.cached}/${h.length}`,"solutions loaded.");const f=t?null:process.stdout;m.cached&&f?.write(`${m.cached}c`),h.forEach(e=>{const i=s.find(t=>t.n_seq>e.current.events.length+1);i?e.picker=i:t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] size out of range:`,e.current.events.length)});const d=h.filter(e=>e.picker&&(!e.evaluation||!e.evaluation.fine&&!n));d.forEach(e=>{const s=e.current.deepCopy();s.staffGroups=e.current.staffGroups,s.regulate({policy:"simple"});const i=Le(s);(!e.evaluation||i.qualityScore>e.evaluation.qualityScore)&&(e.evaluation=i,Object.assign(e.current,s),i.perfect&&(t?.info(`[regulateWithBeadSolver] measure[${e.current.measureIndex}] regulated by simple policy.`),++m.simple))}),m.computed=d.length-m.simple,m.simple&&f?.write(`${m.simple}s`);const p=(e,s,i)=>{t?.info(`[regulateWithBeadSolver] measure[${e.measureIndex}/${l.measures.length}] regulated${i?"+":"-"}: ${s.qualityScore.toFixed(3)}, ${s.fine?"solved":s.error?"error":"issue"}, ${e.regulationHash}`),f?.write(`[${s.fine?"32":s.error?"31":"33"}m${i?"+":"-"}`)},g=l.measures.length,y=()=>d.filter(e=>!e.evaluation?.fine).length,v=o?(e,t,s,i)=>{o(e,t,s,{pass:i.pass,remaining:y(),total:g})}:void 0;c?.(1,"Imperfect",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.05,quotaMax:200,quotaFactor:3,ptFactor:1},ji.Imperfect,1,v),c?.(2,"NotFine",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:20,ptFactor:1.6},ji.NotFine,2,v),c?.(3,"ErrorOnly",y()),m.tryTimes+=await Hi(d,p,f,{stopLoss:.08,quotaMax:1e3,quotaFactor:40,ptFactor:3},ji.ErrorOnly,3,v),d.forEach(({evaluation:e,baseQuality:t,current:s,origin:r})=>{e.fine?++m.solved:e.error?++m.fatal:++m.issue,(e.qualityScore>t||!t)&&(i.set(r.regulationHash0,{...s.asSolution(r),priority:-s?.solutionStat?.loss}),s.regulationHash!==r.regulationHash0&&i.set(s.regulationHash,{...s.asSolution(),priority:-s?.solutionStat?.loss})),e.fine||a?.({measureIndex:s.measureIndex,measure:new EditableMeasure(s),status:e.error?2:1})});const x=Date.now(),S=s.reduce((e,t)=>e+t.cost,0),b=l.qualityScore,k=x-u;return t?.info("[regulateWithBeadSolver] done in ",k,"ms, qualityScore:",b),n&&(m.cached=0),{totalCost:x-u,pickerCost:S,measures:m,qualityScore:b}},exports.replaceScoreJsonImages=(e,t=e=>e)=>{const s=JSON.parse(JSON.stringify(e));return s.pages.forEach(e=>{e?.src&&(e.src=t(e?.src))}),s.lines.forEach(e=>{e.lineStaves.forEach(e=>{e.imgs.forEach(e=>{e?.src&&(e.src=t(e.src))})})}),s},exports.saveEditableMeasures=async(e,t,s,{status:i=2,solutionStore:r}={})=>{e.assemble();const n=e.spartito||e.makeSpartito(),a=t.map(e=>n.measures.find(t=>t.measureIndex===e)).filter(Boolean);if(r){const e=await r.batchGet(a.map(e=>e.regulationHash0));a.forEach((t,s)=>{const i=e[s];i&&t.applySolution(i)})}a.forEach(e=>{s({measureIndex:e.measureIndex,measure:new EditableMeasure(e),status:i})})},exports.starry=$s,exports.updateScorePatches=(e,t,s={})=>{if(console.assert(t.every(e=>e.validRegulated),"[updateScorePatches] some measures not valid regulated:",t.filter(e=>!e.validRegulated)),e.patches=t.map(e=>e.createPatch()),s?.solutionStore){e.assemble();const i=e.makeSpartito();t.forEach(e=>{if(s.solutionStore.set(e.regulationHash,{...e.asSolution(),priority:1}),e.regulationHash0!==e.regulationHash){const t=i.measures.find(t=>t.measureIndex===e.measureIndex);s.solutionStore.set(e.regulationHash0,{...e.asSolution(t),priority:1})}})}}; //# sourceMappingURL=index.js.map diff --git a/backend/omr/dist/index.js.map b/backend/omr/dist/index.js.map index 909551468b53d2924bc7218d2f65378ffa644fea..4f383725a6d05d11a17298a7a07535128c465495 100644 --- a/backend/omr/dist/index.js.map +++ b/backend/omr/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../../../src/starry/interfaces.ts","../../../src/starry/semanticPoint.ts","../../libs/browserComponents.ts","../../../src/starry/token.ts","../../../src/starry/aux_/typedJSON.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/logger.ts","../../../src/starry/utils.ts","../../../src/starry/term.ts","../../../src/starry/measureEvaluator.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/patch.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/measureLayout/parser.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/beadSolver.ts","../../../src/isomorphic/converter.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../node_modules/crypt/crypt.js","../../../node_modules/charenc/charenc.js","../../../node_modules/sha1/sha1.js","../../libs/util.ts","../../libs/predictPages.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../src/index.ts"],"sourcesContent":["import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import * as starry from '../starry';\nimport { MidiJson, ScoreJSON } from './types';\nimport { ChordColumn, Staff } from '../starry';\nimport { parseCode } from '../staffLayout';\nimport { MidiEvent } from '../performer';\n\nexport interface FindScoreResource {\n\tscoreJson: ScoreJSON;\n\tmidiJson: MidiJson;\n}\n\nconst SUPPORT_CLEF_TYPES = [starry.TokenType.ClefG, starry.TokenType.ClefF, starry.TokenType.ClefC];\n\nconst tokenToText = (token: starry.ContextedTerm) => {\n\tlet text = null;\n\tswitch (token.tokenType) {\n\t\tcase starry.TokenType.ClefG:\n\t\t\ttext = 'Treble';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefF:\n\t\t\ttext = 'Bass';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefC:\n\t\t\tif (token.y === -1) {\n\t\t\t\ttext = 'Tenor';\n\t\t\t} else {\n\t\t\t\ttext = 'Alto';\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\treturn text;\n};\n\nexport function encodeFindResource(score: starry.Score): FindScoreResource {\n\tconst perform = score.spartito.perform();\n\tconst maskImages = score.systems.map((sy) => sy.staves.map((st) => st?.maskImage)).flat();\n\tconst hasMaskImage = maskImages.filter(Boolean).length > maskImages.length / 2;\n\n\tconst scoreJson: ScoreJSON = {} as ScoreJSON;\n\n\tconst idsMap = new Map(); // starry内部ID到find播放器id的映射\n\tconst idsXMap = new Map(); // 内部ID和元素X坐标的映射\n\tconst idStaffIndexMap = new Map(); // 内部ID和元素所属part的内部staff索引\n\n\tscoreJson.unitSize = score.unitSize;\n\n\tscoreJson.title = {\n\t\ttitle: score.title,\n\t} as any;\n\n\tconst coverTexts: {\n\t\tconfidence: number;\n\t\tfontSize: number;\n\t\tid: string;\n\t\ttext: string;\n\t\ttextType: 'Title' | 'Author';\n\t\ttype: starry.TokenType;\n\t\twidth_: number;\n\t\tx: number;\n\t\ty: number;\n\t}[] = score.pages[0].tokens as any;\n\n\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\tconst [title, ...subtitles] = coverTexts\n\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\tif (title) {\n\t\t\tscoreJson.title.title = title.text;\n\t\t\tscoreJson.title.t = { size: title.fontSize };\n\t\t}\n\n\t\tif (subtitles?.length > 0) {\n\t\t\tsubtitles.sort((a, b) => a.y - b.y);\n\t\t\tscoreJson.title.subtitle = subtitles.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.s = { size: subtitles.reduce((a, n) => a + n.fontSize, 0) / subtitles.length };\n\t\t}\n\n\t\tconst authors = coverTexts.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Author' && x.x > score.pages[0].width / 2);\n\n\t\tif (authors.length > 0) {\n\t\t\tscoreJson.title.composer = authors.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.c = { size: authors.reduce((a, n) => a + n.fontSize, 0) / authors.length };\n\t\t}\n\t}\n\n\tscoreJson.page = {\n\t\tw: score.pages[0].width,\n\t\th: score.pages[0].height,\n\t};\n\n\tscoreJson.pages = score.pages.map((page) => {\n\t\tconst bgWidth = page.source.dimensions.width / page.source.interval;\n\t\tconst bgHeight = page.source.dimensions.height / page.source.interval;\n\n\t\tconst [a, b, c, d] = page.source.matrix;\n\n\t\treturn {\n\t\t\tsrc: page.source.url, // 本页本地图片URL\n\t\t\tw: bgWidth, // 背景图\n\t\t\th: bgHeight, // 背景图\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tl1: score.systems.indexOf(page.systems[0]), // 本页起始system编号\n\t\t\tls: page.systems.length, // 本页system数量\n\t\t\tmatrix: [\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t(-1 / 2) * a * bgWidth + (-1 / 2) * bgHeight * c + (1 / 2) * page.width || 0,\n\t\t\t\t(-1 / 2) * b * bgWidth + (-1 / 2) * bgHeight * d + (1 / 2) * page.height || 0,\n\t\t\t],\n\t\t};\n\t});\n\n\tscoreJson.parts = [];\n\tscoreJson.lines = [];\n\n\t// 没有降噪图就不需要这些字段\n\tif (hasMaskImage) {\n\t\tconst partTemplates = score.staffLayout.partGroups.map((p) => (p.range[0] === p.range[1] ? [p.range[0]] : p.range));\n\t\tconst tokenMap = score.getTokenMap();\n\t\tconst measureXs: number[][] = [];\n\n\t\t// partIndex: part索引,template: 当前part所包含的staff的全局索引\n\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\tconst staffIndexBase = partTemplates.slice(0, partIndex).flat().length;\n\n\t\t\tconst part: ScoreJSON['parts'][0] = {\n\t\t\t\tmeasures: [],\n\t\t\t};\n\n\t\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\t\tconst staves = system.staves.slice();\n\n\t\t\t\t// 不可见staff用null填充的staff列表\n\t\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => (!((1 << staffIndex) & system.staffMask) ? null : staves.shift()));\n\t\t\t\tconst bars = [0, ...system.measureBars];\n\n\t\t\t\t// 便历当前system下的小节\n\t\t\t\tfor (let mi = 0; mi < system.measureCount; mi++) {\n\t\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[system.headMeasureIndex + mi];\n\n\t\t\t\t\t// 如果小节被过滤\n\t\t\t\t\tif (!Number.isFinite(measureIndex)) {\n\t\t\t\t\t\tif (bars.length > mi + 1) bars[mi + 1] = bars[mi];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst chordColumns: { chord: ChordColumn; staffIndexInPart: number }[] = [];\n\n\t\t\t\t\tfor (const staffIndex of template) {\n\t\t\t\t\t\tconst staff = paddedStaves[staffIndex];\n\n\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\tchordColumns.push(...staff.measures[mi].getChords().map((chord) => ({ chord, staffIndexInPart: staffIndex - staffIndexBase })));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet noteIndex = 0;\n\n\t\t\t\t\tconst measureStartX = bars[mi]; // 小节开头相对system的x偏移\n\n\t\t\t\t\tconst measureNotes = [];\n\n\t\t\t\t\tchordColumns.forEach(({ staffIndexInPart, chord }) => {\n\t\t\t\t\t\tconst elems = [];\n\n\t\t\t\t\t\tlet firstX = chord.tip ? chord.tip.x : chord.right - chord.left / 2;\n\n\t\t\t\t\t\tchord.noteIds.forEach((noteId, key) => {\n\t\t\t\t\t\t\tconst token = tokenMap.get(noteId);\n\n\t\t\t\t\t\t\tconst innerId = `n_${partTemplates.length > 1 ? partIndex + '_' : ''}${measureIndex}_${noteIndex}`;\n\t\t\t\t\t\t\tnoteIndex++;\n\t\t\t\t\t\t\tidsMap.set(token.id, innerId);\n\t\t\t\t\t\t\tidsXMap.set(token.id, (token.left + token.right) / 2 - measureStartX);\n\t\t\t\t\t\t\tidStaffIndexMap.set(token.id, staffIndexInPart + 1);\n\n\t\t\t\t\t\t\telems.push({\n\t\t\t\t\t\t\t\tline: -chord.ys[key] * 2, // 五线中线为0,往上为正/向下为负,每半格子1个单位\n\t\t\t\t\t\t\t\tid: innerId, // n_小节号_第几个音符\n\t\t\t\t\t\t\t\t// acc: {\n\t\t\t\t\t\t\t\t// \tacc: AccType.Flat,\n\t\t\t\t\t\t\t\t// \tx: -1\n\t\t\t\t\t\t\t\t// }, // 临时升降记号及其偏移量\n\t\t\t\t\t\t\t\tstaff: staffIndexInPart + 1,\n\t\t\t\t\t\t\t\tx: (token.left + token.right) / 2 - firstX, // 当前符头相对第一个符头的偏移量\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmeasureXs[measureIndex] = measureXs[measureIndex] || [];\n\t\t\t\t\t\tmeasureXs[measureIndex].push(firstX - measureStartX);\n\n\t\t\t\t\t\tconst events = score.spartito.measures[system.headMeasureIndex + mi].events.filter((x) =>\n\t\t\t\t\t\t\tx.noteIds.some((y) => chord.noteIds.includes(y))\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tmeasureNotes.push({\n\t\t\t\t\t\t\telems,\n\t\t\t\t\t\t\tx: firstX - measureStartX, // 本音符相对于小节开头的x偏移量\n\t\t\t\t\t\t\ttype: 2 ** chord.division, // n分音符,1为全音符\n\t\t\t\t\t\t\t...(events.some((x) => x.grace) ? { grace: {} } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tpart.measures[measureIndex] = {\n\t\t\t\t\t\tw: bars[mi + 1] - bars[mi], // 本小节宽度\n\t\t\t\t\t\tstaves: template.length, // 本part的staff个数\n\t\t\t\t\t\tnotes: measureNotes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// 提取谱号、调号\n\t\t\tlet lastFifths = null;\n\t\t\tscore.spartito.measures.forEach((measure, i) => {\n\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[i];\n\n\t\t\t\tconst clefTokens = measure.contexts.flat().filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff));\n\t\t\t\tconst clefs = clefTokens.map((token) => {\n\t\t\t\t\tconst pt = partTemplates.find((p) => p.includes(token.staff));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\tclef: tokenToText(token),\n\t\t\t\t\t\tstaff: pt.indexOf(token.staff) + 1, // staff索引从1开始\n\t\t\t\t\t\ttick: token.tick,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tif (clefs.length > 0) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].clefs = clefs);\n\t\t\t\t}\n\n\t\t\t\tconst fifths = measure.basics.filter((x, i) => (1 << i) & measure.staffMask)[0].keySignature;\n\n\t\t\t\tif (fifths !== lastFifths) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].fifths = { fifths });\n\t\t\t\t\tlastFifths = fifths;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (part.measures.length > 0) {\n\t\t\t\tscoreJson.parts[partIndex] = part;\n\t\t\t}\n\t\t}\n\n\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\tconst lineStaves = [];\n\n\t\t\tconst systemTopStaff = system.staves[0];\n\t\t\tconst systemBottomStaff = system.staves[system.staves.length - 1];\n\n\t\t\tconst systemTopStaffY = systemTopStaff.top + systemTopStaff.staffY - 2;\n\t\t\tconst systemBottomStaffY = systemBottomStaff.top + systemBottomStaff.staffY - 2;\n\n\t\t\tconst staves = system.staves.slice();\n\n\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => {\n\t\t\t\tconst isEmpty = !((1 << staffIndex) & system.staffMask);\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else {\n\t\t\t\t\treturn staves.shift();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet lastPartLastStaff = null;\n\n\t\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\t\tconst partStaves: Staff[] = template.map((staffIndex) => paddedStaves.find((s) => s?.index === staffIndex) || null);\n\n\t\t\t\tconst staffs = partStaves.map((staff, index) => [index, !staff] as [number, boolean]).filter((s) => s[1]);\n\n\t\t\t\tlet details = null;\n\t\t\t\tif (staffs.length > 0) {\n\t\t\t\t\tdetails = Object.fromEntries(staffs.map((d) => [d[0] + 1, { hide: d[1] }]));\n\t\t\t\t}\n\n\t\t\t\tlet y = 0;\n\t\t\t\tlet height = 0;\n\n\t\t\t\tconst visibleStaves = partStaves.filter((s) => !!s);\n\n\t\t\t\tif (visibleStaves.length > 0) {\n\t\t\t\t\tconst partTopStaff = visibleStaves[0];\n\t\t\t\t\tconst partBottomStaff = visibleStaves[visibleStaves.length - 1];\n\t\t\t\t\tconst partTopStaffY = partTopStaff.top + partTopStaff.staffY - 2;\n\t\t\t\t\tconst partBottomStaffY = partBottomStaff.top + partBottomStaff.staffY - 2;\n\n\t\t\t\t\ty = partTopStaffY - systemTopStaffY;\n\t\t\t\t\theight = partBottomStaffY - partTopStaffY + 4;\n\t\t\t\t}\n\n\t\t\t\tconst { list: distances, last } = partStaves.reduce(\n\t\t\t\t\t(acc, next, index) => {\n\t\t\t\t\t\tif (acc.last === null || next === null) {\n\t\t\t\t\t\t\tif (index === 0 && y > 0) {\n\t\t\t\t\t\t\t\tacc.list.push(y - 4);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacc.list.push(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tacc.list.push(next.top + next.staffY - (acc.last.top + acc.last.staffY) - 4);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tacc.last = next || acc.last;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: lastPartLastStaff, list: [] } as { last: Staff; list: number[] }\n\t\t\t\t);\n\n\t\t\t\tlastPartLastStaff = last;\n\n\t\t\t\tconst imgs = partStaves.map((staff) => {\n\t\t\t\t\tif (staff?.maskImage) {\n\t\t\t\t\t\tconst rect = staff.imagePosition;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsrc: staff.maskImage,\n\t\t\t\t\t\t\tx: rect.x,\n\t\t\t\t\t\t\ty: system.top + staff.top + rect.y - (system.top + staff.top + staff.staffY - 2),\n\t\t\t\t\t\t\tw: rect.width,\n\t\t\t\t\t\t\th: rect.height,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\n\t\t\t\tconst spartitoMeasure = score.spartito.measures[system.headMeasureIndex];\n\t\t\t\tlineStaves.push({\n\t\t\t\t\t// parts\n\t\t\t\t\tdistances, // 两个staff间距\n\t\t\t\t\timgs,\n\t\t\t\t\ty, // 本staff相对于当前system第一线的起始y坐标\n\t\t\t\t\tstaves: template.length, // 本staff数量\n\t\t\t\t\tparti: partIndex, // 本staff所属part编号\n\t\t\t\t\theight, // 本staff高度\n\t\t\t\t\t...(details ? { details } : {}),\n\t\t\t\t\tclef: Object.fromEntries(\n\t\t\t\t\t\tscore.spartito.measures[system.headMeasureIndex]?.contexts\n\t\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t\t.filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff))\n\t\t\t\t\t\t\t.map((token) => [token.staff, tokenToText(token)])\n\t\t\t\t\t),\n\t\t\t\t\tfifths: spartitoMeasure.basics.filter((x, i) => (1 << i) & spartitoMeasure.staffMask)[0].keySignature,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst mIndices = system.measureBars\n\t\t\t\t.map((_, i) => score.spartito.measureIndexMapping[system.headMeasureIndex + i])\n\t\t\t\t.filter((x) => Number.isFinite(x));\n\n\t\t\tscoreJson.lines[systemIndex] = {\n\t\t\t\tm1: mIndices[0], // 本system起始小节编号\n\t\t\t\tm2: mIndices.length > 0 ? mIndices[mIndices.length - 1] + 1 : undefined, // 本system结尾小节编号+1\n\t\t\t\tx: system.left, // 本system左侧小节线x坐标\n\t\t\t\ty: system.top + systemTopStaffY, // 本system左侧小节线y坐标\n\t\t\t\tw: system.measureBars[system.measureBars.length - 1], // 本system宽度\n\t\t\t\th: systemBottomStaffY - systemTopStaffY + 4, // 本system高度\n\t\t\t\tlineStaves,\n\t\t\t};\n\t\t});\n\n\t\tconst map = { 0: 'default', 1: 'brace', 2: 'bracket', 3: 'square' };\n\n\t\tconst staffLayout = parseCode(score.staffLayoutCode);\n\t\tconst sortedParts = staffLayout.partGroups\n\t\t\t.map((x) => {\n\t\t\t\treturn {\n\t\t\t\t\tsort: x.range[0],\n\t\t\t\t\tpart: x,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((a, b) => a.sort - b.sort)\n\t\t\t.map((x) => x.part);\n\n\t\tscoreJson.groups = staffLayout.groups\n\t\t\t.filter((x) => x.group.type !== 0)\n\t\t\t.map((part, key) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: map[part.group.type] as any,\n\t\t\t\t\tp1: sortedParts.findIndex((x) => x.range.includes(part.range[0])),\n\t\t\t\t\tp2: sortedParts.findIndex((x) => x.range.includes(part.range[part.range.length - 1])),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter((x) => x.type !== 'default');\n\t}\n\n\tif (perform) {\n\t\tscoreJson.measInfo = perform.notation.measures.map((measure, measureIndex) => {\n\t\t\tconst map = new Map();\n\t\t\tmeasure.notes.forEach((n) => {\n\t\t\t\tmap.set(n.tick, [...(map.get(n.tick) || []), idsXMap.get(n.id)]);\n\t\t\t});\n\n\t\t\t// 找出每个tick对应的第一个音符的中心点的x\n\t\t\treturn Array.from(map.entries())\n\t\t\t\t.sort((a, b) => +a[0] - b[0])\n\t\t\t\t.reduce(\n\t\t\t\t\t(acc, ent, key) => {\n\t\t\t\t\t\tconst val = ent[1].find((x) => x > acc.last) || ent[1][0];\n\t\t\t\t\t\tacc.list.push(val);\n\t\t\t\t\t\tacc.last = val;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: null, list: [] }\n\t\t\t\t)\n\t\t\t\t.list.filter(Number.isFinite);\n\t\t});\n\t}\n\n\t/******************************* 生成 midiJson *************************************/\n\n\tlet midiJson: MidiJson;\n\n\tif (perform) {\n\t\tmidiJson = {} as MidiJson;\n\n\t\tconst idNoteMap = new Map();\n\n\t\tlet beatsCurrent;\n\t\tlet beatsUnitCurrent;\n\t\tperform.notation.measures.forEach((measure, mIndex) => {\n\t\t\tconst { numerator: beats, denominator: beatsUnit } = measure.timeSignature;\n\n\t\t\tif (!midiJson.beats && !midiJson.beatsUnit) {\n\t\t\t\tmidiJson.beats = beats;\n\t\t\t\tmidiJson.beatsUnit = beatsUnit;\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\t\t\t}\n\n\t\t\tmidiJson.beatInfos = midiJson.beatInfos || [];\n\n\t\t\tif (beatsCurrent !== beats || beatsUnitCurrent !== beatsUnit) {\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\n\t\t\t\tmidiJson.beatInfos.push({\n\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\tbeats,\n\t\t\t\t\tbeatsUnit,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tmidiJson.tempos = midiJson.tempos || [];\n\n\t\t\tmeasure.events.forEach((evt) => {\n\t\t\t\tif (evt.data.type === 'meta' && evt.data.subtype === 'setTempo') {\n\t\t\t\t\tmidiJson.tempos.push({\n\t\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\t\ttempo: evt.data.microsecondsPerBeat,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tmidiJson.measures = perform.notation.measures.reduce((acc, measure, index) => {\n\t\t\tconst note_ticks = Array.from(new Set(measure.notes.map((x) => x.tick))).sort((a, b) => a - b);\n\n\t\t\tmeasure.notes.forEach((x) => {\n\t\t\t\tidNoteMap.set(x.id, note_ticks.indexOf(x.tick));\n\t\t\t});\n\n\t\t\tacc[measure.tick] = {\n\t\t\t\tmeasure: index, // 小节编号\n\t\t\t\tduration: measure.duration, // 小节时值\n\t\t\t\tnote_ticks, // 本小节每列的tick\n\t\t\t};\n\n\t\t\treturn acc;\n\t\t}, {});\n\n\t\tmidiJson.measureInfos = perform.notation.measures.map((measure, key) => ({\n\t\t\tnumber: String(key + 1), // 小节编号\n\t\t\tfifths: measure.keySignature, // 调号 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7\n\t\t\tbeats: measure.timeSignature.numerator, // 拍号分子\n\t\t\tbeatUnit: measure.timeSignature.denominator, // 拍号分母\n\t\t}));\n\n\t\tconst midi = perform.notation.toPerformingMIDI(perform.notation.measures.map((_, key) => key + 1));\n\n\t\tconst tracks = midi.tracks as unknown as (MidiEvent & { duration: number })[][];\n\n\t\tconst { partGroups } = score.staffLayout;\n\n\t\tlet mergedTracks = tracks.map((track, trackIndex) => {\n\t\t\tconst key = partGroups[trackIndex].key;\n\n\t\t\tlet program: number;\n\n\t\t\tswitch (key) {\n\t\t\t\tcase 'vi':\n\t\t\t\tcase 'vi1':\n\t\t\t\tcase 'vi2':\n\t\t\t\t\tprogram = 40; // 小提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'viola':\n\t\t\t\t\tprogram = 42; // 中提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'vo':\n\t\t\t\t\tprogram = 55; // 合成人声\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'basso':\n\t\t\t\t\tprogram = 71; // 大管乐器\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // 大钢琴\n\t\t\t\t\tprogram = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tprogram, // 音色:0-127\n\t\t\t\tchannel: trackIndex, // 通道:0-15\n\t\t\t\tname: score.instrumentDict[key] ?? 'Piano', // 轨道名称\n\t\t\t\ttrack,\n\t\t\t};\n\t\t});\n\n\t\t// 找出大谱表所在track(声部),根据分手条件拆分为左右手\n\t\tif (partGroups.some((g) => g.group.grand)) {\n\t\t\tconst lhPattern = /l\\.?h\\.?|左手|left hand/i;\n\t\t\tconst rhPattern = /r\\.?h\\.?|右手|right hand/i;\n\t\t\tconst instrus = Object.entries(score.instrumentDict)\n\t\t\t\t.filter(([key, value]) => lhPattern.test(value) || rhPattern.test(value))\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\thand: lhPattern.test(value) ? 'left' : 'right',\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\tlet handStaves: number[] = null;\n\t\t\tlet partIndex;\n\n\t\t\t// 标记了左右手\n\t\t\tif (instrus.length === 2 && instrus[0].hand !== instrus[1].hand) {\n\t\t\t\tconst left = instrus.find((x) => x.hand === 'left');\n\t\t\t\tconst right = instrus.find((x) => x.hand === 'right');\n\t\t\t\thandStaves = [score.staffLayout.staffIds.findIndex((x) => x === right?.key), score.staffLayout.staffIds.findIndex((x) => x === left?.key)];\n\n\t\t\t\tpartIndex = partGroups.findIndex((g) => g.range[0] <= Math.min(...handStaves) && g.range[1] >= Math.max(...handStaves));\n\t\t\t}\n\n\t\t\tif (Number.isFinite(partIndex) && partIndex > -1) {\n\t\t\t\tconst trackToSplit = mergedTracks[partIndex];\n\t\t\t\tconst newTracks: any[][] = []; // Array.from(new Set(firstTrack.track.map(x => x.channel))).sort((a, b) => a - b)\n\n\t\t\t\ttrackToSplit.track.forEach((evt) => {\n\t\t\t\t\tif (Number.isFinite(evt.staff)) {\n\t\t\t\t\t\tif (!newTracks[evt.staff]) {\n\t\t\t\t\t\t\tnewTracks[evt.staff] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewTracks[evt.staff].push(evt);\n\t\t\t\t\t}\n\t\t\t\t\tif (evt.type === 'meta') {\n\t\t\t\t\t\tnewTracks.forEach((stave) => {\n\t\t\t\t\t\t\tstave.push(evt);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmergedTracks.splice(partIndex, 1, newTracks.filter(Boolean).map((track) => ({ ...trackToSplit, track })) as any);\n\n\t\t\t\tmergedTracks = mergedTracks.flat();\n\n\t\t\t\t// 指定左右手track\n\t\t\t\tmidiJson.rightHandTrack = handStaves[0];\n\t\t\t\tmidiJson.leftHandTrack = handStaves[1];\n\t\t\t} else {\n\t\t\t\tmergedTracks.sort((a, b) => (a === mergedTracks[partIndex] ? -1 : 0));\n\t\t\t}\n\t\t}\n\n\t\tmidiJson.tracks = mergedTracks.map(({ program, channel, name }) => ({ program, channel, name }));\n\n\t\tconst transformedTracks = mergedTracks.map(({ track }) => {\n\t\t\tconst pitchMap: Map = new Map();\n\n\t\t\treturn track.map((evt) => {\n\t\t\t\tif (evt.subtype === 'noteOn') {\n\t\t\t\t\tpitchMap.set(evt.noteNumber, evt);\n\t\t\t\t}\n\n\t\t\t\tif (evt.subtype === 'noteOff') {\n\t\t\t\t\tconst onEvent = pitchMap.get(evt.noteNumber);\n\t\t\t\t\tif (onEvent?.noteNumber === evt.noteNumber) {\n\t\t\t\t\t\tonEvent.duration = evt.ticks - onEvent.ticks;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn evt;\n\t\t\t});\n\t\t});\n\n\t\tconst measureTickMap = new Map(Object.entries(midiJson.measures).map(([tick, m]) => [m.measure, +tick]));\n\n\t\tmidiJson.events = (transformedTracks as (MidiEvent & { duration: number; numId?: string; ticks: number })[][])\n\t\t\t.map((track, trackIndex) => {\n\t\t\t\treturn track\n\t\t\t\t\t.filter((x) => x.type === 'channel')\n\t\t\t\t\t.map((evt) => {\n\t\t\t\t\t\tif (evt?.ids?.[0]) {\n\t\t\t\t\t\t\tevt.numId = idsMap.get(evt.ids[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet newEvent: [number, number, number] = [0, 0, 0];\n\n\t\t\t\t\t\tswitch (evt.subtype) {\n\t\t\t\t\t\t\tcase 'noteOn':\n\t\t\t\t\t\t\t\tnewEvent = [0x90 | evt.channel, evt.noteNumber, evt.velocity];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteOff':\n\t\t\t\t\t\t\t\tnewEvent = [0x80 | evt.channel, evt.noteNumber, evt.velocity ? evt.velocity : 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xa0 | evt.channel, evt.noteNumber, evt.amount];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'controller':\n\t\t\t\t\t\t\t\tnewEvent = [0xb0 | evt.channel, evt.controllerType, evt.value];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'programChange':\n\t\t\t\t\t\t\t\tnewEvent = [0xc0 | evt.channel, evt.programNumber, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'channelAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xd0 | evt.channel, evt.amount, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'pitchBend':\n\t\t\t\t\t\t\t\tnewEvent = [0xe0 | evt.channel, evt.value & 0xff, (evt.value >> 7) & 0xff];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new Error('unhandled event subtype:' + evt.subtype);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(evt.subtype === 'noteOn' ? { id: idsMap.get(evt?.ids?.[0]) } : {}), // 对应符头的id\n\t\t\t\t\t\t\ttick: evt.ticks,\n\t\t\t\t\t\t\tchannel: evt.channel,\n\t\t\t\t\t\t\tduration: evt.duration, // 只有note on事件有时值\n\t\t\t\t\t\t\ttrack: trackIndex, // evt.staffTrack, // 所属track\n\t\t\t\t\t\t\tevent: newEvent, // [event, note, velocity]\n\t\t\t\t\t\t\telem_ids: evt?.ids.map((id) => idsMap.get(id)),\n\t\t\t\t\t\t\tmeasure: evt.measure - 1, // 所属小节编号\n\t\t\t\t\t\t\tmeas_start_tick: measureTickMap.get(evt.measure - 1), // 所属小节起始tick\n\t\t\t\t\t\t\tstaff: idStaffIndexMap.get(evt.ids[0]),\n\t\t\t\t\t\t\tnote: idNoteMap.get(evt.ids[0]),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1)\n\t\t\t.sort((a, b) => {\n\t\t\t\tfor (const field of ['tick', 'measure', 'track']) {\n\t\t\t\t\tif (a[field] !== b[field]) {\n\t\t\t\t\t\treturn a[field] - b[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\t}\n\n\treturn {\n\t\tscoreJson,\n\t\tmidiJson,\n\t};\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var crypt = require('crypt'),\n utf8 = require('charenc').utf8,\n bin = require('charenc').bin,\n\n // The core\n sha1 = function (message) {\n // Convert to byte array\n if (message.constructor == String)\n message = utf8.stringToBytes(message);\n else if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer == 'function' && Buffer.isBuffer(message))\n message = Array.prototype.slice.call(message, 0);\n else if (!Array.isArray(message))\n message = message.toString();\n\n // otherwise assume byte array\n\n var m = crypt.bytesToWords(message),\n l = message.length * 8,\n w = [],\n H0 = 1732584193,\n H1 = -271733879,\n H2 = -1732584194,\n H3 = 271733878,\n H4 = -1009589776;\n\n // Padding\n m[l >> 5] |= 0x80 << (24 - l % 32);\n m[((l + 64 >>> 9) << 4) + 15] = l;\n\n for (var i = 0; i < m.length; i += 16) {\n var a = H0,\n b = H1,\n c = H2,\n d = H3,\n e = H4;\n\n for (var j = 0; j < 80; j++) {\n\n if (j < 16)\n w[j] = m[i + j];\n else {\n var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];\n w[j] = (n << 1) | (n >>> 31);\n }\n\n var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (\n j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :\n j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :\n j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :\n (H1 ^ H2 ^ H3) - 899497514);\n\n H4 = H3;\n H3 = H2;\n H2 = (H1 << 30) | (H1 >>> 2);\n H1 = H0;\n H0 = t;\n }\n\n H0 += a;\n H1 += b;\n H2 += c;\n H3 += d;\n H4 += e;\n }\n\n return [H0, H1, H2, H3, H4];\n },\n\n // Public API\n api = function (message, options) {\n var digestbytes = crypt.wordsToBytes(sha1(message));\n return options && options.asBytes ? digestbytes :\n options && options.asString ? bin.bytesToString(digestbytes) :\n crypt.bytesToHex(digestbytes);\n };\n\n api._blocksize = 16;\n api._digestsize = 20;\n\n module.exports = api;\n})();\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","import sha1 from 'sha1';\nimport { Canvas, Image, loadImage } from 'skia-canvas';\nimport { WeakLRUCache } from 'weak-lru-cache';\nimport * as starry from '../../src/starry';\nimport { SemanticGraph } from '../../src/starry';\nimport { LayoutResult, PyClients } from './predictors';\nimport { constructSystem, convertImage } from './util';\n\nglobalThis.OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\n(globalThis as any).Image = (globalThis as any).Image || Image;\nglobalThis.btoa = globalThis.btoa || ((str: string) => Buffer.from(str, 'binary').toString('base64'));\n\nconst STAFF_PADDING_LEFT = 32;\n\nconst MAX_PAGE_WIDTH = 1200;\n\nconst GAUGE_VISION_SPEC = {\n\tviewportHeight: 256,\n\tviewportUnit: 8,\n};\n\nconst MASK_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\nconst SEMANTIC_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\ninterface OMRStat {\n\tcost: number; // in milliseconds\n\tpagesCost: number; // in milliseconds\n\tpages: number;\n}\n\ninterface OMRSummary {\n\tcostTotal: number; // in milliseconds\n\tcostPerPage: number; // in milliseconds\n\tpagesTotal: number;\n\tscoreN: number;\n}\n\n/**\n * 为布局识别的图片标准化处理\n * @param image\n * @param width\n */\nfunction scaleForLayout(image: Image, width: number): Canvas {\n\tlet height = (image.height / image.width) * width;\n\n\tconst canvas = new Canvas(width, height);\n\tconst ctx = canvas.getContext('2d');\n\n\tctx.drawImage(image, 0, 0, width, (width * image.height) / image.width);\n\n\treturn canvas;\n}\n\n/**\n * 根据所有图像的检测结果设置合适的全局页面尺寸\n * @param score\n * @param detections\n * @param outputWidth\n */\nfunction setGlobalPageSize(score: starry.Score, detections: LayoutResult[], outputWidth: number) {\n\tconst sizeRatios = detections\n\t\t.filter((s) => s && s.detection && s.detection.areas?.length)\n\t\t.map((v, k) => {\n\t\t\tconst staffInterval = Math.min(...v.detection.areas.filter((area) => area.staves?.middleRhos?.length).map((x) => x.staves.interval));\n\n\t\t\tconst sourceSize = v.sourceSize;\n\t\t\treturn {\n\t\t\t\t...v,\n\t\t\t\tindex: k,\n\t\t\t\tvw: sourceSize.width / staffInterval, // 页面宽度(逻辑单位)\n\t\t\t\thwr: sourceSize.height / sourceSize.width, // 页面高宽比\n\t\t\t};\n\t\t});\n\n\tif (!sizeRatios.length) {\n\t\tthrow new Error('empty result');\n\t}\n\n\tconst maxVW = sizeRatios.sort((a, b) => b.vw - a.vw)[0];\n\tconst maxAspect = Math.max(...sizeRatios.map((r) => r.hwr));\n\n\tscore.unitSize = outputWidth / maxVW.vw;\n\n\t// 页面显示尺寸\n\tscore.pageSize = {\n\t\twidth: outputWidth,\n\t\theight: outputWidth * maxAspect,\n\t};\n}\n\nconst batchTask = (fn: () => Promise) => fn();\nconst concurrencyTask = (fns: (() => Promise)[]) => Promise.all(fns.map((fn) => fn()));\n\nconst shootStaffImage = async (\n\tsystem: starry.System,\n\tstaffIndex: number,\n\t{ paddingLeft = 0, scaling = 1, spec }: { paddingLeft?: number; scaling?: number; spec: { viewportHeight: number; viewportUnit: number } }\n): Promise => {\n\tif (!system || !system.backgroundImage) return null;\n\n\tconst staff = system.staves[staffIndex];\n\tif (!staff) return null;\n\n\tconst middleUnits = spec.viewportHeight / spec.viewportUnit / 2;\n\n\tconst width = system.imagePosition.width * spec.viewportUnit;\n\tconst height = system.imagePosition.height * spec.viewportUnit;\n\tconst x = system.imagePosition.x * spec.viewportUnit + paddingLeft;\n\tconst y = (system.imagePosition.y - (staff.top + staff.staffY - middleUnits)) * spec.viewportUnit;\n\n\tconst canvas = new Canvas(Math.round(width + x) * scaling, spec.viewportHeight * scaling);\n\tconst context = canvas.getContext('2d');\n\tcontext.fillStyle = 'white';\n\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\tcontext.drawImage(await loadImage(system.backgroundImage), x * scaling, y * scaling, width * scaling, height * scaling);\n\n\treturn canvas;\n\t// .substr(22);\t// remove the prefix of 'data:image/png;base64,'\n};\n\n/**\n * 根据布局检测结果进行截图\n * @param score\n * @param pageCanvas\n * @param page\n * @param detection\n */\nasync function shootImageByDetection({\n\tpage,\n\tscore,\n\tpageCanvas,\n}: {\n\tscore: starry.Score;\n\tpage: starry.Page;\n\tpageCanvas: Canvas; // 原始图片绘制好的canvas\n}) {\n\tif (!page?.layout?.areas?.length) {\n\t\treturn null;\n\t}\n\n\tpage.width = score.pageSize.width / score.unitSize;\n\tpage.height = score.pageSize.height / score.unitSize;\n\n\tconst correctCanvas = new Canvas(pageCanvas.width, pageCanvas.height);\n\tconst ctx = correctCanvas.getContext('2d');\n\n\tctx.save();\n\n\tconst { width, height } = correctCanvas;\n\tconst [a, b, c, d] = page.source.matrix;\n\n\tctx.setTransform(a, b, c, d, (-1 / 2) * width + (1 / 2) * a * width + (1 / 2) * b * height, (-1 / 2) * height + (1 / 2) * c * width + (1 / 2) * d * height);\n\n\tctx.drawImage(pageCanvas, 0, 0);\n\n\tctx.restore();\n\n\tconst interval = page.source.interval;\n\n\tpage.layout.areas.map((area, systemIndex) => {\n\t\tconsole.assert(area.staves?.middleRhos?.length, '[shootImageByDetection] empty area:', area);\n\n\t\tconst data = ctx.getImageData(area.x, area.y, area.width, area.height);\n\n\t\tconst canvas = new Canvas(area.width, area.height);\n\n\t\tconst context = canvas.getContext('2d');\n\t\t// context.rotate(-area.staves.theta);\n\t\tcontext.putImageData(data, 0, 0);\n\n\t\tconst detection = area.staves;\n\t\tconst size = { width: area.width, height: area.height };\n\n\t\tconst sourceCenter = {\n\t\t\tx: pageCanvas.width / 2 / interval,\n\t\t\ty: pageCanvas.height / 2 / interval,\n\t\t};\n\n\t\tconst position = {\n\t\t\tx: (area.x + area.staves.phi1) / interval - sourceCenter.x + page.width / 2,\n\t\t\ty: area.y / interval - sourceCenter.y + page.height / 2,\n\t\t};\n\n\t\tpage.systems[systemIndex] = constructSystem({\n\t\t\tpage,\n\t\t\tbackgroundImage: canvas.toBufferSync('png'),\n\t\t\tdetection,\n\t\t\timageSize: size,\n\t\t\tposition,\n\t\t});\n\t});\n\n\treturn correctCanvas;\n}\n\nasync function shootStaffBackgroundImage({ system, staff, staffIndex }: { system: starry.System; staff: starry.Staff; staffIndex: number }) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: SEMANTIC_VISION_SPEC,\n\t});\n\n\tstaff.backgroundImage = sourceCanvas.toBufferSync('png');\n\n\t// No phi1 offset here: shootStaffImage bakes the system's barline offset\n\t// into the canvas coordinate space, so -paddingLeft is already correct.\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - SEMANTIC_VISION_SPEC.viewportHeight / 2 / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\twidth: sourceCanvas.width / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\theight: sourceCanvas.height / SEMANTIC_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的变形矫正\n * @param system\n * @param staff\n * @param staffIndex\n * @param gaugeImage\n * @param pyClients\n */\nasync function gaugeStaff({\n\tsystem,\n\tstaff,\n\tstaffIndex,\n\tgaugeImage,\n\tpyClients,\n}: {\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tstaffIndex: number;\n\tgaugeImage: Buffer;\n\tpyClients: PyClients;\n}) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: GAUGE_VISION_SPEC,\n\t\tscaling: 2,\n\t});\n\n\tconst sourceBuffer = sourceCanvas.toBufferSync('png');\n\n\tconst baseY = (system.middleY - (staff.top + staff.staffY)) * GAUGE_VISION_SPEC.viewportUnit + GAUGE_VISION_SPEC.viewportHeight / 2;\n\n\tconst { buffer, size } = await pyClients.predictScoreImages('gaugeRenderer', [sourceBuffer, gaugeImage, baseY]);\n\n\tstaff.backgroundImage = buffer;\n\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / GAUGE_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - size.height / 2 / GAUGE_VISION_SPEC.viewportUnit,\n\t\twidth: size.width / GAUGE_VISION_SPEC.viewportUnit,\n\t\theight: size.height / GAUGE_VISION_SPEC.viewportUnit,\n\t};\n\n\tstaff.maskImage = null;\n}\n\n/**\n * 单个staff的降噪\n * @param staff\n * @param staffIndex\n * @param maskImage\n */\nasync function maskStaff({ staff, staffIndex, maskImage }: { staff: starry.Staff; staffIndex: number; maskImage: Buffer }) {\n\tconst img = await loadImage(maskImage);\n\n\tstaff.maskImage = maskImage;\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / MASK_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - MASK_VISION_SPEC.viewportHeight / 2 / MASK_VISION_SPEC.viewportUnit,\n\t\twidth: img.width / MASK_VISION_SPEC.viewportUnit,\n\t\theight: img.height / MASK_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的语义识别\n * @param score\n * @param staffIndex\n * @param system\n * @param staff\n * @param graph\n */\nasync function semanticStaff({\n\tscore,\n\tstaffIndex,\n\tsystem,\n\tstaff,\n\tgraph,\n}: {\n\tscore: starry.Score;\n\tstaffIndex: number;\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tgraph: SemanticGraph;\n}) {\n\tgraph.offset(-STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit, 0);\n\n\tsystem.assignSemantics(staffIndex, graph);\n\n\tstaff.assignSemantics(graph);\n\tstaff.clearPredictedTokens();\n\n\tscore.assembleSystem(system, score.settings?.semanticConfidenceThreshold || 1);\n}\n\nfunction replacePageImages(page: starry.Page, onReplaceImageKey: (src: string) => any) {\n\tconst tasks = [\n\t\t[page.source, 'url'],\n\t\t...page.systems\n\t\t\t.map((system) => {\n\t\t\t\treturn [\n\t\t\t\t\t[system, 'backgroundImage'],\n\t\t\t\t\t...system.staves\n\t\t\t\t\t\t.map((staff) => [\n\t\t\t\t\t\t\t[staff, 'backgroundImage'],\n\t\t\t\t\t\t\t[staff, 'maskImage'],\n\t\t\t\t\t\t])\n\t\t\t\t\t\t.flat(),\n\t\t\t\t];\n\t\t\t})\n\t\t\t.flat(),\n\t];\n\n\ttasks.map(([target, key]: [any, string]) => {\n\t\ttarget[key] = onReplaceImageKey(target[key]);\n\t});\n}\n\nexport type TaskProgress = { total?: number; finished?: number };\n\nexport interface OMRPage {\n\turl: string | Buffer;\n\tkey?: string;\n\tlayout?: LayoutResult;\n\trenew?: boolean;\n\tenableGauge?: boolean;\n}\n\nexport interface ProgressState {\n\tlayout?: TaskProgress;\n\ttext?: TaskProgress;\n\tgauge?: TaskProgress;\n\tmask?: TaskProgress;\n\tsemantic?: TaskProgress;\n\tregulate?: TaskProgress;\n\tbrackets?: TaskProgress;\n}\n\nclass OMRProgress {\n\tstate: ProgressState = {};\n\n\tonChange: (evt: ProgressState) => void;\n\n\tconstructor(onChange: (evt: ProgressState) => void) {\n\t\tthis.onChange = onChange;\n\t}\n\n\tsetTotal(stage: keyof ProgressState, total: number) {\n\t\tthis.state[stage] = this.state[stage] || {\n\t\t\ttotal,\n\t\t\tfinished: 0,\n\t\t};\n\t}\n\n\tincrease(stage: keyof ProgressState, step = 1) {\n\t\tconst info: TaskProgress = this.state[stage] || {\n\t\t\tfinished: 0,\n\t\t};\n\t\tinfo.finished += step;\n\n\t\tthis.onChange(this.state);\n\t}\n}\n\ntype SourceImage = string | Buffer;\n\nexport interface OMROption {\n\toutputWidth?: number;\n\ttitle?: string; // 曲谱标题\n\tpageStore?: {\n\t\thas?: (key: string) => Promise;\n\t\tget: (key: string) => Promise;\n\t\tset: (key: string, val: string) => Promise;\n\t};\n\trenew?: boolean;\n\tprocesses?: (keyof ProgressState)[]; // 选择流程\n\tonProgress?: (progress: ProgressState) => void;\n\tonReplaceImage?: (src: SourceImage) => Promise; // 替换所有图片地址,用于上传或者格式转换\n}\n\nconst lruCache = new WeakLRUCache();\n\n// 默认store\nconst pageStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as string;\n\t},\n\tasync set(key: string, val: string) {\n\t\tlruCache.setValue(key, val);\n\t},\n};\n\n/**\n * 默认将图片转换为webp格式的base64字符串\n * @param src\n */\nconst onReplaceImage = async (src: SourceImage) => {\n\tif (src instanceof Buffer || (typeof src === 'string' && (/^https?:\\/\\//.test(src) || /^data:image\\//.test(src)))) {\n\t\tconst webpBuffer = (await convertImage(src)).buffer;\n\t\treturn `data:image/webp;base64,${webpBuffer.toString('base64')}`;\n\t}\n\n\treturn src;\n};\n\n/**\n * 识别所有图片\n * @param pyClients\n * @param images\n * @param option\n */\nexport const predictPages = async (\n\tpyClients: PyClients,\n\timages: OMRPage[],\n\toption: OMROption = { outputWidth: 1200, pageStore, onReplaceImage }\n): Promise<{ score: starry.Score; omitPages: number[]; stat: OMRStat }> => {\n\tconst logger = pyClients.logger;\n\n\toption.outputWidth = option.outputWidth || 1200;\n\toption.pageStore = option.pageStore || pageStore;\n\toption.onReplaceImage = option.onReplaceImage || onReplaceImage;\n\n\toption.processes =\n\t\tArray.isArray(option.processes) && option.processes.length > 0 ? option.processes : ['layout', 'text', 'gauge', 'mask', 'semantic', 'brackets'];\n\tconst progress: OMRProgress = new OMRProgress(option.onProgress);\n\n\tconst t0 = Date.now();\n\n\t// 预处理删除不合法区域\n\timages.forEach((image) => {\n\t\tif (image.layout?.detection) {\n\t\t\timage.layout.detection.areas = image.layout.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t\t} else {\n\t\t\tdelete image.layout;\n\t\t}\n\t});\n\n\tconst score = new starry.Score({\n\t\ttitle: option?.title,\n\t\tstavesCount: 2,\n\t\tpaperOptions: {\n\t\t\traggedLast: true,\n\t\t\traggedLastBottom: true,\n\t\t},\n\t\theaders: {},\n\t\tinstrumentDict: {},\n\t\tsettings: {\n\t\t\tenabledGauge: option.processes.includes('gauge'),\n\t\t\tsemanticConfidenceThreshold: 1,\n\t\t},\n\t});\n\n\tlogger.info(`[predictor]: download_source_images-${images.length}`);\n\n\t// 原始拍摄图\n\tconst originalImages: Image[] = await Promise.all(images.map((img) => loadImage(img.url as any)));\n\n\tlogger.info(`[predictor]: source_images_downloaded-${images.length}`);\n\n\t//const INPUT_IMAGE_WIDTH = images.filter((x) => x?.layout?.interval)?.[0]?.layout?.sourceSize?.width;\n\n\t/******************************* 布局识别 start *************************/\n\t// 输入给布局检测的图\n\tconst pageCanvasList: Canvas[] = originalImages.map((img, index) => scaleForLayout(img, images[index]!.layout?.sourceSize?.width ?? img.width));\n\n\tprogress.setTotal('layout', originalImages.length);\n\tprogress.setTotal('text', originalImages.length);\n\n\tconst detections = await Promise.all(\n\t\tpageCanvasList.map(async (cvs, key) => {\n\t\t\tif (!images[key].layout) return (await pyClients.predictScoreImages('layout', [cvs.toBufferSync('png')]))?.[0];\n\n\t\t\t// reinforce layout from front-end if no gauge\n\t\t\tif (!images[key].enableGauge && images[key]?.layout?.detection?.areas?.length)\n\t\t\t\treturn (await pyClients.predictScoreImages('layout$reinforce', [cvs.toBufferSync('png')], [images[key].layout]))?.[0];\n\n\t\t\treturn images[key].layout;\n\t\t})\n\t);\n\n\tdetections.forEach((page) => {\n\t\tpage.detection.areas = page.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t});\n\n\tconst imageURLMap = new Map();\n\tconst collectImage = async (source: SourceImage): Promise => {\n\t\tconst url = await option.onReplaceImage(source);\n\t\timageURLMap.set(source, url);\n\t};\n\n\t// 根据所有页面的宽高比决定全局显示尺寸\n\tsetGlobalPageSize(score, detections, option.outputWidth);\n\n\tasync function createPage(detect, pageIndex) {\n\t\tconst { url, key, layout, enableGauge } = images[pageIndex];\n\n\t\tconst pageKey = sha1(JSON.stringify({ key: key || url, layout, enableGauge }));\n\n\t\tconst cachedPageJson = await option.pageStore.get(pageKey);\n\n\t\tconst omit = !option.renew && ((cachedPageJson && !images[pageIndex].renew) || !detect.detection.areas?.length);\n\n\t\tconst page = (score.pages[pageIndex] =\n\t\t\tomit && cachedPageJson\n\t\t\t\t? starry.recoverJSON(cachedPageJson, starry)\n\t\t\t\t: new starry.Page({\n\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\tname: key || (typeof url === 'string' && /https?:\\/\\//.test(url) ? url : null),\n\t\t\t\t\t\t\tsize: 0,\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\tcrop: {\n\t\t\t\t\t\t\t\tunit: '%',\n\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\t\theight: 100,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdimensions: detect.sourceSize,\n\t\t\t\t\t\t\tmatrix: [Math.cos(detect.theta), -Math.sin(detect.theta), Math.sin(detect.theta), Math.cos(detect.theta), 0, 0],\n\t\t\t\t\t\t\tinterval: detect.interval,\n\t\t\t\t\t\t\tneedGauge: images[pageIndex].enableGauge,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: detect.detection,\n\t\t\t\t }));\n\n\t\tconst correctCanvas = omit\n\t\t\t? null\n\t\t\t: await shootImageByDetection({\n\t\t\t\t\tscore,\n\t\t\t\t\tpage,\n\t\t\t\t\tpageCanvas: pageCanvasList[pageIndex],\n\t\t\t });\n\n\t\tprogress.increase('layout');\n\n\t\treturn {\n\t\t\tpage,\n\t\t\tomit,\n\t\t\thash: pageKey,\n\t\t\tcorrectCanvas,\n\t\t};\n\t}\n\n\tconst systemsCount = detections.reduce((acc, x) => acc + (x.detection.areas?.length ?? 0), 0);\n\tconst stavesCount = detections.reduce((acc, x) => acc + (x.detection.areas?.reduce?.((a, y) => a + (y.staves?.middleRhos?.length ?? 0), 0) ?? 0), 0);\n\n\tprogress.setTotal('gauge', stavesCount);\n\tprogress.setTotal('mask', stavesCount);\n\tprogress.setTotal('semantic', stavesCount);\n\tprogress.setTotal('brackets', systemsCount);\n\n\tconst allTasks = [];\n\n\tconst omitPages = [];\n\n\tconst t1 = Date.now();\n\n\tlet n_page = 0;\n\n\tfor (const pageIndex of detections.keys()) {\n\t\tconst pageTasks = [];\n\n\t\tconst { page, correctCanvas, omit, hash } = await createPage(detections[pageIndex], pageIndex);\n\n\t\tpageTasks.push(collectImage(page.source.url));\n\t\tpageTasks.push(...page.systems.map((system) => collectImage(system.backgroundImage)));\n\n\t\tlogger.info(`[predictor]: check_cache_pageIndex-${pageIndex} omit: ${omit}`);\n\t\tif (omit) {\n\t\t\tomitPages.push(pageIndex);\n\t\t} else {\n\t\t\tconst staves = page.systems\n\t\t\t\t.map((system, systemIndex) => system.staves.map((staff, staffIndex) => ({ pageIndex, systemIndex, staffIndex, page, system, staff })))\n\t\t\t\t.flat(1);\n\n\t\t\tawait concurrencyTask([\n\t\t\t\t/******************************* 括号检测 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('brackets')) return;\n\n\t\t\t\t\tconst detection = page.layout;\n\t\t\t\t\tconst interval = page.source.interval;\n\n\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\tconst bracketImages = page.systems.map((system, systemIndex) => {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tstaves: { middleRhos, phi1 },\n\t\t\t\t\t\t} = detection.areas[systemIndex];\n\n\t\t\t\t\t\tconst topMid = middleRhos[0];\n\t\t\t\t\t\tconst bottomMid = middleRhos[middleRhos.length - 1];\n\n\t\t\t\t\t\tconst sourceRect = {\n\t\t\t\t\t\t\tx: x + phi1 - 4 * interval,\n\t\t\t\t\t\t\ty: y + topMid - 4 * interval,\n\t\t\t\t\t\t\twidth: 8 * interval,\n\t\t\t\t\t\t\theight: bottomMid - topMid + 8 * interval,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst OUTPUT_INTERVAL = 8;\n\n\t\t\t\t\t\tconst canvas = new Canvas(OUTPUT_INTERVAL * 8, (sourceRect.height / interval) * OUTPUT_INTERVAL);\n\n\t\t\t\t\t\tconst context = canvas.getContext('2d');\n\t\t\t\t\t\tcontext.drawImage(correctCanvas, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height, 0, 0, canvas.width, canvas.height);\n\n\t\t\t\t\t\t// console.log(pageIndex, systemIndex, JSON.stringify(sourceRect), correctCanvas.width, correctCanvas.height)\n\t\t\t\t\t\t// const pctx = canvas.getContext('2d')\n\t\t\t\t\t\t// pctx.strokeStyle = 'red'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(255, 0, 0, 0.2)'\n\t\t\t\t\t\t// pctx.fillRect(sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height)\n\t\t\t\t\t\t// const area = detections[pageIndex].detection.areas[systemIndex]\n\t\t\t\t\t\t// pctx.strokeStyle = 'green'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(0, 255, 0, 0.1)'\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// require('fs').writeFile(`test--system-${systemIndex}.png`, canvas.toBufferSync('png'), () => {})\n\t\t\t\t\t\t// require('fs-extra').writeFile(`test--brackets-${pageIndex}-${systemIndex}.png`, canvas.toBufferSync('png'))\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\tbuffer: canvas.toBufferSync('png'),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\tlogger.info(`[predictor]: brackets js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\tconst bracketsRes = await pyClients.predictScoreImages('brackets', { buffers: bracketImages.map((x) => x.buffer) });\n\t\t\t\t\tprogress.increase('brackets', bracketImages.length);\n\n\t\t\t\t\tbracketImages.forEach(({ system }, index) => {\n\t\t\t\t\t\tif (bracketsRes[index]) {\n\t\t\t\t\t\t\tsystem.bracketsAppearance = bracketsRes[index];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t/******************************* 括号检测 end *************************/\n\n\t\t\t\t/******************************* 文本识别 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('text')) return;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t// await require('fs-extra').writeFile(`test--text-location-${pageIndex}.png`, correctCanvas.toBufferSync('png'))\n\t\t\t\t\t\tconst bufferForText = correctCanvas.toBufferSync('png');\n\n\t\t\t\t\t\tconst resultLoc = await pyClients.predictScoreImages('textLoc', [bufferForText]);\n\n\t\t\t\t\t\tconst location = resultLoc[0].filter((box) => box.score > 0);\n\n\t\t\t\t\t\tif (location.length > 0) {\n\t\t\t\t\t\t\tconst [resultOCR] = await pyClients.predictScoreImages('textOcr', {\n\t\t\t\t\t\t\t\tbuffers: [bufferForText],\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tpage.assignTexts(resultOCR.areas, resultOCR.imageSize);\n\t\t\t\t\t\t\tpage.assemble();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlogger.info(`[predictor]: text js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\tprogress.increase('text');\n\n\t\t\t\t\t\tif (!option.title) {\n\t\t\t\t\t\t\tconst coverTexts: {\n\t\t\t\t\t\t\t\tconfidence: number;\n\t\t\t\t\t\t\t\tfontSize: number;\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\ttext: string;\n\t\t\t\t\t\t\t\ttextType: 'Title' | 'Author';\n\t\t\t\t\t\t\t\ttype: starry.TokenType;\n\t\t\t\t\t\t\t\twidth_: number;\n\t\t\t\t\t\t\t\tx: number;\n\t\t\t\t\t\t\t\ty: number;\n\t\t\t\t\t\t\t}[] = score.pages[0].tokens as any;\n\n\t\t\t\t\t\t\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\t\t\t\t\t\t\tconst [titleToken] = coverTexts\n\t\t\t\t\t\t\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t\t\t\t\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\t\t\t\t\t\t\tif (titleToken) {\n\t\t\t\t\t\t\t\t\tscore.title = titleToken.text;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tlogger.error(`[predictor]: text js [pageIndex-${pageIndex}] ${JSON.stringify(err)}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t/******************************* 文本识别 end *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\t/******************************* 变形矫正 start *************************/\n\t\t\t\t\tawait batchTask(async () => {\n\t\t\t\t\t\tconst disableGauge = !option.processes.includes('gauge') || images[pageIndex].enableGauge === false;\n\n\t\t\t\t\t\tif (!disableGauge) {\n\t\t\t\t\t\t\tconst gaugeRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'gauge',\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tstaves.map(async ({ staffIndex, system }) => {\n\t\t\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\t\t\t\t\t\t\t\t\t\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\t\t\t\t\t\t\t\t\t\tspec: GAUGE_VISION_SPEC,\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js shoot [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\t\t\treturn sourceCanvas.toBufferSync('png');\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { system, staff, pageIndex, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] start..`);\n\t\t\t\t\t\t\t\tawait gaugeStaff({\n\t\t\t\t\t\t\t\t\tpyClients,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgaugeImage: gaugeRes[index].image,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\tprogress.increase('gauge');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (const [_, { system, staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tawait shootStaffBackgroundImage({\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t/******************************* 变形矫正 end *************************/\n\n\t\t\t\t\tawait concurrencyTask([\n\t\t\t\t\t\t/******************************* 降噪 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('mask')) return;\n\n\t\t\t\t\t\t\tconst maskRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'mask',\n\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait maskStaff({\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tmaskImage: maskRes[index].image,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: mask js [page-${pageIndex}, ${index}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\t\t\t\t\t\t\t\tprogress.increase('mask');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.maskImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 降噪 end *************************/\n\n\t\t\t\t\t\t/******************************* 语义识别 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('semantic')) return;\n\n\t\t\t\t\t\t\tconst semanticRes = starry.recoverJSON(\n\t\t\t\t\t\t\t\tawait pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t\t'semantic',\n\t\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstarry\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tstaves.forEach(({ system }) => system.clearTokens());\n\n\t\t\t\t\t\t\tfor (const [index, { staffIndex, system, staff }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait semanticStaff({\n\t\t\t\t\t\t\t\t\tscore,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgraph: semanticRes[index],\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t\t`[predictor]: semantic js [page-${pageIndex}, system-${system.index}, staff-${staff.index}] duration: ${\n\t\t\t\t\t\t\t\t\t\tDate.now() - startTime\n\t\t\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tprogress.increase('semantic');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 语义识别 end *************************/\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\t++n_page;\n\t\t}\n\n\t\tallTasks.push(\n\t\t\tPromise.all(pageTasks).then(() => {\n\t\t\t\treplacePageImages(page, (src) => imageURLMap.get(src));\n\t\t\t\tlogger.info(`[predictor]: pageStore set: [${pageIndex}]`);\n\t\t\t\treturn option.pageStore.set(hash, JSON.stringify(page));\n\t\t\t})\n\t\t);\n\t}\n\n\tconst t2 = Date.now();\n\n\tawait Promise.all(allTasks);\n\n\tlogger.info(`[predictor]: inferenceStaffLayout: ${score.title}, [${score.systems.length}]`);\n\n\tscore.inferenceStaffLayout();\n\n\tlogger.info(`[predictor]: done: ${score.title}`);\n\n\t// correct semantic ids\n\tscore.assemble();\n\n\tconst t3 = Date.now();\n\n\treturn {\n\t\tscore,\n\t\tomitPages,\n\t\tstat: {\n\t\t\tcost: t3 - t0,\n\t\t\tpagesCost: t2 - t1,\n\t\t\tpages: n_page,\n\t\t},\n\t};\n};\n\nexport const abstractOMRStats = (stats: OMRStat[]): OMRSummary => {\n\tconst { costTotal, pagesCostTotal, pagesTotal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcostTotal: sum.costTotal + stat.cost,\n\t\t\tpagesCostTotal: sum.pagesCostTotal + stat.pagesCost,\n\t\t\tpagesTotal: sum.pagesTotal + stat.pages,\n\t\t}),\n\t\t{ costTotal: 0, pagesCostTotal: 0, pagesTotal: 0 }\n\t);\n\n\treturn {\n\t\tcostTotal,\n\t\tcostPerPage: pagesTotal ? costTotal / pagesTotal : null,\n\t\tpagesTotal,\n\t\tscoreN: stats.length,\n\t};\n};\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-23T11:20:50.919Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../../src/isomorphic/converter';\nexport * as starry from '../../../src/starry';\nexport * from '../../libs/predictors';\nexport * from '../../libs/predictPages';\nexport * from '../../libs/regulation';\nexport * from '../../libs/store';\nexport * from '../../libs/util';\n"],"names":["PageLayoutMethod","TextType","SemanticType","globalThis","btoa","str","Buffer","from","toString","atob","NOTEHEAD_WIDTHS","NoteheadS0","NoteheadS1","NoteheadS2","glyphCenters","x","zero","y","one","two","three","four","five","six","seven","eight","nine","f","m","p","r","s","z","SYSTEM_SEMANTIC_TYPES","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","CONFLICTION_GROUPS","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","STAMP_SEMANTICS","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","n","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","hashSemanticPoint","systemIndex","staffIndex","point","Math","round","source","semantic","hash","sha1","array","slice","id","String","fromCharCode","substring","hashPageSemanticPoint","pageName","TokenType","tt","TokenTypes","Object","values","TokenClefs","filter","t","test","TokenTimesigs","TokenTimesigsC","TokenTimesigsN","TokenOctshifts","TokenNumbers","TokenAccidentals","TokenNoteheads","TokenBareNoteheads","TokenDirectionalNoteheads","TokenRests","TokenFlags","TokenVolta","TokenDynamics","TokenScripts","TokenPedals","TokenDots","DotDot","TokenArcs","SlurBegin","SlurEnd","TieBegin","TieEnd","TokenBeams","TokenWedges","TokenAccessories","TokenDirectionless","TokenGlyphs","TOKEN_Y_ROUND","forEach","TOKEN_Y_FIXED","Token","constructor","data","assign","this","typeId","type","split","reverse","isPredicted","Number","isFinite","confidence","isNotehead","includes","isContexted","isAccessory","division","NoteheadS1stemU","NoteheadS1stemD","NoteheadS2stemU","NoteheadS2stemD","Flag3","Flag4","Flag5","Flag6","Flag7","Flag8","dots","direction","width","left","right","voiceIndices","voice","Array","floor","log2","fill","reduce","indices","_","i","className","TextToken","super","width_","value","recoverJSON","json","classDict","JSON","stringify","parse","__prototype","Class","fields","deepCopy","o","dict","Map","get","isArray","result","set","e","push","entries","key","setPrototypeOf","__proto__","SimpleClass","toJSON","cls","serializedKeys","blackKeys","keys","pick","LayoutType","spreadMeasureSeq","seq","Ordinary","concat","map","layout","serialize","seqToCode","withBrackets","code","inRange","length","SingleMLayout","measure","undefined","BlockMLayout","trimSeq","seq2","sub","seq3","fromSeq","VoltaMLayout","bodySeq","body","alternates","alternateSeqs","lastAlternateSeq","Conservative","Full","times","Once","console","warn","join","ABAMLayout","seqA","main","seqA_","seqB","rest","parser","k","v","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","trace","yy","symbols_","error","start_symbol","measure_layout","EOF","index_wise_measure_layout","segment_wise_measure_layout","iw_sequence","iw_item","range","UNSIGNED","single","iw_block_item","iw_volta","iw_aba","iw_block","iw_optional_alternates","iw_alternates","sw_sequence","sw_item","segment","sw_block_item","sw_volta","sw_aba","sw_block","sw_optional_alternates","sw_alternates","$accept","$end","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","root","blockLayout","singleLayout","voltaBlock","abaBlock","table","defaultActions","parseError","recoverable","Error","input","self","stack","vstack","lstack","args","call","arguments","lexer","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","symbol","state","action","len","newState","expected","lex","token","yyval","errStr","showPosition","text","match","line","loc","first_line","last_line","first_column","last_column","apply","items","item","start","end","index","speard","it","serializeSeq","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","unput","lines","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","rules","_currentRules","flex","begin","condition","popState","pop","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","INITIAL","inclusive","Parser","grammar$1","StaffGroupType","StaffConjunctionType","singleGroup","Default","staff","BOUNDS_TO_GROUPTYPE","Brace","Bracket","Square","CONJUNCTIONS_MAP","Blank","Solid","Dashed","randomB64","random","makeGroupsFromRaw","parent","remains","word","shift","bound","group","level","subs","grand","every","groupHead","groupTail","groupDict","groupKey","StaffLayout","raw","ids","Set","prefix","name","has","makeUniqueName","add","staffIds","conjunctions","conjunction","leftBounds","rightBounds","groups","indexOf","maskCache","stavesCount","partGroups","grands","g","some","standaloneGroups","collect","conjunctionBetween","upStaff","downStaff","con","min","makeMaskLayout","mask","nextId","partialMaskCode","bits","withIds","staffStatus","status","joinGroup","subStr","pair","Boolean","partial","inner","bracketCode","$Vb","$Vc","staff_layout","seq_id","seq_br","seq_con","bound_left","bound_right","bound_lefts","bound_rights","ID","seq_bl","Seq","tip","bl","br","Item","grammar","parseCode","DummyLogger","debug","groupCollapsed","groupEnd","info","assert","roundNumber","precision","Infinity","max","distance2D","p1","p2","dx","dy","sqrt","gcd","a","b","isInteger","frac","numerator","denominator","reducedFraction","d","printFraction","fractionMul","fraction","segmentPoints","points","axis","sorted","sort","seg","lastP","segments","filterWeekPoints","rests","find","weeks","solveOverlapping","pset","xClusters","clusters","ps","delete","GROUP_N_TO_PITCH","noteToPitch","note","alter","gn","mod7","argmax","WHOLE_DURATION","AccessoryDirection","GraceType","StemBeam","TremoloLink","GlissandoStyle","ArpeggioStyle","Term","EventTerm","space","tick","duration","term","accessories","pivotX","alignedTick","grace","mainDuration","multiplier","timeWarp","divider","prior","fullMeasureRest","tipX","tipY","ys","tremoloCatcher","tremoloLink","Catcher","scaleChord","pitches","pitch","zeroHolder","ContextType","ContextedTerm","Token.TokenClefs","tokenType","Clef","KeyAcc","Acc","Token.TokenOctshifts","OctaveShift","Token.TokenTimesigsC","TimeSignatureC","Token.TokenTimesigsN","TimeSignatureN","staffLevel","clef","KeyNatural","KeySharp","KeyFlat","octaveShift","OctaveShift8va","OctaveShift8vb","number","MarkTerm","MUSIC_NOTES","fromCodePoint","TempoTerm","fromNumeralText","findIndex","beats","durationMagnitude","den","dot","bpm","isValid","GlyphTerm","TextTerm","LyricTerm","CommandTerm","ChordmodeTerm","BEAM_STATUS","Open","Continue","Close","evaluateMeasure","regulated","eventMap","events","validEvents","voices","flat","warpedEvents","warps","irregularWarps","fractionalWarp","tickSum","eventN","event","tickOverlapped","complicatedTimewarp","size","literalDuration","timeSignature","sigDuration","doubtfulTimesig","inVoiceEvents","corruptedVoiceEvent","overranged","over","overDuration","graceInVoice","graceN","graceDominant","irregularTick","beamBroken","broken","ei","evi","beam","spaceTime","surplusTime","eventDuration","sum","nullEvents","predisposition","fakeP","fakeEvents","voiceRugged","es","tickTwist","tickRatesInStaves","rate","perfect","estimatedDuration","fine","expectDuration","durationRate","qualityScore","patched","spaceLoss","tanh","irregularWarpsN","SemanticGraph","fromPoints","graph","getLayer","getConfidentLayer","threshold","getSystemPoints","getStaffPoints","scale","factor","transform","matrix","extension","y1","y2","scaling","height","MEASURE_SEMANTICS","GraceNotehead","CrescendoBegin","CrescendoEnd","DecrescendoBegin","DecrescendoEnd","TremoloLeft","TremoloRight","TremoloMiddle","STAFF_LINED_SEMANTICS","LINED_INTERVAL_SEMANTICS","NOTEHEAD_FOR_STEM_SEMANTICS","KEYACC_CANDIDATE_SEMANTICS","NOTEHEAD_TABLE","up","down","REST_SEMANTICS","TOKEN_TO_STEMBEAM","TEXT_TYPE_ALIAS","Alter1","Alternation1","Alter2","Alternation2","noteheadsXPivot","xs","mean","x1","x2","Measure","tokens","antiTokens","barTypes","noteheads","n1","n2","chordRects","nh","nulN","nhmap","hh","nhs","top","bottom","nh0","stemX","stemDirection","timeWarped","additionalLines","chords","getChords","chord","ceil","flags","beams","chordRcs","rect","noteIds","c1","c2","accs","flagRange","nearbyFlags","flag","beamToken","nearbyDots","getRests","dotValue","getEvents","e1","e2","getContexts","assignAccessoriesOnEvents","accessory","relatedEvents","owner","d1","d2","Down","Up","sortEvents","arpeggio","Grace","tremolsLs","tremolsRs","tremolsMs","tevents","stemL","stemR","tm","te","tremolo","tl","Pitcher","tr","assignFeaturesOnEvents","semantics","dotPs","beamLs","beamMs","beamRs","gracePs","tremoloRs","stems","vline_Stem","s0","s1","s2","cx","divisions","ss","i_flags","f1","f2","i_dots","dots2","bs","u_stems","stem","d_stems","stemDirections","graces","tremolos","feature","Staff","measureCount","measureBars","staffY","measures","endX","noteRange","rearrangeMeasures","reassignTokens","assignSemantics","assemble","system","logger","qualifiedSemantics","TempoNotehead","tempoNh","splice","antiP","displacementSemantics","appendPoint","semanticTop","semanticBottom","rootNhs","nhOffsetX","attachedHeads","topDist","bottomDist","antiPoint","nearStems","appendFlags","dotLines","sy","keyaccs","acc","oct","voltaDots","VoltaLeft","VoltaRight","voltaGroups","lined","interval","signs","fixedY","roundY","holder","mainFlag","downward","tailY","count","clearTokens","clearPredictedTokens","System","HEAD_WIDTH","segmentLength","staves","arrangePosition","sidBlackList","sidWhiteList","staffTop","staffBottom","staffPositions","radius","staffMask","staffMaskChanged","prev","positions","tidyMeasureBars","b1","b2","restWidth","connectionLine","staffHead","staffTail","middleY","timeSignatureOnHead","getStaffArray","si","on","getMarksInMeasure","measureIndex","textType","TempoNumeral","headMeasureIndex","columns","rows","contexts","voltaBegin","voltaEnd","alternative","mi","timeSigs","row","marks","ts","column","lastColumn","break","getEventsFunctional","ev","processors","useXMap","localRows","xMap","groupMap","tickGroup","proc","oy","bars","lastX","barColumns","bar","intensity","barXs","prevStaff","nextStaff","newPoint","appendToken","fontSize","overlap","Page","systems","assignTexts","areas","imageHeight","imageWidth","dimensions","area","cy","rp","score","rect_Text","theta","textFeature","feature_dict","textAnnotations","sysXs","middleX","indent","Text","textFeasure","Title","Author","PageMargin","Other","Chord","MeasureNumber","Instrument","TextualMark","Times","sx","SemanticElementType","TIME_SIG_DENOMINATORS","fromEntries","TIME_SIG_NUMERATORS","et","ELEMENT_TOKEN_NAMES","BOS","NoteheadGrace","NOTEHEAD_BASE_DIVISION","NOTEHEAD_ELEMENT_TYPES","REST_ELEMENT_TYPES","BEAM_ELEMENT_TYPES","NOTE_ELEMENT_TYPES","SOURCE_ELEMENT_TYPES","TARGET_ELEMENT_TYPES","ROOT_NOTE_ELEMENT_TYPES","ELEMENT_TO_STEMBEAM","metaElem","BOS_ELEMENT","fractionToElems","SemanticCluster","elementToJSON","elem","sourceMask","elements","targetMask","vMask","compactMatrixH","matrixH","j","expandMatrixByMasks","compactMatrixV","_matrixV","matrixV","expandMatrixByMaskTriu","groupsV","matrixFromGroups","found","mapMatrix","x2i","i2x","xi","mergeOverlapping","overlaps","overlappedNoteheads","ij","ii","nh1","nh2","masks","stemMasks","stemNotes","s0s","subS0Masks","stemMap","stemId","i1","i2","prevId","linkings","roots","parentMasks","parentId","rootId","subNotes","dotGroups","tipRange","beamElem","iter","gen","maskSrc","maskTar","src","tar","groupIds","id1","id2","ImplicitType","Stream","buffer","Uint8Array","position","eof","read","readString","readInt32","readInt16","readInt8","signed","readVarInt","OStream","write","writeInt32","writeInt16","writeInt8","writeVarInt","getBuffer","getArrayBuffer","charCodeAt","MIDI","parseMidiData","readChunk","stream","lastEventTypeByte","readEvent","deltaTime","eventTypeByte","param1","eventType","channel","subtype","noteNumber","velocity","amount","controllerType","programNumber","subtypeByte","microsecondsPerBeat","hourByte","frameRate","hour","sec","frame","subframe","pow","metronome","thirtyseconds","headerChunk","headerStream","formatType","trackCount","timeDivision","ticksPerBeat","header","tracks","trackChunk","trackStream","encodeMidiFile","writeChunk","writeEvent","frameByte","MidiSequence","midiToSequence","midiFile","trackStates","beatsPerMinute","nextEventIndex","ticksToNextEvent","getNextEvent","nextEventTrack","nextEvent","ticksToEvent","track","midiEvent","processNext","secondsToGenerate","time","processEvents","trimSequence","clear","fixOverlapNotes","noteMap","overlapMap","swaps","leapIndex","swap","front","back","offEvent","leapEvent","tempo","require$$0","PedalControllerTypes","Notation","parseMidi","fixOverlap","channelStatus","pedalStatus","pedals","channels","millisecondsPerBeat","barIndex","keyRange","correspondences","rawTicks","ticks","tempos","rawEvents","deltaTicks","deltaBeats","startTick","low","statusIndex","endTick","finger","high","pedalType","captures","fingers","isNaN","log","endTime","meta","notes","pitchMap","beatInfos","lastInfo","beatIndex","entry","findChordBySoftindex","softIndex","averageTempo","tickRange","to","endtick","span","ticksToTime","next_tempo_index","tempo_index","timeToTicks","tickRangeToTimeRange","scaleTempo","headTempo","MusicNotation","animationDelay","Promise","resolve","requestAnimationFrame","MidiPlayer_1","MidiPlayer","midiData","cacheSpan","onMidi","onPlayFinish","onTurnCursor","notation","isPlaying","progressTime","startTime","performance","now","cursorTurnDelta","dispose","progressTicks","play","nextFrame","currentEventIndex","backturn","eventTime","pause","turnCursor","config","CostStepAttenuation","SkipDeep","PriorDistanceSigmoidFactor","PriorValueSigmoidFactor","SkipCost","LagOffsetCost","LeadOffsetCost","ZeroOffsetCost","RelocationThreshold","Config","require$$1","Node","s_note","c_note","_prev","_totalCost","_value","cacheDirty","ci","rootSi","cost","skip","updateCache","totalCost","selfCost","deep","path","node","dump","evaluatePrev","evaluatePrevCost","bias","priorByOffset","distance","navigator","Navigator","criterion","sample","getCursorOffset","outOfPage","bestNode","fineCursor","breakingSI","zeroNode","relocationThreshold","step","prevNote","prevNode","cursors","nullLength","nullSteps","cursor","resetCursor","breaking","deltaSi","fromIndex","toIndex","backPrior","cursorOffset","relocationTendency","normalizeInterval","HEART_BEAT","makeNoteSoftIndex","softIndexFactor","lastNote","Matcher","makeMatchNodes","targetList","targetNote","genNotationContext","runNavigation","async","onStep","Symbol","for","EXCLUDE_MIDI_EVENT_SUBTYPES","encodeToMIDIData","unclosedNoteDuration","msToTicks","Date","process","env","VUE_APP_BUILD_TIME","toDateString","MidiUtils","sliceMidi","midi","trackDeltaToAbs","lastTick","trackAbsToDelta","sliceTrack","encodeToMIDI","musicWidgets","require$$2","require$$3","require$$4","COMMON_NOTE_FIELDS","MetaNotation","fromAbsoluteNotes","measureHeads","__","mnotes","mn","field","idTrackMap","performAbsoluteNotes","abNotes","withRestTied","tied","overlapped","staffTrack","contextIndex","implicitType","chordPosition","priorNote","ripe","trackTickBias","headMeasure","trackNames","idSet","toAbsoluteNotes","measureIndices","measureTick","measureNotes","mnote","toPerformingNotation","WHOLE_DURATION_MAGNITUDE","toPerformingMIDI","trackList","zeroTick","measureEvents","mevent","eventPriority","subnote","finalTick","toPerformingNotationWithEvents","assignNotationNoteDataFromEvents","setTempo","midiNotation","noteId","CryptoJS","exports","crypto","window","msCrypto","global","require","err","cryptoSecureRandomInt","getRandomValues","Uint32Array","randomBytes","readInt32LE","F","obj","C","C_lib","lib","Base","extend","overrides","mixIn","init","$super","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","parseInt","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","processedWords","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","_doProcessBlock","Hasher","cfg","_doReset","update","messageUpdate","finalize","_doFinalize","_createHelper","hasher","message","_createHmacHelper","C_algo","HMAC","algo","H","K","isPrime","sqrtN","getFractionalBits","nPrime","W","SHA256","_hash","M","h","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","t1","nBitsTotal","nBitsLeft","HmacSHA256","factory","HashVector","fromHash","byte","fromString","_SHA256","uwords","word_len","fromWords","vectors","toHash","bit","vec","crop","ODDS","odds","odd","cosHashes","hash1","hash2","xor","xorHashes","i2hex","Sylvester","Matrix","setElements","I","els","dup","isSquare","cols","toRightTriangular","np","determinant","det","isSingular","augment","T","nj","inverse","divisor","new_element","inverse_elements","DURATION_MULTIPLIER","floatToTimeWarp","floatToFrac","ActionType","EventElementType","SimplePolicy","Action","P","PLACE","V","order","VERTICAL","HORIZONTAL","StageMatrix","fromNode","stages","actions","stage1","stage","stage2","stagedEvents","endHs","endHP","hActions","pendingHeads","eid","pathOf","target","findDoublePath","paths","reducePath","toEquations","eventCount","equations","path1","path2","equation","PathNode","last","like","constructStages","unshift","newStage","constructConstraints","factors","constraints","inbalancesConstraints","ones","fixed","inbalances","constraint","solveEquations","xis","equationMap","conflicted","squareLines","restLines","candidateLines","sl","invert","mat","matrixInverse","solution","optimallySolve","shrinkMap","shrinkness","released","releasedIds","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","se","estages","solveStages","changed","measureDuration","outEI","deduce","quota","access","actionAccessing","closed","credits","children","expand","possibility","child","branches","appendBranch","branch","Solver","event0","measureShrinkness","expectedDuration","xSpan","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","partialFrac","weight","staffAlters","eventsXOrder","tickTwists","dt","atan2","PI","EventCluster","regular","CHORD","REST","fake","fullMeasure","grant","annotation","endElem","EOS","assignPrediction","prediction","pe","EventClusterSet","trimIrregular","ir","cluster","PatchMeasure","staffN","basics","basic","computeMeasureTicks","roundX","constructXMap","eventGroups","divisionVector","dotsVector","computeMeasureVoices","eventSet","pushEvent","e0","EquationPolicy","INVERT_SQRT2","FINE_BEAMS","bb","solveStaffGroup","staffGroup","EquationSolver.Solver","estiamteMeasure","allEvents","tickEstimated","pR","eventStartX","staffGroupMap","staffGroups","ievents","startX","hp","erf","staffDecay","exp","yDecay","dtx","nR","regulateMeasure","solver","mp","resultEvents","solutionStat","solverCredits","solverTimes","regulateMeasureWithRectification","rectification","re","priority","tickN","SpartitoMeasure","reorderEvents","staffYsFull","rx","ry","yi","yis","intX","intY","originalRegulationHash","regulationHash","postRegulate","keySignature","timeSignatureChanged","validRegulated","tickMap","endEvent","tickToX","tickRates","rates","tickRatesInGroups","gevents","groupIndex","twists","empty","hasIllEvent","voicedEventIds","brief","regulationHash0","regulationHashes","featureWords","invalid","uys","melodies","rhythm","barType","typeEntris","partialDuration","signatureDuration","updateRoundX","graceEvents","staffMap","smap","oldEvent","emap","preTick","graceIds","totalDuration","warp","solveGraceEvents","catchers","pitchers","catcher","candidates","pitcher","catcherId","pi","solveTremoloPairs","updateContextTick","terms","t2","asSolution","ref","refEvent","applySolution","cleanupRegulation","regulateTest","regulateSimple","regulateEquations","regulate","policy","createPatch","createClusters","trueEventIds","idx","staffIndices","staffY0","staffYs","staffYn","headY","backgroundImages","url","applyClusters","id_max","is","srcId","tarId","emptyVoiceFromStaffMeasure","chiefVoice","timeSigNumeric","contextedTerms","markingTiesInVoice","event1","p0","tying","si0","si1","Spartito","solidMeasureCount","measureIndexMapping","headBPM","tempoMark","mark","measureLayoutCode","ms","vb","ve","leftSign","rightSign","nextI","mm","nextVBI","pms","lastVEI","lastMI","dumpEvaluations","rectifyTimeSignatures","mis","newTimeSignature","measuresToFix","originTimeSignature","regularD","numerators","countings","peakCount","bestCounting","best","reducedN","makeVoiceStaves","voiceCount","nextMeasure","ctxList","maxEventX","deferred","leftStaves","lastEvent","tailEvent","tailStaff","pageBreak","headStaff","sd","trait","staffToGroup","voiceTraits","vector","v1","v2","leftVoices","voiceTrait","vs","consistencies","voiceIndex","m1","m2","staffVoiceIndices","vi","mode","removeEmptyMeasuresInVoicesStaves","perform","tokenMap","staffToChannel","voiceChannels","hasTempo","nextTick","events0","voice0","part","pitchValue","performByEstimation","noteTick","featureHash","measureWords","levels","meaures","vecY","vecMelody","vecRhythm","featureHashHex","featureHashBigInt","BigInt","assignMeasureNumbers","discard","measureNumber","mod12","ALTER_NAMES","StaffContext","keyAlters","alters","timeSigNumSet","timeSigDenSet","doubtingTimesig","change","yToNote","partialTimeSignature","resetMeasure","resetSystem","noteToY","pitchToNote","preferredAlter","gp","alteredGp","naturalNote","alterValue","keyAlterValue","pitchToY","alterOnNote","yToPitch","yToPitchName","bitsToMask","Score","version","layoutTemplate","staffLayoutCode","pages","page","spartito","upgradeScoreData","headers","instrumentDict","pageSize","unitSize","maxStavesCount","imageKeys","backgroundImage","maskImage","breakSystemIndices","systemCount","staffLayout","staffLayout.parseCode","semanticHash","eventSystemsToTermStaves","eventSystems","termStaves","sys","context","startEvent","processStaffContext","resetPageLayout","parameters","newCenter","offsetX","offsetY","getMeasure","localIndex","getRawCluster","systemY0","y0","getRawClusters","makeSpartito","ri","esys","patch","patches","makeMusicSheet","voiceStaves","title","paperOptions","measureLayout","getMeasureLayout","findPoint","sid","pageIndex","getMeasureSemantics","sy1","sy2","makeTimewiseGraph","store","getTokenMap","confidenceThreshold","append","assembleSystem","markVoices","vis","replaceImageKeys","all","then","inferenceStaffLayout","staffTotal","completeSystems","bracketsAppearance","candidateCodes","codeCounting","maxCount","connectedCode","lastSys","search","code1","startsWith","assignBackgroundForMeasure","imagePosition","original","blackoutFakeNotes","scope","inScope","fakeIds","voicedIds","fakeIdSet","blackIds","measureLayout.parseCode","splitToSingleScoresGen","startSysIndices","templateScore","topology","startSysIndex","endSysIndex","sysInRange","newScore","SubScoreSystem","SubScorePage","splitToSingleScores","EditableEvent","agent","Proxy","ownKeys","getOwnPropertyDescriptor","enumerable","configurable","EditableMeasure","syncVoiceToEvents","syncVoiceFromEvents","makeMIDI","subEvents","midiEvents","BeadType","DIVISION_NAMES","SPACE_LOSS_WEIGHT","POSSIBILITY_LOW_BOUNDARY","STEM_DIRECTION_OPTIONS","BEAM_OPTIONS","saveClusterState","BeadNode","accessCount","nextBranch","possibilities","currentElem","elemIndex","branchID","ni","Pass","Division","Dots","repeat","picker","ptFactor","evaluateCluster","pretentiousness","selfEval","element","residue","fatalError","predictCluster","evaluation","estimateElementDuration","eos","lastOrder","voiceN","scales","referenceScale","nearScale","tickSpan","twist","tickMSE","tickErr","mse","spaceDuration","solveCluster","stopLoss","suc0","bestEvaluation","bestState","restoreClusterState","fixedEvents","pendingEvents","near","stemDirectionVector","beamVector","solveMeasure","quotaMax","quotaFactor","worstLoss","durations","solutionEvents","tipElem","tickSet","glimpseMeasure","resetSignatureForDoubtfulOnly","estimateMeasure","StemTip","StemHead","rect_Lyric","SemanticClusterSet","vocab","converts","connection","SUPPORT_CLEF_TYPES","starry.TokenType","tokenToText","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","Function","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","eventsModule","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","existing","warning","newListener","emit","warned","w","onceWrapper","fired","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","destructPromise","timeout","rs","rj","setTimeout","defineProperty","RangeError","setMaxListeners","getMaxListeners","doError","er","listeners","addListener","prependListener","prependOnceListener","list","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","AsyncQueue","working","tasks","_digest","taskFn","payload","addTask","task","promise","ZeroClient","queue","socket","Request","sendTimeout","receiveTimeout","connect","__request","retryTimes","req","send","pack","receive","close","request","method","kwargs","args_","kwargs_","msg","opt","unpack","PyProcessor","scriptPath","retryCount","retryDelay","port","freePort","getPortPromise","stopPort","defaultsDeep","pyShell","PythonShell","stdout","isBuffer","inherits_browserModule","ctor","superCtor","super_","writable","TempCtor","util","inherits","inheritsModule","getOwnPropertyDescriptors","descriptors","formatRegExp","format","isString","objects","inspect","isNull","isObject","deprecate","fn","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","primitive","simple","isNumber","formatPrimitive","visibleKeys","val","arrayToHash","isError","formatError","isRegExp","RegExp","isDate","output","base","braces","toUTCString","formatProperty","formatArray","cur","reduceToSingleString","desc","ar","objectToString","pad","debuglog","NODE_DEBUG","toUpperCase","pid","bold","italic","underline","white","grey","black","blue","cyan","green","magenta","red","yellow","special","boolean","null","string","date","regexp","isNullOrUndefined","isSymbol","isPrimitive","months","prop","getHours","getMinutes","getSeconds","getDate","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","promisify","promiseResolve","promiseReject","defineProperties","custom","callbackify","callbackified","maybeCb","rej","getPort","base64map","crypt","rotl","rotr","endian","bytes","bytesToWords","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","base64","triplet","charAt","base64ToBytes","imod4","cryptModule","charenc","utf8","stringToBytes","bin","bytesToString","charenc_1","api","digestbytes","H0","H1","H2","H3","H4","asBytes","asString","_blocksize","_digestsize","sha1Module","constructSystem","detection","imageSize","systemWidth","phi2","phi1","systemHeight","lastSystem","stavesTops","middleRhos","starry.Staff","starry.System","convertImage","maxHeight","quality","buf","got","responseType","decompress","https","rejectUnauthorized","toBuffer","webpBuffer","sharp","resize","fit","withoutEnlargement","toFormat","filename","SparkMD5","ArrayBuffer","OffscreenCanvas","Canvas","Image","STAFF_PADDING_LEFT","GAUGE_VISION_SPEC","viewportHeight","viewportUnit","MASK_VISION_SPEC","SEMANTIC_VISION_SPEC","concurrencyTask","fns","shootStaffImage","paddingLeft","spec","middleUnits","canvas","getContext","fillStyle","fillRect","drawImage","loadImage","shootStaffBackgroundImage","sourceCanvas","toBufferSync","gaugeStaff","gaugeImage","pyClients","sourceBuffer","baseY","predictScoreImages","maskStaff","img","semanticStaff","settings","semanticConfidenceThreshold","replacePageImages","onReplaceImageKey","OMRProgress","onChange","setTotal","total","finished","increase","lruCache","WeakLRUCache","pageStore","getValue","setValue","onReplaceImage","multinomial_1","pvals","looseVector","ns","looseEvent","MeasureRectification","roll","DefaultSolutionStore","PendingCondition","solveMeasureRecords","records","onUpdate","pendingCondition","NotFine","pass","onProgress","pendingRecords","ErrorOnly","Imperfect","isPending","record","current","starry.beadSolver.solveMeasure","starry.evaluateMeasure","better","remaining","RECTIFICATION_SEARCH_ITERATIONS","BASE_QUOTA_FACTOR","RECTIFICATION_QUOTA_FACTOR","computeQuota","limit","solveMeasures","solutionStore","ignoreCache","cached","solved","stat","computed","solveMeasuresWithRectifications","n_rec","rec","default","stale","genMeasureRectifications","testMeasure","doSimpleRegulate","PyClients","clients","getClient","client","option","checkHost","warmup","clientType","res","by_buffer","stats","costTotal","pagesCostTotal","pagesTotal","pagesCost","costPerPage","scoreN","pickerCost","measureN","timeN","tryTimes","costPerMeasure","costPerTime","issue","fatal","baseCostTotal","topoCostTotal","baseMeasures","topoMeasures","baseCost","topoCost","baseCostPerMeasure","topoCostPerMeasure","baseComputed","baseSolved","topoSolved","topoIssue","topoFatal","onSaveIssueMeasure","t0","issueMeasures","results","cs","solvedIndices","errorIndices","n_issues","doRegulateWithTopo","maskImages","hasMaskImage","scoreJson","idsMap","idsXMap","idStaffIndexMap","coverTexts","subtitles","subtitle","authors","composer","bgWidth","bgHeight","l1","ls","parts","partTemplates","measureXs","partIndex","template","staffIndexBase","paddedStaves","chordColumns","staffIndexInPart","noteIndex","measureStartX","elems","firstX","innerId","lastFifths","clefs","pt","fifths","lineStaves","systemTopStaff","systemBottomStaff","systemTopStaffY","systemBottomStaffY","lastPartLastStaff","partStaves","staffs","details","hide","visibleStaves","partTopStaff","partBottomStaff","partTopStaffY","partBottomStaffY","distances","imgs","spartitoMeasure","parti","mIndices","sortedParts","midiJson","measInfo","ent","idNoteMap","beatsCurrent","beatsUnitCurrent","mIndex","beatsUnit","evt","note_ticks","measureInfos","beatUnit","mergedTracks","trackIndex","program","lhPattern","rhPattern","instrus","hand","handStaves","trackToSplit","newTracks","stave","rightHandTrack","leftHandTrack","transformedTracks","onEvent","measureTickMap","numId","newEvent","elem_ids","meas_start_tick","images","outputWidth","processes","progress","image","starry.Score","raggedLast","raggedLastBottom","enabledGauge","originalImages","pageCanvasList","scaleForLayout","sourceSize","detections","cvs","enableGauge","imageURLMap","collectImage","createPage","detect","pageKey","cachedPageJson","omit","renew","starry.recoverJSON","starry","starry.Page","unit","cos","sin","needGauge","correctCanvas","pageCanvas","save","setTransform","restore","getImageData","putImageData","sourceCenter","shootImageByDetection","sizeRatios","staffInterval","vw","hwr","maxVW","maxAspect","setGlobalPageSize","systemsCount","allTasks","omitPages","n_page","pageTasks","bracketImages","topMid","bottomMid","sourceRect","OUTPUT_INTERVAL","bracketsRes","buffers","bufferForText","location","box","resultOCR","titleToken","gaugeRes","maskRes","semanticRes","t3","pickers","freshOnly","onPassStart","baseQuality","n_seq","starry.beadSolver.estimateMeasure","counting","toFixed","totalMeasures","computeRemaining","wrappedOnProgress","starry.EditableMeasure","saveMeasure","solutions","batchGet","originMeasure"],"mappings":"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D,EAAa6D,YACb7D,EAAakoB,eACbloB,EAAamoB,eACbnoB,EAAayF,aACbzF,EAAayC,KACbzC,EAAa0C,IACb1C,EAAa2C,IACb3C,EAAa4C,MACb5C,EAAa6C,KACb7C,EAAa8C,KACb9C,EAAa+C,IACb/C,EAAagD,MACbhD,EAAaiD,MACbjD,EAAakD,KACblD,EAAaiF,WACbjF,EAAakF,SACblF,EAAamF,eACbnF,EAAaoF,QACbpF,EAAaqF,YACbrF,EAAaS,WACbT,EAAaU,WACbV,EAAaW,WACbX,EAAasL,gBACbtL,EAAauL,gBACbvL,EAAawL,gBACbxL,EAAayL,gBACbzL,EAAa8D,MACb9D,EAAa+D,MACb/D,EAAagE,MACbhE,EAAaiE,MACbjE,EAAakE,MACblE,EAAamE,MACbnE,EAAaoE,MACbpE,EAAaqE,OACbrE,EAAasE,OACbtE,EAAawJ,UACbxJ,EAAayJ,QACbzJ,EAAagF,IACbhF,EAAayB,EACbzB,EAAa2B,EACb3B,EAAa0B,EACb1B,EAAa0F,EACb1F,EAAa4B,EACb5B,EAAa6B,EACb7B,EAAa8B,EACb9B,EAAa2F,cACb3F,EAAa4F,mBACb5F,EAAa6F,eACb7F,EAAa8F,eACb9F,EAAamD,oBACbnD,EAAa+F,WACb/F,EAAagG,YACbhG,EAAaiG,YACbjG,EAAakG,WACblG,EAAamG,eACbnG,EAAaoG,YACbpG,EAAaqG,cACbrG,EAAasG,cACbtG,EAAauG,aACbvG,EAAawG,cACbxG,EAAayG,UACbzG,EAAa0G,SACb1G,EAAasuB,cACbtuB,EAAayE,SACbzE,EAAa2E,UACb3E,EAAa0E,aACb1E,EAAauuB,eACbvuB,EAAawuB,aACbxuB,EAAayuB,iBACbzuB,EAAa0uB,eACb1uB,EAAa2uB,YACb3uB,EAAa4uB,aACb5uB,EAAa6uB,eAGRC,GAAwB,CAC7B9uB,EAAaiF,WACbjF,EAAakF,SACblF,EAAamF,eACbnF,EAAaoF,QACbpF,EAAaqF,YACbrF,EAAaS,WACbT,EAAaU,WACbV,EAAaW,WACbX,EAAasL,gBACbtL,EAAauL,gBACbvL,EAAawL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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../../libs/browserComponents.ts","../../../src/starry/aux_/typedJSON.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/token.ts","../../../src/starry/patch.ts","../../../src/starry/term.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/interfaces.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/measureEvaluator.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/measureLayout/parser.ts","../../../src/starry/beadSolver.ts","../../../src/isomorphic/converter.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../node_modules/crypt/crypt.js","../../../node_modules/charenc/charenc.js","../../../node_modules/sha1/sha1.js","../../libs/util.ts","../../libs/predictPages.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../src/index.ts"],"sourcesContent":["globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import * as starry from '../starry';\nimport { MidiJson, ScoreJSON } from './types';\nimport { ChordColumn, Staff } from '../starry';\nimport { parseCode } from '../staffLayout';\nimport { MidiEvent } from '../performer';\n\nexport interface FindScoreResource {\n\tscoreJson: ScoreJSON;\n\tmidiJson: MidiJson;\n}\n\nconst SUPPORT_CLEF_TYPES = [starry.TokenType.ClefG, starry.TokenType.ClefF, starry.TokenType.ClefC];\n\nconst tokenToText = (token: starry.ContextedTerm) => {\n\tlet text = null;\n\tswitch (token.tokenType) {\n\t\tcase starry.TokenType.ClefG:\n\t\t\ttext = 'Treble';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefF:\n\t\t\ttext = 'Bass';\n\t\t\tbreak;\n\t\tcase starry.TokenType.ClefC:\n\t\t\tif (token.y === -1) {\n\t\t\t\ttext = 'Tenor';\n\t\t\t} else {\n\t\t\t\ttext = 'Alto';\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\treturn text;\n};\n\nexport function encodeFindResource(score: starry.Score): FindScoreResource {\n\tconst perform = score.spartito.perform();\n\tconst maskImages = score.systems.map((sy) => sy.staves.map((st) => st?.maskImage)).flat();\n\tconst hasMaskImage = maskImages.filter(Boolean).length > maskImages.length / 2;\n\n\tconst scoreJson: ScoreJSON = {} as ScoreJSON;\n\n\tconst idsMap = new Map(); // starry内部ID到find播放器id的映射\n\tconst idsXMap = new Map(); // 内部ID和元素X坐标的映射\n\tconst idStaffIndexMap = new Map(); // 内部ID和元素所属part的内部staff索引\n\n\tscoreJson.unitSize = score.unitSize;\n\n\tscoreJson.title = {\n\t\ttitle: score.title,\n\t} as any;\n\n\tconst coverTexts: {\n\t\tconfidence: number;\n\t\tfontSize: number;\n\t\tid: string;\n\t\ttext: string;\n\t\ttextType: 'Title' | 'Author';\n\t\ttype: starry.TokenType;\n\t\twidth_: number;\n\t\tx: number;\n\t\ty: number;\n\t}[] = score.pages[0].tokens as any;\n\n\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\tconst [title, ...subtitles] = coverTexts\n\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\tif (title) {\n\t\t\tscoreJson.title.title = title.text;\n\t\t\tscoreJson.title.t = { size: title.fontSize };\n\t\t}\n\n\t\tif (subtitles?.length > 0) {\n\t\t\tsubtitles.sort((a, b) => a.y - b.y);\n\t\t\tscoreJson.title.subtitle = subtitles.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.s = { size: subtitles.reduce((a, n) => a + n.fontSize, 0) / subtitles.length };\n\t\t}\n\n\t\tconst authors = coverTexts.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Author' && x.x > score.pages[0].width / 2);\n\n\t\tif (authors.length > 0) {\n\t\t\tscoreJson.title.composer = authors.map((x) => x.text).join('\\n');\n\t\t\tscoreJson.title.c = { size: authors.reduce((a, n) => a + n.fontSize, 0) / authors.length };\n\t\t}\n\t}\n\n\tscoreJson.page = {\n\t\tw: score.pages[0].width,\n\t\th: score.pages[0].height,\n\t};\n\n\tscoreJson.pages = score.pages.map((page) => {\n\t\tconst bgWidth = page.source.dimensions.width / page.source.interval;\n\t\tconst bgHeight = page.source.dimensions.height / page.source.interval;\n\n\t\tconst [a, b, c, d] = page.source.matrix;\n\n\t\treturn {\n\t\t\tsrc: page.source.url, // 本页本地图片URL\n\t\t\tw: bgWidth, // 背景图\n\t\t\th: bgHeight, // 背景图\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tl1: score.systems.indexOf(page.systems[0]), // 本页起始system编号\n\t\t\tls: page.systems.length, // 本页system数量\n\t\t\tmatrix: [\n\t\t\t\ta,\n\t\t\t\tb,\n\t\t\t\tc,\n\t\t\t\td,\n\t\t\t\t(-1 / 2) * a * bgWidth + (-1 / 2) * bgHeight * c + (1 / 2) * page.width || 0,\n\t\t\t\t(-1 / 2) * b * bgWidth + (-1 / 2) * bgHeight * d + (1 / 2) * page.height || 0,\n\t\t\t],\n\t\t};\n\t});\n\n\tscoreJson.parts = [];\n\tscoreJson.lines = [];\n\n\t// 没有降噪图就不需要这些字段\n\tif (hasMaskImage) {\n\t\tconst partTemplates = score.staffLayout.partGroups.map((p) => (p.range[0] === p.range[1] ? [p.range[0]] : p.range));\n\t\tconst tokenMap = score.getTokenMap();\n\t\tconst measureXs: number[][] = [];\n\n\t\t// partIndex: part索引,template: 当前part所包含的staff的全局索引\n\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\tconst staffIndexBase = partTemplates.slice(0, partIndex).flat().length;\n\n\t\t\tconst part: ScoreJSON['parts'][0] = {\n\t\t\t\tmeasures: [],\n\t\t\t};\n\n\t\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\t\tconst staves = system.staves.slice();\n\n\t\t\t\t// 不可见staff用null填充的staff列表\n\t\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => (!((1 << staffIndex) & system.staffMask) ? null : staves.shift()));\n\t\t\t\tconst bars = [0, ...system.measureBars];\n\n\t\t\t\t// 便历当前system下的小节\n\t\t\t\tfor (let mi = 0; mi < system.measureCount; mi++) {\n\t\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[system.headMeasureIndex + mi];\n\n\t\t\t\t\t// 如果小节被过滤\n\t\t\t\t\tif (!Number.isFinite(measureIndex)) {\n\t\t\t\t\t\tif (bars.length > mi + 1) bars[mi + 1] = bars[mi];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst chordColumns: { chord: ChordColumn; staffIndexInPart: number }[] = [];\n\n\t\t\t\t\tfor (const staffIndex of template) {\n\t\t\t\t\t\tconst staff = paddedStaves[staffIndex];\n\n\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\tchordColumns.push(...staff.measures[mi].getChords().map((chord) => ({ chord, staffIndexInPart: staffIndex - staffIndexBase })));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet noteIndex = 0;\n\n\t\t\t\t\tconst measureStartX = bars[mi]; // 小节开头相对system的x偏移\n\n\t\t\t\t\tconst measureNotes = [];\n\n\t\t\t\t\tchordColumns.forEach(({ staffIndexInPart, chord }) => {\n\t\t\t\t\t\tconst elems = [];\n\n\t\t\t\t\t\tlet firstX = chord.tip ? chord.tip.x : chord.right - chord.left / 2;\n\n\t\t\t\t\t\tchord.noteIds.forEach((noteId, key) => {\n\t\t\t\t\t\t\tconst token = tokenMap.get(noteId);\n\n\t\t\t\t\t\t\tconst innerId = `n_${partTemplates.length > 1 ? partIndex + '_' : ''}${measureIndex}_${noteIndex}`;\n\t\t\t\t\t\t\tnoteIndex++;\n\t\t\t\t\t\t\tidsMap.set(token.id, innerId);\n\t\t\t\t\t\t\tidsXMap.set(token.id, (token.left + token.right) / 2 - measureStartX);\n\t\t\t\t\t\t\tidStaffIndexMap.set(token.id, staffIndexInPart + 1);\n\n\t\t\t\t\t\t\telems.push({\n\t\t\t\t\t\t\t\tline: -chord.ys[key] * 2, // 五线中线为0,往上为正/向下为负,每半格子1个单位\n\t\t\t\t\t\t\t\tid: innerId, // n_小节号_第几个音符\n\t\t\t\t\t\t\t\t// acc: {\n\t\t\t\t\t\t\t\t// \tacc: AccType.Flat,\n\t\t\t\t\t\t\t\t// \tx: -1\n\t\t\t\t\t\t\t\t// }, // 临时升降记号及其偏移量\n\t\t\t\t\t\t\t\tstaff: staffIndexInPart + 1,\n\t\t\t\t\t\t\t\tx: (token.left + token.right) / 2 - firstX, // 当前符头相对第一个符头的偏移量\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tmeasureXs[measureIndex] = measureXs[measureIndex] || [];\n\t\t\t\t\t\tmeasureXs[measureIndex].push(firstX - measureStartX);\n\n\t\t\t\t\t\tconst events = score.spartito.measures[system.headMeasureIndex + mi].events.filter((x) =>\n\t\t\t\t\t\t\tx.noteIds.some((y) => chord.noteIds.includes(y))\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tmeasureNotes.push({\n\t\t\t\t\t\t\telems,\n\t\t\t\t\t\t\tx: firstX - measureStartX, // 本音符相对于小节开头的x偏移量\n\t\t\t\t\t\t\ttype: 2 ** chord.division, // n分音符,1为全音符\n\t\t\t\t\t\t\t...(events.some((x) => x.grace) ? { grace: {} } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tpart.measures[measureIndex] = {\n\t\t\t\t\t\tw: bars[mi + 1] - bars[mi], // 本小节宽度\n\t\t\t\t\t\tstaves: template.length, // 本part的staff个数\n\t\t\t\t\t\tnotes: measureNotes,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// 提取谱号、调号\n\t\t\tlet lastFifths = null;\n\t\t\tscore.spartito.measures.forEach((measure, i) => {\n\t\t\t\tconst measureIndex = score.spartito.measureIndexMapping[i];\n\n\t\t\t\tconst clefTokens = measure.contexts.flat().filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff));\n\t\t\t\tconst clefs = clefTokens.map((token) => {\n\t\t\t\t\tconst pt = partTemplates.find((p) => p.includes(token.staff));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\tclef: tokenToText(token),\n\t\t\t\t\t\tstaff: pt.indexOf(token.staff) + 1, // staff索引从1开始\n\t\t\t\t\t\ttick: token.tick,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tif (clefs.length > 0) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].clefs = clefs);\n\t\t\t\t}\n\n\t\t\t\tconst fifths = measure.basics.filter((x, i) => (1 << i) & measure.staffMask)[0].keySignature;\n\n\t\t\t\tif (fifths !== lastFifths) {\n\t\t\t\t\tpart.measures[measureIndex] && (part.measures[measureIndex].fifths = { fifths });\n\t\t\t\t\tlastFifths = fifths;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (part.measures.length > 0) {\n\t\t\t\tscoreJson.parts[partIndex] = part;\n\t\t\t}\n\t\t}\n\n\t\tscore.systems.forEach((system, systemIndex) => {\n\t\t\tconst lineStaves = [];\n\n\t\t\tconst systemTopStaff = system.staves[0];\n\t\t\tconst systemBottomStaff = system.staves[system.staves.length - 1];\n\n\t\t\tconst systemTopStaffY = systemTopStaff.top + systemTopStaff.staffY - 2;\n\t\t\tconst systemBottomStaffY = systemBottomStaff.top + systemBottomStaff.staffY - 2;\n\n\t\t\tconst staves = system.staves.slice();\n\n\t\t\tconst paddedStaves = partTemplates.flat().map((staffIndex) => {\n\t\t\t\tconst isEmpty = !((1 << staffIndex) & system.staffMask);\n\t\t\t\tif (isEmpty) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else {\n\t\t\t\t\treturn staves.shift();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet lastPartLastStaff = null;\n\n\t\t\tfor (const [partIndex, template] of partTemplates.entries()) {\n\t\t\t\tconst partStaves: Staff[] = template.map((staffIndex) => paddedStaves.find((s) => s?.index === staffIndex) || null);\n\n\t\t\t\tconst staffs = partStaves.map((staff, index) => [index, !staff] as [number, boolean]).filter((s) => s[1]);\n\n\t\t\t\tlet details = null;\n\t\t\t\tif (staffs.length > 0) {\n\t\t\t\t\tdetails = Object.fromEntries(staffs.map((d) => [d[0] + 1, { hide: d[1] }]));\n\t\t\t\t}\n\n\t\t\t\tlet y = 0;\n\t\t\t\tlet height = 0;\n\n\t\t\t\tconst visibleStaves = partStaves.filter((s) => !!s);\n\n\t\t\t\tif (visibleStaves.length > 0) {\n\t\t\t\t\tconst partTopStaff = visibleStaves[0];\n\t\t\t\t\tconst partBottomStaff = visibleStaves[visibleStaves.length - 1];\n\t\t\t\t\tconst partTopStaffY = partTopStaff.top + partTopStaff.staffY - 2;\n\t\t\t\t\tconst partBottomStaffY = partBottomStaff.top + partBottomStaff.staffY - 2;\n\n\t\t\t\t\ty = partTopStaffY - systemTopStaffY;\n\t\t\t\t\theight = partBottomStaffY - partTopStaffY + 4;\n\t\t\t\t}\n\n\t\t\t\tconst { list: distances, last } = partStaves.reduce(\n\t\t\t\t\t(acc, next, index) => {\n\t\t\t\t\t\tif (acc.last === null || next === null) {\n\t\t\t\t\t\t\tif (index === 0 && y > 0) {\n\t\t\t\t\t\t\t\tacc.list.push(y - 4);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacc.list.push(0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tacc.list.push(next.top + next.staffY - (acc.last.top + acc.last.staffY) - 4);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tacc.last = next || acc.last;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: lastPartLastStaff, list: [] } as { last: Staff; list: number[] }\n\t\t\t\t);\n\n\t\t\t\tlastPartLastStaff = last;\n\n\t\t\t\tconst imgs = partStaves.map((staff) => {\n\t\t\t\t\tif (staff?.maskImage) {\n\t\t\t\t\t\tconst rect = staff.imagePosition;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsrc: staff.maskImage,\n\t\t\t\t\t\t\tx: rect.x,\n\t\t\t\t\t\t\ty: system.top + staff.top + rect.y - (system.top + staff.top + staff.staffY - 2),\n\t\t\t\t\t\t\tw: rect.width,\n\t\t\t\t\t\t\th: rect.height,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t});\n\n\t\t\t\tconst spartitoMeasure = score.spartito.measures[system.headMeasureIndex];\n\t\t\t\tlineStaves.push({\n\t\t\t\t\t// parts\n\t\t\t\t\tdistances, // 两个staff间距\n\t\t\t\t\timgs,\n\t\t\t\t\ty, // 本staff相对于当前system第一线的起始y坐标\n\t\t\t\t\tstaves: template.length, // 本staff数量\n\t\t\t\t\tparti: partIndex, // 本staff所属part编号\n\t\t\t\t\theight, // 本staff高度\n\t\t\t\t\t...(details ? { details } : {}),\n\t\t\t\t\tclef: Object.fromEntries(\n\t\t\t\t\t\tscore.spartito.measures[system.headMeasureIndex]?.contexts\n\t\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t\t.filter((x) => SUPPORT_CLEF_TYPES.includes(x.tokenType) && template.includes(x.staff))\n\t\t\t\t\t\t\t.map((token) => [token.staff, tokenToText(token)])\n\t\t\t\t\t),\n\t\t\t\t\tfifths: spartitoMeasure.basics.filter((x, i) => (1 << i) & spartitoMeasure.staffMask)[0].keySignature,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst mIndices = system.measureBars\n\t\t\t\t.map((_, i) => score.spartito.measureIndexMapping[system.headMeasureIndex + i])\n\t\t\t\t.filter((x) => Number.isFinite(x));\n\n\t\t\tscoreJson.lines[systemIndex] = {\n\t\t\t\tm1: mIndices[0], // 本system起始小节编号\n\t\t\t\tm2: mIndices.length > 0 ? mIndices[mIndices.length - 1] + 1 : undefined, // 本system结尾小节编号+1\n\t\t\t\tx: system.left, // 本system左侧小节线x坐标\n\t\t\t\ty: system.top + systemTopStaffY, // 本system左侧小节线y坐标\n\t\t\t\tw: system.measureBars[system.measureBars.length - 1], // 本system宽度\n\t\t\t\th: systemBottomStaffY - systemTopStaffY + 4, // 本system高度\n\t\t\t\tlineStaves,\n\t\t\t};\n\t\t});\n\n\t\tconst map = { 0: 'default', 1: 'brace', 2: 'bracket', 3: 'square' };\n\n\t\tconst staffLayout = parseCode(score.staffLayoutCode);\n\t\tconst sortedParts = staffLayout.partGroups\n\t\t\t.map((x) => {\n\t\t\t\treturn {\n\t\t\t\t\tsort: x.range[0],\n\t\t\t\t\tpart: x,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((a, b) => a.sort - b.sort)\n\t\t\t.map((x) => x.part);\n\n\t\tscoreJson.groups = staffLayout.groups\n\t\t\t.filter((x) => x.group.type !== 0)\n\t\t\t.map((part, key) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: map[part.group.type] as any,\n\t\t\t\t\tp1: sortedParts.findIndex((x) => x.range.includes(part.range[0])),\n\t\t\t\t\tp2: sortedParts.findIndex((x) => x.range.includes(part.range[part.range.length - 1])),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter((x) => x.type !== 'default');\n\t}\n\n\tif (perform) {\n\t\tscoreJson.measInfo = perform.notation.measures.map((measure, measureIndex) => {\n\t\t\tconst map = new Map();\n\t\t\tmeasure.notes.forEach((n) => {\n\t\t\t\tmap.set(n.tick, [...(map.get(n.tick) || []), idsXMap.get(n.id)]);\n\t\t\t});\n\n\t\t\t// 找出每个tick对应的第一个音符的中心点的x\n\t\t\treturn Array.from(map.entries())\n\t\t\t\t.sort((a, b) => +a[0] - b[0])\n\t\t\t\t.reduce(\n\t\t\t\t\t(acc, ent, key) => {\n\t\t\t\t\t\tconst val = ent[1].find((x) => x > acc.last) || ent[1][0];\n\t\t\t\t\t\tacc.list.push(val);\n\t\t\t\t\t\tacc.last = val;\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t},\n\t\t\t\t\t{ last: null, list: [] }\n\t\t\t\t)\n\t\t\t\t.list.filter(Number.isFinite);\n\t\t});\n\t}\n\n\t/******************************* 生成 midiJson *************************************/\n\n\tlet midiJson: MidiJson;\n\n\tif (perform) {\n\t\tmidiJson = {} as MidiJson;\n\n\t\tconst idNoteMap = new Map();\n\n\t\tlet beatsCurrent;\n\t\tlet beatsUnitCurrent;\n\t\tperform.notation.measures.forEach((measure, mIndex) => {\n\t\t\tconst { numerator: beats, denominator: beatsUnit } = measure.timeSignature;\n\n\t\t\tif (!midiJson.beats && !midiJson.beatsUnit) {\n\t\t\t\tmidiJson.beats = beats;\n\t\t\t\tmidiJson.beatsUnit = beatsUnit;\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\t\t\t}\n\n\t\t\tmidiJson.beatInfos = midiJson.beatInfos || [];\n\n\t\t\tif (beatsCurrent !== beats || beatsUnitCurrent !== beatsUnit) {\n\t\t\t\tbeatsCurrent = beats;\n\t\t\t\tbeatsUnitCurrent = beatsUnit;\n\n\t\t\t\tmidiJson.beatInfos.push({\n\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\tbeats,\n\t\t\t\t\tbeatsUnit,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tmidiJson.tempos = midiJson.tempos || [];\n\n\t\t\tmeasure.events.forEach((evt) => {\n\t\t\t\tif (evt.data.type === 'meta' && evt.data.subtype === 'setTempo') {\n\t\t\t\t\tmidiJson.tempos.push({\n\t\t\t\t\t\ttick: measure.tick,\n\t\t\t\t\t\ttempo: evt.data.microsecondsPerBeat,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tmidiJson.measures = perform.notation.measures.reduce((acc, measure, index) => {\n\t\t\tconst note_ticks = Array.from(new Set(measure.notes.map((x) => x.tick))).sort((a, b) => a - b);\n\n\t\t\tmeasure.notes.forEach((x) => {\n\t\t\t\tidNoteMap.set(x.id, note_ticks.indexOf(x.tick));\n\t\t\t});\n\n\t\t\tacc[measure.tick] = {\n\t\t\t\tmeasure: index, // 小节编号\n\t\t\t\tduration: measure.duration, // 小节时值\n\t\t\t\tnote_ticks, // 本小节每列的tick\n\t\t\t};\n\n\t\t\treturn acc;\n\t\t}, {});\n\n\t\tmidiJson.measureInfos = perform.notation.measures.map((measure, key) => ({\n\t\t\tnumber: String(key + 1), // 小节编号\n\t\t\tfifths: measure.keySignature, // 调号 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7\n\t\t\tbeats: measure.timeSignature.numerator, // 拍号分子\n\t\t\tbeatUnit: measure.timeSignature.denominator, // 拍号分母\n\t\t}));\n\n\t\tconst midi = perform.notation.toPerformingMIDI(perform.notation.measures.map((_, key) => key + 1));\n\n\t\tconst tracks = midi.tracks as unknown as (MidiEvent & { duration: number })[][];\n\n\t\tconst { partGroups } = score.staffLayout;\n\n\t\tlet mergedTracks = tracks.map((track, trackIndex) => {\n\t\t\tconst key = partGroups[trackIndex].key;\n\n\t\t\tlet program: number;\n\n\t\t\tswitch (key) {\n\t\t\t\tcase 'vi':\n\t\t\t\tcase 'vi1':\n\t\t\t\tcase 'vi2':\n\t\t\t\t\tprogram = 40; // 小提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'viola':\n\t\t\t\t\tprogram = 42; // 中提琴\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'vo':\n\t\t\t\t\tprogram = 55; // 合成人声\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'basso':\n\t\t\t\t\tprogram = 71; // 大管乐器\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // 大钢琴\n\t\t\t\t\tprogram = 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tprogram, // 音色:0-127\n\t\t\t\tchannel: trackIndex, // 通道:0-15\n\t\t\t\tname: score.instrumentDict[key] ?? 'Piano', // 轨道名称\n\t\t\t\ttrack,\n\t\t\t};\n\t\t});\n\n\t\t// 找出大谱表所在track(声部),根据分手条件拆分为左右手\n\t\tif (partGroups.some((g) => g.group.grand)) {\n\t\t\tconst lhPattern = /l\\.?h\\.?|左手|left hand/i;\n\t\t\tconst rhPattern = /r\\.?h\\.?|右手|right hand/i;\n\t\t\tconst instrus = Object.entries(score.instrumentDict)\n\t\t\t\t.filter(([key, value]) => lhPattern.test(value) || rhPattern.test(value))\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\thand: lhPattern.test(value) ? 'left' : 'right',\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\tlet handStaves: number[] = null;\n\t\t\tlet partIndex;\n\n\t\t\t// 标记了左右手\n\t\t\tif (instrus.length === 2 && instrus[0].hand !== instrus[1].hand) {\n\t\t\t\tconst left = instrus.find((x) => x.hand === 'left');\n\t\t\t\tconst right = instrus.find((x) => x.hand === 'right');\n\t\t\t\thandStaves = [score.staffLayout.staffIds.findIndex((x) => x === right?.key), score.staffLayout.staffIds.findIndex((x) => x === left?.key)];\n\n\t\t\t\tpartIndex = partGroups.findIndex((g) => g.range[0] <= Math.min(...handStaves) && g.range[1] >= Math.max(...handStaves));\n\t\t\t}\n\n\t\t\tif (Number.isFinite(partIndex) && partIndex > -1) {\n\t\t\t\tconst trackToSplit = mergedTracks[partIndex];\n\t\t\t\tconst newTracks: any[][] = []; // Array.from(new Set(firstTrack.track.map(x => x.channel))).sort((a, b) => a - b)\n\n\t\t\t\ttrackToSplit.track.forEach((evt) => {\n\t\t\t\t\tif (Number.isFinite(evt.staff)) {\n\t\t\t\t\t\tif (!newTracks[evt.staff]) {\n\t\t\t\t\t\t\tnewTracks[evt.staff] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnewTracks[evt.staff].push(evt);\n\t\t\t\t\t}\n\t\t\t\t\tif (evt.type === 'meta') {\n\t\t\t\t\t\tnewTracks.forEach((stave) => {\n\t\t\t\t\t\t\tstave.push(evt);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmergedTracks.splice(partIndex, 1, newTracks.filter(Boolean).map((track) => ({ ...trackToSplit, track })) as any);\n\n\t\t\t\tmergedTracks = mergedTracks.flat();\n\n\t\t\t\t// 指定左右手track\n\t\t\t\tmidiJson.rightHandTrack = handStaves[0];\n\t\t\t\tmidiJson.leftHandTrack = handStaves[1];\n\t\t\t} else {\n\t\t\t\tmergedTracks.sort((a, b) => (a === mergedTracks[partIndex] ? -1 : 0));\n\t\t\t}\n\t\t}\n\n\t\tmidiJson.tracks = mergedTracks.map(({ program, channel, name }) => ({ program, channel, name }));\n\n\t\tconst transformedTracks = mergedTracks.map(({ track }) => {\n\t\t\tconst pitchMap: Map = new Map();\n\n\t\t\treturn track.map((evt) => {\n\t\t\t\tif (evt.subtype === 'noteOn') {\n\t\t\t\t\tpitchMap.set(evt.noteNumber, evt);\n\t\t\t\t}\n\n\t\t\t\tif (evt.subtype === 'noteOff') {\n\t\t\t\t\tconst onEvent = pitchMap.get(evt.noteNumber);\n\t\t\t\t\tif (onEvent?.noteNumber === evt.noteNumber) {\n\t\t\t\t\t\tonEvent.duration = evt.ticks - onEvent.ticks;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn evt;\n\t\t\t});\n\t\t});\n\n\t\tconst measureTickMap = new Map(Object.entries(midiJson.measures).map(([tick, m]) => [m.measure, +tick]));\n\n\t\tmidiJson.events = (transformedTracks as (MidiEvent & { duration: number; numId?: string; ticks: number })[][])\n\t\t\t.map((track, trackIndex) => {\n\t\t\t\treturn track\n\t\t\t\t\t.filter((x) => x.type === 'channel')\n\t\t\t\t\t.map((evt) => {\n\t\t\t\t\t\tif (evt?.ids?.[0]) {\n\t\t\t\t\t\t\tevt.numId = idsMap.get(evt.ids[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet newEvent: [number, number, number] = [0, 0, 0];\n\n\t\t\t\t\t\tswitch (evt.subtype) {\n\t\t\t\t\t\t\tcase 'noteOn':\n\t\t\t\t\t\t\t\tnewEvent = [0x90 | evt.channel, evt.noteNumber, evt.velocity];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteOff':\n\t\t\t\t\t\t\t\tnewEvent = [0x80 | evt.channel, evt.noteNumber, evt.velocity ? evt.velocity : 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'noteAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xa0 | evt.channel, evt.noteNumber, evt.amount];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'controller':\n\t\t\t\t\t\t\t\tnewEvent = [0xb0 | evt.channel, evt.controllerType, evt.value];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'programChange':\n\t\t\t\t\t\t\t\tnewEvent = [0xc0 | evt.channel, evt.programNumber, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'channelAftertouch':\n\t\t\t\t\t\t\t\tnewEvent = [0xd0 | evt.channel, evt.amount, 0];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'pitchBend':\n\t\t\t\t\t\t\t\tnewEvent = [0xe0 | evt.channel, evt.value & 0xff, (evt.value >> 7) & 0xff];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tthrow new Error('unhandled event subtype:' + evt.subtype);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...(evt.subtype === 'noteOn' ? { id: idsMap.get(evt?.ids?.[0]) } : {}), // 对应符头的id\n\t\t\t\t\t\t\ttick: evt.ticks,\n\t\t\t\t\t\t\tchannel: evt.channel,\n\t\t\t\t\t\t\tduration: evt.duration, // 只有note on事件有时值\n\t\t\t\t\t\t\ttrack: trackIndex, // evt.staffTrack, // 所属track\n\t\t\t\t\t\t\tevent: newEvent, // [event, note, velocity]\n\t\t\t\t\t\t\telem_ids: evt?.ids.map((id) => idsMap.get(id)),\n\t\t\t\t\t\t\tmeasure: evt.measure - 1, // 所属小节编号\n\t\t\t\t\t\t\tmeas_start_tick: measureTickMap.get(evt.measure - 1), // 所属小节起始tick\n\t\t\t\t\t\t\tstaff: idStaffIndexMap.get(evt.ids[0]),\n\t\t\t\t\t\t\tnote: idNoteMap.get(evt.ids[0]),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1)\n\t\t\t.sort((a, b) => {\n\t\t\t\tfor (const field of ['tick', 'measure', 'track']) {\n\t\t\t\t\tif (a[field] !== b[field]) {\n\t\t\t\t\t\treturn a[field] - b[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\t}\n\n\treturn {\n\t\tscoreJson,\n\t\tmidiJson,\n\t};\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","(function() {\n var base64map\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n crypt = {\n // Bit-wise rotation left\n rotl: function(n, b) {\n return (n << b) | (n >>> (32 - b));\n },\n\n // Bit-wise rotation right\n rotr: function(n, b) {\n return (n << (32 - b)) | (n >>> b);\n },\n\n // Swap big-endian to little-endian and vice versa\n endian: function(n) {\n // If number given, swap endian\n if (n.constructor == Number) {\n return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n }\n\n // Else, assume array and swap all items\n for (var i = 0; i < n.length; i++)\n n[i] = crypt.endian(n[i]);\n return n;\n },\n\n // Generate an array of any length of random bytes\n randomBytes: function(n) {\n for (var bytes = []; n > 0; n--)\n bytes.push(Math.floor(Math.random() * 256));\n return bytes;\n },\n\n // Convert a byte array to big-endian 32-bit words\n bytesToWords: function(bytes) {\n for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n words[b >>> 5] |= bytes[i] << (24 - b % 32);\n return words;\n },\n\n // Convert big-endian 32-bit words to a byte array\n wordsToBytes: function(words) {\n for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a hex string\n bytesToHex: function(bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n }\n return hex.join('');\n },\n\n // Convert a hex string to a byte array\n hexToBytes: function(hex) {\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n },\n\n // Convert a byte array to a base-64 string\n bytesToBase64: function(bytes) {\n for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n for (var j = 0; j < 4; j++)\n if (i * 8 + j * 6 <= bytes.length * 8)\n base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n else\n base64.push('=');\n }\n return base64.join('');\n },\n\n // Convert a base-64 string to a byte array\n base64ToBytes: function(base64) {\n // Remove non-base-64 characters\n base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n imod4 = ++i % 4) {\n if (imod4 == 0) continue;\n bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n }\n return bytes;\n }\n };\n\n module.exports = crypt;\n})();\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","(function() {\n var crypt = require('crypt'),\n utf8 = require('charenc').utf8,\n bin = require('charenc').bin,\n\n // The core\n sha1 = function (message) {\n // Convert to byte array\n if (message.constructor == String)\n message = utf8.stringToBytes(message);\n else if (typeof Buffer !== 'undefined' && typeof Buffer.isBuffer == 'function' && Buffer.isBuffer(message))\n message = Array.prototype.slice.call(message, 0);\n else if (!Array.isArray(message))\n message = message.toString();\n\n // otherwise assume byte array\n\n var m = crypt.bytesToWords(message),\n l = message.length * 8,\n w = [],\n H0 = 1732584193,\n H1 = -271733879,\n H2 = -1732584194,\n H3 = 271733878,\n H4 = -1009589776;\n\n // Padding\n m[l >> 5] |= 0x80 << (24 - l % 32);\n m[((l + 64 >>> 9) << 4) + 15] = l;\n\n for (var i = 0; i < m.length; i += 16) {\n var a = H0,\n b = H1,\n c = H2,\n d = H3,\n e = H4;\n\n for (var j = 0; j < 80; j++) {\n\n if (j < 16)\n w[j] = m[i + j];\n else {\n var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];\n w[j] = (n << 1) | (n >>> 31);\n }\n\n var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (\n j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :\n j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :\n j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :\n (H1 ^ H2 ^ H3) - 899497514);\n\n H4 = H3;\n H3 = H2;\n H2 = (H1 << 30) | (H1 >>> 2);\n H1 = H0;\n H0 = t;\n }\n\n H0 += a;\n H1 += b;\n H2 += c;\n H3 += d;\n H4 += e;\n }\n\n return [H0, H1, H2, H3, H4];\n },\n\n // Public API\n api = function (message, options) {\n var digestbytes = crypt.wordsToBytes(sha1(message));\n return options && options.asBytes ? digestbytes :\n options && options.asString ? bin.bytesToString(digestbytes) :\n crypt.bytesToHex(digestbytes);\n };\n\n api._blocksize = 16;\n api._digestsize = 20;\n\n module.exports = api;\n})();\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","import sha1 from 'sha1';\nimport { Canvas, Image, loadImage } from 'skia-canvas';\nimport { WeakLRUCache } from 'weak-lru-cache';\nimport * as starry from '../../src/starry';\nimport { SemanticGraph } from '../../src/starry';\nimport { LayoutResult, PyClients } from './predictors';\nimport { constructSystem, convertImage } from './util';\n\nglobalThis.OffscreenCanvas = (globalThis as any).OffscreenCanvas || Canvas;\n(globalThis as any).Image = (globalThis as any).Image || Image;\nglobalThis.btoa = globalThis.btoa || ((str: string) => Buffer.from(str, 'binary').toString('base64'));\n\nconst STAFF_PADDING_LEFT = 32;\n\nconst MAX_PAGE_WIDTH = 1200;\n\nconst GAUGE_VISION_SPEC = {\n\tviewportHeight: 256,\n\tviewportUnit: 8,\n};\n\nconst MASK_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\nconst SEMANTIC_VISION_SPEC = {\n\tviewportHeight: 192,\n\tviewportUnit: 8,\n};\n\ninterface OMRStat {\n\tcost: number; // in milliseconds\n\tpagesCost: number; // in milliseconds\n\tpages: number;\n}\n\ninterface OMRSummary {\n\tcostTotal: number; // in milliseconds\n\tcostPerPage: number; // in milliseconds\n\tpagesTotal: number;\n\tscoreN: number;\n}\n\n/**\n * 为布局识别的图片标准化处理\n * @param image\n * @param width\n */\nfunction scaleForLayout(image: Image, width: number): Canvas {\n\tlet height = (image.height / image.width) * width;\n\n\tconst canvas = new Canvas(width, height);\n\tconst ctx = canvas.getContext('2d');\n\n\tctx.drawImage(image, 0, 0, width, (width * image.height) / image.width);\n\n\treturn canvas;\n}\n\n/**\n * 根据所有图像的检测结果设置合适的全局页面尺寸\n * @param score\n * @param detections\n * @param outputWidth\n */\nfunction setGlobalPageSize(score: starry.Score, detections: LayoutResult[], outputWidth: number) {\n\tconst sizeRatios = detections\n\t\t.filter((s) => s && s.detection && s.detection.areas?.length)\n\t\t.map((v, k) => {\n\t\t\tconst staffInterval = Math.min(...v.detection.areas.filter((area) => area.staves?.middleRhos?.length).map((x) => x.staves.interval));\n\n\t\t\tconst sourceSize = v.sourceSize;\n\t\t\treturn {\n\t\t\t\t...v,\n\t\t\t\tindex: k,\n\t\t\t\tvw: sourceSize.width / staffInterval, // 页面宽度(逻辑单位)\n\t\t\t\thwr: sourceSize.height / sourceSize.width, // 页面高宽比\n\t\t\t};\n\t\t});\n\n\tif (!sizeRatios.length) {\n\t\tthrow new Error('empty result');\n\t}\n\n\tconst maxVW = sizeRatios.sort((a, b) => b.vw - a.vw)[0];\n\tconst maxAspect = Math.max(...sizeRatios.map((r) => r.hwr));\n\n\tscore.unitSize = outputWidth / maxVW.vw;\n\n\t// 页面显示尺寸\n\tscore.pageSize = {\n\t\twidth: outputWidth,\n\t\theight: outputWidth * maxAspect,\n\t};\n}\n\nconst batchTask = (fn: () => Promise) => fn();\nconst concurrencyTask = (fns: (() => Promise)[]) => Promise.all(fns.map((fn) => fn()));\n\nconst shootStaffImage = async (\n\tsystem: starry.System,\n\tstaffIndex: number,\n\t{ paddingLeft = 0, scaling = 1, spec }: { paddingLeft?: number; scaling?: number; spec: { viewportHeight: number; viewportUnit: number } }\n): Promise => {\n\tif (!system || !system.backgroundImage) return null;\n\n\tconst staff = system.staves[staffIndex];\n\tif (!staff) return null;\n\n\tconst middleUnits = spec.viewportHeight / spec.viewportUnit / 2;\n\n\tconst width = system.imagePosition.width * spec.viewportUnit;\n\tconst height = system.imagePosition.height * spec.viewportUnit;\n\tconst x = system.imagePosition.x * spec.viewportUnit + paddingLeft;\n\tconst y = (system.imagePosition.y - (staff.top + staff.staffY - middleUnits)) * spec.viewportUnit;\n\n\tconst canvas = new Canvas(Math.round(width + x) * scaling, spec.viewportHeight * scaling);\n\tconst context = canvas.getContext('2d');\n\tcontext.fillStyle = 'white';\n\tcontext.fillRect(0, 0, canvas.width, canvas.height);\n\tcontext.drawImage(await loadImage(system.backgroundImage), x * scaling, y * scaling, width * scaling, height * scaling);\n\n\treturn canvas;\n\t// .substr(22);\t// remove the prefix of 'data:image/png;base64,'\n};\n\n/**\n * 根据布局检测结果进行截图\n * @param score\n * @param pageCanvas\n * @param page\n * @param detection\n */\nasync function shootImageByDetection({\n\tpage,\n\tscore,\n\tpageCanvas,\n}: {\n\tscore: starry.Score;\n\tpage: starry.Page;\n\tpageCanvas: Canvas; // 原始图片绘制好的canvas\n}) {\n\tif (!page?.layout?.areas?.length) {\n\t\treturn null;\n\t}\n\n\tpage.width = score.pageSize.width / score.unitSize;\n\tpage.height = score.pageSize.height / score.unitSize;\n\n\tconst correctCanvas = new Canvas(pageCanvas.width, pageCanvas.height);\n\tconst ctx = correctCanvas.getContext('2d');\n\n\tctx.save();\n\n\tconst { width, height } = correctCanvas;\n\tconst [a, b, c, d] = page.source.matrix;\n\n\tctx.setTransform(a, b, c, d, (-1 / 2) * width + (1 / 2) * a * width + (1 / 2) * b * height, (-1 / 2) * height + (1 / 2) * c * width + (1 / 2) * d * height);\n\n\tctx.drawImage(pageCanvas, 0, 0);\n\n\tctx.restore();\n\n\tconst interval = page.source.interval;\n\n\tpage.layout.areas.map((area, systemIndex) => {\n\t\tconsole.assert(area.staves?.middleRhos?.length, '[shootImageByDetection] empty area:', area);\n\n\t\tconst data = ctx.getImageData(area.x, area.y, area.width, area.height);\n\n\t\tconst canvas = new Canvas(area.width, area.height);\n\n\t\tconst context = canvas.getContext('2d');\n\t\t// context.rotate(-area.staves.theta);\n\t\tcontext.putImageData(data, 0, 0);\n\n\t\tconst detection = area.staves;\n\t\tconst size = { width: area.width, height: area.height };\n\n\t\tconst sourceCenter = {\n\t\t\tx: pageCanvas.width / 2 / interval,\n\t\t\ty: pageCanvas.height / 2 / interval,\n\t\t};\n\n\t\tconst position = {\n\t\t\tx: (area.x + area.staves.phi1) / interval - sourceCenter.x + page.width / 2,\n\t\t\ty: area.y / interval - sourceCenter.y + page.height / 2,\n\t\t};\n\n\t\tpage.systems[systemIndex] = constructSystem({\n\t\t\tpage,\n\t\t\tbackgroundImage: canvas.toBufferSync('png'),\n\t\t\tdetection,\n\t\t\timageSize: size,\n\t\t\tposition,\n\t\t});\n\t});\n\n\treturn correctCanvas;\n}\n\nasync function shootStaffBackgroundImage({ system, staff, staffIndex }: { system: starry.System; staff: starry.Staff; staffIndex: number }) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: SEMANTIC_VISION_SPEC,\n\t});\n\n\tstaff.backgroundImage = sourceCanvas.toBufferSync('png');\n\n\t// No phi1 offset here: shootStaffImage bakes the system's barline offset\n\t// into the canvas coordinate space, so -paddingLeft is already correct.\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - SEMANTIC_VISION_SPEC.viewportHeight / 2 / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\twidth: sourceCanvas.width / SEMANTIC_VISION_SPEC.viewportUnit,\n\t\theight: sourceCanvas.height / SEMANTIC_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的变形矫正\n * @param system\n * @param staff\n * @param staffIndex\n * @param gaugeImage\n * @param pyClients\n */\nasync function gaugeStaff({\n\tsystem,\n\tstaff,\n\tstaffIndex,\n\tgaugeImage,\n\tpyClients,\n}: {\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tstaffIndex: number;\n\tgaugeImage: Buffer;\n\tpyClients: PyClients;\n}) {\n\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\tspec: GAUGE_VISION_SPEC,\n\t\tscaling: 2,\n\t});\n\n\tconst sourceBuffer = sourceCanvas.toBufferSync('png');\n\n\tconst baseY = (system.middleY - (staff.top + staff.staffY)) * GAUGE_VISION_SPEC.viewportUnit + GAUGE_VISION_SPEC.viewportHeight / 2;\n\n\tconst { buffer, size } = await pyClients.predictScoreImages('gaugeRenderer', [sourceBuffer, gaugeImage, baseY]);\n\n\tstaff.backgroundImage = buffer;\n\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / GAUGE_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - size.height / 2 / GAUGE_VISION_SPEC.viewportUnit,\n\t\twidth: size.width / GAUGE_VISION_SPEC.viewportUnit,\n\t\theight: size.height / GAUGE_VISION_SPEC.viewportUnit,\n\t};\n\n\tstaff.maskImage = null;\n}\n\n/**\n * 单个staff的降噪\n * @param staff\n * @param staffIndex\n * @param maskImage\n */\nasync function maskStaff({ staff, staffIndex, maskImage }: { staff: starry.Staff; staffIndex: number; maskImage: Buffer }) {\n\tconst img = await loadImage(maskImage);\n\n\tstaff.maskImage = maskImage;\n\tstaff.imagePosition = {\n\t\tx: -STAFF_PADDING_LEFT / MASK_VISION_SPEC.viewportUnit,\n\t\ty: staff.staffY - MASK_VISION_SPEC.viewportHeight / 2 / MASK_VISION_SPEC.viewportUnit,\n\t\twidth: img.width / MASK_VISION_SPEC.viewportUnit,\n\t\theight: img.height / MASK_VISION_SPEC.viewportUnit,\n\t};\n}\n\n/**\n * 单个staff的语义识别\n * @param score\n * @param staffIndex\n * @param system\n * @param staff\n * @param graph\n */\nasync function semanticStaff({\n\tscore,\n\tstaffIndex,\n\tsystem,\n\tstaff,\n\tgraph,\n}: {\n\tscore: starry.Score;\n\tstaffIndex: number;\n\tsystem: starry.System;\n\tstaff: starry.Staff;\n\tgraph: SemanticGraph;\n}) {\n\tgraph.offset(-STAFF_PADDING_LEFT / SEMANTIC_VISION_SPEC.viewportUnit, 0);\n\n\tsystem.assignSemantics(staffIndex, graph);\n\n\tstaff.assignSemantics(graph);\n\tstaff.clearPredictedTokens();\n\n\tscore.assembleSystem(system, score.settings?.semanticConfidenceThreshold || 1);\n}\n\nfunction replacePageImages(page: starry.Page, onReplaceImageKey: (src: string) => any) {\n\tconst tasks = [\n\t\t[page.source, 'url'],\n\t\t...page.systems\n\t\t\t.map((system) => {\n\t\t\t\treturn [\n\t\t\t\t\t[system, 'backgroundImage'],\n\t\t\t\t\t...system.staves\n\t\t\t\t\t\t.map((staff) => [\n\t\t\t\t\t\t\t[staff, 'backgroundImage'],\n\t\t\t\t\t\t\t[staff, 'maskImage'],\n\t\t\t\t\t\t])\n\t\t\t\t\t\t.flat(),\n\t\t\t\t];\n\t\t\t})\n\t\t\t.flat(),\n\t];\n\n\ttasks.map(([target, key]: [any, string]) => {\n\t\ttarget[key] = onReplaceImageKey(target[key]);\n\t});\n}\n\nexport type TaskProgress = { total?: number; finished?: number };\n\nexport interface OMRPage {\n\turl: string | Buffer;\n\tkey?: string;\n\tlayout?: LayoutResult;\n\trenew?: boolean;\n\tenableGauge?: boolean;\n}\n\nexport interface ProgressState {\n\tlayout?: TaskProgress;\n\ttext?: TaskProgress;\n\tgauge?: TaskProgress;\n\tmask?: TaskProgress;\n\tsemantic?: TaskProgress;\n\tregulate?: TaskProgress;\n\tbrackets?: TaskProgress;\n}\n\nclass OMRProgress {\n\tstate: ProgressState = {};\n\n\tonChange: (evt: ProgressState) => void;\n\n\tconstructor(onChange: (evt: ProgressState) => void) {\n\t\tthis.onChange = onChange;\n\t}\n\n\tsetTotal(stage: keyof ProgressState, total: number) {\n\t\tthis.state[stage] = this.state[stage] || {\n\t\t\ttotal,\n\t\t\tfinished: 0,\n\t\t};\n\t}\n\n\tincrease(stage: keyof ProgressState, step = 1) {\n\t\tconst info: TaskProgress = this.state[stage] || {\n\t\t\tfinished: 0,\n\t\t};\n\t\tinfo.finished += step;\n\n\t\tthis.onChange(this.state);\n\t}\n}\n\ntype SourceImage = string | Buffer;\n\nexport interface OMROption {\n\toutputWidth?: number;\n\ttitle?: string; // 曲谱标题\n\tpageStore?: {\n\t\thas?: (key: string) => Promise;\n\t\tget: (key: string) => Promise;\n\t\tset: (key: string, val: string) => Promise;\n\t};\n\trenew?: boolean;\n\tprocesses?: (keyof ProgressState)[]; // 选择流程\n\tonProgress?: (progress: ProgressState) => void;\n\tonReplaceImage?: (src: SourceImage) => Promise; // 替换所有图片地址,用于上传或者格式转换\n}\n\nconst lruCache = new WeakLRUCache();\n\n// 默认store\nconst pageStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as string;\n\t},\n\tasync set(key: string, val: string) {\n\t\tlruCache.setValue(key, val);\n\t},\n};\n\n/**\n * 默认将图片转换为webp格式的base64字符串\n * @param src\n */\nconst onReplaceImage = async (src: SourceImage) => {\n\tif (src instanceof Buffer || (typeof src === 'string' && (/^https?:\\/\\//.test(src) || /^data:image\\//.test(src)))) {\n\t\tconst webpBuffer = (await convertImage(src)).buffer;\n\t\treturn `data:image/webp;base64,${webpBuffer.toString('base64')}`;\n\t}\n\n\treturn src;\n};\n\n/**\n * 识别所有图片\n * @param pyClients\n * @param images\n * @param option\n */\nexport const predictPages = async (\n\tpyClients: PyClients,\n\timages: OMRPage[],\n\toption: OMROption = { outputWidth: 1200, pageStore, onReplaceImage }\n): Promise<{ score: starry.Score; omitPages: number[]; stat: OMRStat }> => {\n\tconst logger = pyClients.logger;\n\n\toption.outputWidth = option.outputWidth || 1200;\n\toption.pageStore = option.pageStore || pageStore;\n\toption.onReplaceImage = option.onReplaceImage || onReplaceImage;\n\n\toption.processes =\n\t\tArray.isArray(option.processes) && option.processes.length > 0 ? option.processes : ['layout', 'text', 'gauge', 'mask', 'semantic', 'brackets'];\n\tconst progress: OMRProgress = new OMRProgress(option.onProgress);\n\n\tconst t0 = Date.now();\n\n\t// 预处理删除不合法区域\n\timages.forEach((image) => {\n\t\tif (image.layout?.detection) {\n\t\t\timage.layout.detection.areas = image.layout.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t\t} else {\n\t\t\tdelete image.layout;\n\t\t}\n\t});\n\n\tconst score = new starry.Score({\n\t\ttitle: option?.title,\n\t\tstavesCount: 2,\n\t\tpaperOptions: {\n\t\t\traggedLast: true,\n\t\t\traggedLastBottom: true,\n\t\t},\n\t\theaders: {},\n\t\tinstrumentDict: {},\n\t\tsettings: {\n\t\t\tenabledGauge: option.processes.includes('gauge'),\n\t\t\tsemanticConfidenceThreshold: 1,\n\t\t},\n\t});\n\n\tlogger.info(`[predictor]: download_source_images-${images.length}`);\n\n\t// 原始拍摄图\n\tconst originalImages: Image[] = await Promise.all(images.map((img) => loadImage(img.url as any)));\n\n\tlogger.info(`[predictor]: source_images_downloaded-${images.length}`);\n\n\t//const INPUT_IMAGE_WIDTH = images.filter((x) => x?.layout?.interval)?.[0]?.layout?.sourceSize?.width;\n\n\t/******************************* 布局识别 start *************************/\n\t// 输入给布局检测的图\n\tconst pageCanvasList: Canvas[] = originalImages.map((img, index) => scaleForLayout(img, images[index]!.layout?.sourceSize?.width ?? img.width));\n\n\tprogress.setTotal('layout', originalImages.length);\n\tprogress.setTotal('text', originalImages.length);\n\n\tconst detections = await Promise.all(\n\t\tpageCanvasList.map(async (cvs, key) => {\n\t\t\tif (!images[key].layout) return (await pyClients.predictScoreImages('layout', [cvs.toBufferSync('png')]))?.[0];\n\n\t\t\t// reinforce layout from front-end if no gauge\n\t\t\tif (!images[key].enableGauge && images[key]?.layout?.detection?.areas?.length)\n\t\t\t\treturn (await pyClients.predictScoreImages('layout$reinforce', [cvs.toBufferSync('png')], [images[key].layout]))?.[0];\n\n\t\t\treturn images[key].layout;\n\t\t})\n\t);\n\n\tdetections.forEach((page) => {\n\t\tpage.detection.areas = page.detection?.areas?.filter((a) => a?.staves?.middleRhos?.length > 0);\n\t});\n\n\tconst imageURLMap = new Map();\n\tconst collectImage = async (source: SourceImage): Promise => {\n\t\tconst url = await option.onReplaceImage(source);\n\t\timageURLMap.set(source, url);\n\t};\n\n\t// 根据所有页面的宽高比决定全局显示尺寸\n\tsetGlobalPageSize(score, detections, option.outputWidth);\n\n\tasync function createPage(detect, pageIndex) {\n\t\tconst { url, key, layout, enableGauge } = images[pageIndex];\n\n\t\tconst pageKey = sha1(JSON.stringify({ key: key || url, layout, enableGauge }));\n\n\t\tconst cachedPageJson = await option.pageStore.get(pageKey);\n\n\t\tconst omit = !option.renew && ((cachedPageJson && !images[pageIndex].renew) || !detect.detection.areas?.length);\n\n\t\tconst page = (score.pages[pageIndex] =\n\t\t\tomit && cachedPageJson\n\t\t\t\t? starry.recoverJSON(cachedPageJson, starry)\n\t\t\t\t: new starry.Page({\n\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\tname: key || (typeof url === 'string' && /https?:\\/\\//.test(url) ? url : null),\n\t\t\t\t\t\t\tsize: 0,\n\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\tcrop: {\n\t\t\t\t\t\t\t\tunit: '%',\n\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\t\theight: 100,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdimensions: detect.sourceSize,\n\t\t\t\t\t\t\tmatrix: [Math.cos(detect.theta), -Math.sin(detect.theta), Math.sin(detect.theta), Math.cos(detect.theta), 0, 0],\n\t\t\t\t\t\t\tinterval: detect.interval,\n\t\t\t\t\t\t\tneedGauge: images[pageIndex].enableGauge,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlayout: detect.detection,\n\t\t\t\t }));\n\n\t\tconst correctCanvas = omit\n\t\t\t? null\n\t\t\t: await shootImageByDetection({\n\t\t\t\t\tscore,\n\t\t\t\t\tpage,\n\t\t\t\t\tpageCanvas: pageCanvasList[pageIndex],\n\t\t\t });\n\n\t\tprogress.increase('layout');\n\n\t\treturn {\n\t\t\tpage,\n\t\t\tomit,\n\t\t\thash: pageKey,\n\t\t\tcorrectCanvas,\n\t\t};\n\t}\n\n\tconst systemsCount = detections.reduce((acc, x) => acc + (x.detection.areas?.length ?? 0), 0);\n\tconst stavesCount = detections.reduce((acc, x) => acc + (x.detection.areas?.reduce?.((a, y) => a + (y.staves?.middleRhos?.length ?? 0), 0) ?? 0), 0);\n\n\tprogress.setTotal('gauge', stavesCount);\n\tprogress.setTotal('mask', stavesCount);\n\tprogress.setTotal('semantic', stavesCount);\n\tprogress.setTotal('brackets', systemsCount);\n\n\tconst allTasks = [];\n\n\tconst omitPages = [];\n\n\tconst t1 = Date.now();\n\n\tlet n_page = 0;\n\n\tfor (const pageIndex of detections.keys()) {\n\t\tconst pageTasks = [];\n\n\t\tconst { page, correctCanvas, omit, hash } = await createPage(detections[pageIndex], pageIndex);\n\n\t\tpageTasks.push(collectImage(page.source.url));\n\t\tpageTasks.push(...page.systems.map((system) => collectImage(system.backgroundImage)));\n\n\t\tlogger.info(`[predictor]: check_cache_pageIndex-${pageIndex} omit: ${omit}`);\n\t\tif (omit) {\n\t\t\tomitPages.push(pageIndex);\n\t\t} else {\n\t\t\tconst staves = page.systems\n\t\t\t\t.map((system, systemIndex) => system.staves.map((staff, staffIndex) => ({ pageIndex, systemIndex, staffIndex, page, system, staff })))\n\t\t\t\t.flat(1);\n\n\t\t\tawait concurrencyTask([\n\t\t\t\t/******************************* 括号检测 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('brackets')) return;\n\n\t\t\t\t\tconst detection = page.layout;\n\t\t\t\t\tconst interval = page.source.interval;\n\n\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\tconst bracketImages = page.systems.map((system, systemIndex) => {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\tstaves: { middleRhos, phi1 },\n\t\t\t\t\t\t} = detection.areas[systemIndex];\n\n\t\t\t\t\t\tconst topMid = middleRhos[0];\n\t\t\t\t\t\tconst bottomMid = middleRhos[middleRhos.length - 1];\n\n\t\t\t\t\t\tconst sourceRect = {\n\t\t\t\t\t\t\tx: x + phi1 - 4 * interval,\n\t\t\t\t\t\t\ty: y + topMid - 4 * interval,\n\t\t\t\t\t\t\twidth: 8 * interval,\n\t\t\t\t\t\t\theight: bottomMid - topMid + 8 * interval,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst OUTPUT_INTERVAL = 8;\n\n\t\t\t\t\t\tconst canvas = new Canvas(OUTPUT_INTERVAL * 8, (sourceRect.height / interval) * OUTPUT_INTERVAL);\n\n\t\t\t\t\t\tconst context = canvas.getContext('2d');\n\t\t\t\t\t\tcontext.drawImage(correctCanvas, sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height, 0, 0, canvas.width, canvas.height);\n\n\t\t\t\t\t\t// console.log(pageIndex, systemIndex, JSON.stringify(sourceRect), correctCanvas.width, correctCanvas.height)\n\t\t\t\t\t\t// const pctx = canvas.getContext('2d')\n\t\t\t\t\t\t// pctx.strokeStyle = 'red'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(255, 0, 0, 0.2)'\n\t\t\t\t\t\t// pctx.fillRect(sourceRect.x, sourceRect.y, sourceRect.width, sourceRect.height)\n\t\t\t\t\t\t// const area = detections[pageIndex].detection.areas[systemIndex]\n\t\t\t\t\t\t// pctx.strokeStyle = 'green'\n\t\t\t\t\t\t// pctx.fillStyle = 'rgba(0, 255, 0, 0.1)'\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// pctx.fillRect(area.x, area.y, area.width, area.height)\n\t\t\t\t\t\t// require('fs').writeFile(`test--system-${systemIndex}.png`, canvas.toBufferSync('png'), () => {})\n\t\t\t\t\t\t// require('fs-extra').writeFile(`test--brackets-${pageIndex}-${systemIndex}.png`, canvas.toBufferSync('png'))\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\tbuffer: canvas.toBufferSync('png'),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t\tlogger.info(`[predictor]: brackets js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\tconst bracketsRes = await pyClients.predictScoreImages('brackets', { buffers: bracketImages.map((x) => x.buffer) });\n\t\t\t\t\tprogress.increase('brackets', bracketImages.length);\n\n\t\t\t\t\tbracketImages.forEach(({ system }, index) => {\n\t\t\t\t\t\tif (bracketsRes[index]) {\n\t\t\t\t\t\t\tsystem.bracketsAppearance = bracketsRes[index];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t/******************************* 括号检测 end *************************/\n\n\t\t\t\t/******************************* 文本识别 start *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\tif (!option.processes.includes('text')) return;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t// await require('fs-extra').writeFile(`test--text-location-${pageIndex}.png`, correctCanvas.toBufferSync('png'))\n\t\t\t\t\t\tconst bufferForText = correctCanvas.toBufferSync('png');\n\n\t\t\t\t\t\tconst resultLoc = await pyClients.predictScoreImages('textLoc', [bufferForText]);\n\n\t\t\t\t\t\tconst location = resultLoc[0].filter((box) => box.score > 0);\n\n\t\t\t\t\t\tif (location.length > 0) {\n\t\t\t\t\t\t\tconst [resultOCR] = await pyClients.predictScoreImages('textOcr', {\n\t\t\t\t\t\t\t\tbuffers: [bufferForText],\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tpage.assignTexts(resultOCR.areas, resultOCR.imageSize);\n\t\t\t\t\t\t\tpage.assemble();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlogger.info(`[predictor]: text js [pageIndex-${pageIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\tprogress.increase('text');\n\n\t\t\t\t\t\tif (!option.title) {\n\t\t\t\t\t\t\tconst coverTexts: {\n\t\t\t\t\t\t\t\tconfidence: number;\n\t\t\t\t\t\t\t\tfontSize: number;\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\ttext: string;\n\t\t\t\t\t\t\t\ttextType: 'Title' | 'Author';\n\t\t\t\t\t\t\t\ttype: starry.TokenType;\n\t\t\t\t\t\t\t\twidth_: number;\n\t\t\t\t\t\t\t\tx: number;\n\t\t\t\t\t\t\t\ty: number;\n\t\t\t\t\t\t\t}[] = score.pages[0].tokens as any;\n\n\t\t\t\t\t\t\tif (Array.isArray(coverTexts) && coverTexts.length > 0) {\n\t\t\t\t\t\t\t\tconst [titleToken] = coverTexts\n\t\t\t\t\t\t\t\t\t.filter((x) => x.type === starry.TokenType.Text && x.textType === 'Title')\n\t\t\t\t\t\t\t\t\t.sort((a, b) => b.fontSize - a.fontSize);\n\n\t\t\t\t\t\t\t\tif (titleToken) {\n\t\t\t\t\t\t\t\t\tscore.title = titleToken.text;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tlogger.error(`[predictor]: text js [pageIndex-${pageIndex}] ${JSON.stringify(err)}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t/******************************* 文本识别 end *************************/\n\t\t\t\tasync () => {\n\t\t\t\t\t/******************************* 变形矫正 start *************************/\n\t\t\t\t\tawait batchTask(async () => {\n\t\t\t\t\t\tconst disableGauge = !option.processes.includes('gauge') || images[pageIndex].enableGauge === false;\n\n\t\t\t\t\t\tif (!disableGauge) {\n\t\t\t\t\t\t\tconst gaugeRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'gauge',\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tstaves.map(async ({ staffIndex, system }) => {\n\t\t\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\t\t\t\t\t\t\t\t\t\tconst sourceCanvas = await shootStaffImage(system, staffIndex, {\n\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: STAFF_PADDING_LEFT,\n\t\t\t\t\t\t\t\t\t\t\tspec: GAUGE_VISION_SPEC,\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js shoot [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\t\t\treturn sourceCanvas.toBufferSync('png');\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { system, staff, pageIndex, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] start..`);\n\t\t\t\t\t\t\t\tawait gaugeStaff({\n\t\t\t\t\t\t\t\t\tpyClients,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgaugeImage: gaugeRes[index].image,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: gauge js [page-${pageIndex}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\n\t\t\t\t\t\t\t\tprogress.increase('gauge');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (const [_, { system, staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tawait shootStaffBackgroundImage({\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.backgroundImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t/******************************* 变形矫正 end *************************/\n\n\t\t\t\t\tawait concurrencyTask([\n\t\t\t\t\t\t/******************************* 降噪 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('mask')) return;\n\n\t\t\t\t\t\t\tconst maskRes = await pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t'mask',\n\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfor (const [index, { staff, staffIndex }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait maskStaff({\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tmaskImage: maskRes[index].image,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(`[predictor]: mask js [page-${pageIndex}, ${index}, staff-${staffIndex}] duration: ${Date.now() - startTime}`);\n\t\t\t\t\t\t\t\tprogress.increase('mask');\n\n\t\t\t\t\t\t\t\tpageTasks.push(collectImage(staff.maskImage));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 降噪 end *************************/\n\n\t\t\t\t\t\t/******************************* 语义识别 start *************************/\n\t\t\t\t\t\tasync () => {\n\t\t\t\t\t\t\tif (!option.processes.includes('semantic')) return;\n\n\t\t\t\t\t\t\tconst semanticRes = starry.recoverJSON(\n\t\t\t\t\t\t\t\tawait pyClients.predictScoreImages(\n\t\t\t\t\t\t\t\t\t'semantic',\n\t\t\t\t\t\t\t\t\tstaves.map(({ staff }) => staff.backgroundImage as Buffer)\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tstarry\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tstaves.forEach(({ system }) => system.clearTokens());\n\n\t\t\t\t\t\t\tfor (const [index, { staffIndex, system, staff }] of staves.entries()) {\n\t\t\t\t\t\t\t\tconst startTime = Date.now();\n\n\t\t\t\t\t\t\t\tawait semanticStaff({\n\t\t\t\t\t\t\t\t\tscore,\n\t\t\t\t\t\t\t\t\tsystem,\n\t\t\t\t\t\t\t\t\tstaff,\n\t\t\t\t\t\t\t\t\tstaffIndex,\n\t\t\t\t\t\t\t\t\tgraph: semanticRes[index],\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\t\t`[predictor]: semantic js [page-${pageIndex}, system-${system.index}, staff-${staff.index}] duration: ${\n\t\t\t\t\t\t\t\t\t\tDate.now() - startTime\n\t\t\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tprogress.increase('semantic');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t/******************************* 语义识别 end *************************/\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\t++n_page;\n\t\t}\n\n\t\tallTasks.push(\n\t\t\tPromise.all(pageTasks).then(() => {\n\t\t\t\treplacePageImages(page, (src) => imageURLMap.get(src));\n\t\t\t\tlogger.info(`[predictor]: pageStore set: [${pageIndex}]`);\n\t\t\t\treturn option.pageStore.set(hash, JSON.stringify(page));\n\t\t\t})\n\t\t);\n\t}\n\n\tconst t2 = Date.now();\n\n\tawait Promise.all(allTasks);\n\n\tlogger.info(`[predictor]: inferenceStaffLayout: ${score.title}, [${score.systems.length}]`);\n\n\tscore.inferenceStaffLayout();\n\n\tlogger.info(`[predictor]: done: ${score.title}`);\n\n\t// correct semantic ids\n\tscore.assemble();\n\n\tconst t3 = Date.now();\n\n\treturn {\n\t\tscore,\n\t\tomitPages,\n\t\tstat: {\n\t\t\tcost: t3 - t0,\n\t\t\tpagesCost: t2 - t1,\n\t\t\tpages: n_page,\n\t\t},\n\t};\n};\n\nexport const abstractOMRStats = (stats: OMRStat[]): OMRSummary => {\n\tconst { costTotal, pagesCostTotal, pagesTotal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcostTotal: sum.costTotal + stat.cost,\n\t\t\tpagesCostTotal: sum.pagesCostTotal + stat.pagesCost,\n\t\t\tpagesTotal: sum.pagesTotal + stat.pages,\n\t\t}),\n\t\t{ costTotal: 0, pagesCostTotal: 0, pagesTotal: 0 }\n\t);\n\n\treturn {\n\t\tcostTotal,\n\t\tcostPerPage: pagesTotal ? costTotal / pagesTotal : null,\n\t\tpagesTotal,\n\t\tscoreN: stats.length,\n\t};\n};\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-30T10:33:50.270Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../../src/isomorphic/converter';\nexport * as starry from '../../../src/starry';\nexport * from '../../libs/predictors';\nexport * from '../../libs/predictPages';\nexport * from '../../libs/regulation';\nexport * from '../../libs/store';\nexport * from '../../libs/util';\n"],"names":["globalThis","btoa","str","Buffer","from","toString","atob","recoverJSON","json","classDict","JSON","stringify","parse","_","value","__prototype","Class","fields","deepCopy","o","dict","Map","get","Array","isArray","result","set","forEach","e","push","Object","entries","key","setPrototypeOf","__proto__","SimpleClass","assign","data","this","toJSON","cls","constructor","serializedKeys","blackKeys","keys","filter","includes","pick","className","Sylvester","Matrix","create","elements","setElements","I","n","j","els","i","prototype","dup","isSquare","cols","length","toRightTriangular","p","M","np","multiplier","determinant","det","isSingular","augment","matrix","T","nj","inverse","divisor","new_element","inverse_elements","SemanticType","NOTEHEAD_WIDTHS","NoteheadS0","NoteheadS1","NoteheadS2","glyphCenters","x","zero","y","one","two","three","four","five","six","seven","eight","nine","f","m","r","s","z","SYSTEM_SEMANTIC_TYPES","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","CONFLICTION_GROUPS","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","STAMP_SEMANTICS","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","hashSemanticPoint","systemIndex","staffIndex","point","Math","round","source","semantic","hash","sha1","array","slice","id","String","fromCharCode","substring","hashPageSemanticPoint","pageName","roundNumber","precision","min","Infinity","max","distance2D","p1","p2","dx","dy","sqrt","gcd","a","b","Number","isInteger","console","error","frac","numerator","denominator","reducedFraction","d","g","printFraction","fractionMul","fraction","segmentPoints","points","axis","sorted","sort","seg","lastP","reduce","segments","filterWeekPoints","rests","group","find","weeks","solveOverlapping","pset","Set","xClusters","clusters","concat","map","c","ps","confidence","delete","GROUP_N_TO_PITCH","noteToPitch","note","alter","floor","gn","mod7","argmax","indexOf","DummyLogger","debug","groupCollapsed","groupEnd","info","warn","assert","DURATION_MULTIPLIER","floatToTimeWarp","floatToFrac","ActionType","EventElementType","TokenType","Action","P","type","PLACE","e1","V","e2","order","VERTICAL","H","HORIZONTAL","events","isFinite","StageMatrix","fromNode","node","status","stages","fill","actions","action","stage1","findIndex","stage","stage2","add","stagedEvents","endHs","matrixH","has","endHP","hActions","pendingHeads","eventMap","eid","some","index","pathOf","target","ei","size","yy","sub","findDoublePath","s1","s2","paths","t","path","reducePath","column","toEquations","eventCount","equations","path1","path2","equation","PathNode","logger","last","parent","join","like","ids","split","constructStages","unshift","newStage","si","splice","constructConstraints","factors","duration","constraints","it","inbalancesConstraints","ones","fixed","inbalances","constraint","sum","solveEquations","xis","items","abs","equationMap","conflicted","lines","line","bias","every","squareLines","restLines","candidateLines","i1","i2","prior","sl","c1","c2","invert","mat","matrixInverse","solution","row","xi","optimallySolve","shrinkMap","shrinkness","groups","pair","released","releasedIds","warps","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","voices","se","voice","values","tick","endTick","tickGroup","timeWarp","estages","solveStages","changed","reverse","event","measureDuration","outEI","fromCodePoint","deduce","quota","access","actionAccessing","times","closed","credits","children","expand","possibility","n1","n2","child","matrixV","branches","appendBranch","branch","Solver","env","event0","measureShrinkness","expectedDuration","staff","xSpan","endX","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","es","partialFrac","weight","log","spaceTime","staffAlters","start","end","eventsXOrder","tickTwists","dt","atan2","PI","tickTwist","EventCluster","super","regular","elem","CHORD","REST","fake","y1","y2","grace","fullMeasure","grant","annotation","feature","estimatedDuration","endElem","EOS","predisposition","assignPrediction","prediction","pe","EventClusterSet","trimIrregular","ir","cluster","PatchMeasure","staffN","log2","staffMask","basics","basic","tt","TokenTypes","TokenClefs","test","TokenTimesigs","TokenTimesigsC","TokenTimesigsN","TokenOctshifts","TokenNumbers","TokenAccidentals","TokenNoteheads","TokenBareNoteheads","TokenDirectionalNoteheads","TokenRests","TokenFlags","TokenVolta","TokenDynamics","TokenScripts","TokenPedals","TokenDots","DotDot","TokenArcs","SlurBegin","SlurEnd","TieBegin","TieEnd","TokenBeams","TokenWedges","TokenAccessories","TokenDirectionless","TokenGlyphs","TOKEN_Y_ROUND","TOKEN_Y_FIXED","Token","typeId","isPredicted","isNotehead","isContexted","isAccessory","division","NoteheadS1stemU","NoteheadS1stemD","NoteheadS2stemU","NoteheadS2stemD","Flag3","Flag4","Flag5","Flag6","Flag7","Flag8","dots","direction","width","left","right","voiceIndices","indices","TextToken","width_","WHOLE_DURATION","AccessoryDirection","GraceType","StemBeam","TremoloLink","GlissandoStyle","ArpeggioStyle","Term","EventTerm","space","term","rest","accessories","pivotX","alignedTick","mainDuration","divider","undefined","fullMeasureRest","tipX","tip","tipY","ys","tremoloCatcher","tremoloLink","Catcher","scaleChord","pitches","pitch","zeroHolder","ContextType","ContextedTerm","Token.TokenClefs","tokenType","Clef","KeyAcc","Acc","Token.TokenOctshifts","OctaveShift","Token.TokenTimesigsC","TimeSignatureC","Token.TokenTimesigsN","TimeSignatureN","staffLevel","clef","KeyNatural","KeySharp","KeyFlat","octaveShift","OctaveShift8va","OctaveShift8vb","number","MarkTerm","MUSIC_NOTES","TempoTerm","fromNumeralText","text","symbol","beats","durationMagnitude","den","dot","match","bpm","isValid","range","GlyphTerm","TextTerm","LyricTerm","CommandTerm","ChordmodeTerm","SimplePolicy","computeMeasureTicks","measure","xMap","rows","k","roundX","constructXMap","ts","eventGroups","x1","x2","Grace","divisionVector","dotsVector","timeWarped","computeMeasureVoices","eventSet","pushEvent","e0","EquationPolicy","PageLayoutMethod","TextType","INVERT_SQRT2","FINE_BEAMS","Open","Continue","Close","bb","solveStaffGroup","staffGroup","options","EquationSolver.Solver","estiamteMeasure","allEvents","tickEstimated","stemDirection","beam","pR","tanh","eventStartX","fakeP","timeSignature","staffGroupMap","staffGroups","staves","ievents","startX","hp","erf","staffDecay","exp","yDecay","dtx","nR","position","regulateMeasure","async","solver","ii","mp","measureIndex","resultEvents","solutionStat","solverCredits","solverTimes","regulateMeasureWithRectification","rectification","re","priority","tickN","SpartitoMeasure","reorderEvents","staffYsFull","rx","ry","yi","yis","ev","intX","intY","originalRegulationHash","regulated","regulationHash","barTypes","postRegulate","keySignature","timeSignatureChanged","contexts","Boolean","doubtfulTimesig","validRegulated","flat","tickMap","endEvent","tickToX","tickRates","tickRatesInStaves","rates","tickRatesInGroups","gevents","groupIndex","twists","empty","hasIllEvent","voicedEventIds","brief","regulationHash0","regulationHashes","featureWords","invalid","rate","uys","melodies","rhythm","barType","voltaEnd","typeEntris","partialDuration","signatureDuration","updateRoundX","graceEvents","staffMap","smap","oldEvent","staffPositions","emap","preTick","graces","graceIds","totalDuration","warp","solveGraceEvents","catchers","pitchers","Pitcher","catcher","candidates","pitcher","catcherId","tremolo","pi","solveTremoloPairs","updateContextTick","terms","t1","t2","asSolution","ref","refEvent","applySolution","cleanupRegulation","regulateTest","regulateSimple","regulateEquations","regulate","policy","createPatch","marks","createClusters","trueEventIds","idx","staffIndices","staffY0","staffYs","staffYn","headY","BOS","tar","src","patched","backgroundImages","url","applyClusters","id_max","is","srcId","tarId","EditableEvent","agent","Proxy","self","captures","parseInt","ownKeys","getOwnPropertyDescriptor","enumerable","configurable","EditableMeasure","syncVoiceToEvents","voiceIndex","syncVoiceFromEvents","makeMIDI","microsecondsPerBeat","tracks","vi","subEvents","midiEvents","time","subtype","channel","noteNumber","velocity","thirtyseconds","ticks","deltaTime","header","formatType","ticksPerBeat","BEAM_STATUS","evaluateMeasure","validEvents","warpedEvents","irregularWarps","fractionalWarp","tickSum","eventN","tickOverlapped","complicatedTimewarp","literalDuration","sigDuration","inVoiceEvents","corruptedVoiceEvent","overranged","over","overDuration","graceInVoice","graceN","graceDominant","irregularTick","beamBroken","broken","evi","surplusTime","eventDuration","nullEvents","fakeEvents","voiceRugged","perfect","fine","expectDuration","durationRate","qualityScore","spaceLoss","irregularWarpsN","LayoutType","spreadMeasureSeq","seq","Ordinary","layout","serialize","seqToCode","withBrackets","code","inRange","SingleMLayout","BlockMLayout","trimSeq","seq2","seq3","fromSeq","VoltaMLayout","bodySeq","body","alternates","alternateSeqs","lastAlternateSeq","Conservative","Full","Once","ABAMLayout","seqA","main","seqA_","seqB","parser","v","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","trace","symbols_","start_symbol","measure_layout","EOF","index_wise_measure_layout","segment_wise_measure_layout","iw_sequence","iw_item","UNSIGNED","single","iw_block_item","iw_volta","iw_aba","iw_block","iw_optional_alternates","iw_alternates","sw_sequence","sw_item","segment","sw_block_item","sw_volta","sw_aba","sw_block","sw_optional_alternates","sw_alternates","$accept","$end","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","root","blockLayout","singleLayout","voltaBlock","abaBlock","table","defaultActions","parseError","recoverable","Error","input","stack","vstack","lstack","args","call","arguments","lexer","sharedState","hasOwnProperty","setInput","yylloc","yyloc","ranges","getPrototypeOf","state","len","newState","expected","lex","token","yyval","errStr","showPosition","loc","first_line","last_line","first_column","last_column","apply","item","speard","serializeSeq","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","unput","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","rules","_currentRules","flex","begin","condition","popState","pop","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","INITIAL","inclusive","Parser","grammar$1","StaffGroupType","StaffConjunctionType","singleGroup","Default","BOUNDS_TO_GROUPTYPE","Brace","Bracket","Square","CONJUNCTIONS_MAP","Blank","Solid","Dashed","randomB64","random","makeGroupsFromRaw","remains","word","shift","bound","level","subs","grand","groupHead","groupTail","groupDict","groupKey","StaffLayout","raw","prefix","name","makeUniqueName","staffIds","conjunctions","conjunction","leftBounds","rightBounds","maskCache","stavesCount","partGroups","grands","standaloneGroups","collect","conjunctionBetween","upStaff","downStaff","con","makeMaskLayout","mask","nextId","partialMaskCode","bits","withIds","staffStatus","joinGroup","subStr","partial","inner","bracketCode","$Vb","$Vc","staff_layout","seq_id","seq_br","seq_con","bound_left","bound_right","bound_lefts","bound_rights","ID","seq_bl","Seq","bl","br","Item","grammar","parseCode","SemanticGraph","fromPoints","graph","getLayer","getConfidentLayer","threshold","getSystemPoints","getStaffPoints","scale","factor","transform","extension","scaling","height","MEASURE_SEMANTICS","GraceNotehead","CrescendoBegin","CrescendoEnd","DecrescendoBegin","DecrescendoEnd","TremoloLeft","TremoloRight","TremoloMiddle","STAFF_LINED_SEMANTICS","LINED_INTERVAL_SEMANTICS","NOTEHEAD_FOR_STEM_SEMANTICS","KEYACC_CANDIDATE_SEMANTICS","NOTEHEAD_TABLE","up","down","REST_SEMANTICS","TOKEN_TO_STEMBEAM","TEXT_TYPE_ALIAS","Alter1","Alternation1","Alter2","Alternation2","noteheadsXPivot","xs","mean","Measure","tokens","antiTokens","noteheads","chordRects","nh","nulN","nhmap","hh","nhs","top","bottom","nh0","stemX","additionalLines","chords","getChords","chord","ceil","flags","beams","chordRcs","rect","noteIds","accs","flagRange","nearbyFlags","flag","beamToken","nearbyDots","getRests","dotValue","getEvents","getContexts","assignAccessoriesOnEvents","accessory","relatedEvents","owner","d1","d2","Down","Up","sortEvents","arpeggio","tremolsLs","tremolsRs","tremolsMs","tevents","stemL","stemR","tm","te","tl","tr","assignFeaturesOnEvents","semantics","dotPs","beamLs","beamMs","beamRs","gracePs","tremoloRs","stems","vline_Stem","s0","cx","divisions","ss","i_flags","f1","f2","i_dots","dots2","bs","u_stems","stem","d_stems","stemDirections","tremolos","Staff","measureCount","measureBars","staffY","measures","noteRange","rearrangeMeasures","reassignTokens","assignSemantics","assemble","system","qualifiedSemantics","TempoNotehead","tempoNh","antiP","displacementSemantics","appendPoint","semanticTop","semanticBottom","rootNhs","nhOffsetX","attachedHeads","topDist","bottomDist","antiPoint","nearStems","appendFlags","dotLines","sy","keyaccs","acc","oct","voltaDots","VoltaLeft","VoltaRight","voltaGroups","lined","interval","signs","fixedY","roundY","holder","mainFlag","downward","tailY","count","clearTokens","clearPredictedTokens","System","HEAD_WIDTH","segmentLength","arrangePosition","sidBlackList","sidWhiteList","staffTop","staffBottom","radius","staffMaskChanged","prev","positions","tidyMeasureBars","b1","b2","restWidth","connectionLine","staffHead","staffTail","middleY","timeSignatureOnHead","getStaffArray","on","getMarksInMeasure","textType","TempoNumeral","headMeasureIndex","columns","voltaBegin","alternative","mi","timeSigs","lastColumn","break","getEventsFunctional","processors","useXMap","localRows","groupMap","proc","oy","bars","lastX","barColumns","bar","intensity","barXs","prevStaff","nextStaff","newPoint","appendToken","fontSize","overlap","Page","systems","assignTexts","areas","imageHeight","imageWidth","dimensions","area","cy","rp","score","rect_Text","theta","textFeature","feature_dict","textAnnotations","sysXs","middleX","indent","Text","textFeasure","Title","Author","PageMargin","Other","Chord","MeasureNumber","Instrument","TextualMark","Times","sx","SemanticElementType","TIME_SIG_DENOMINATORS","fromEntries","TIME_SIG_NUMERATORS","et","ELEMENT_TOKEN_NAMES","NoteheadGrace","NOTEHEAD_BASE_DIVISION","NOTEHEAD_ELEMENT_TYPES","REST_ELEMENT_TYPES","BEAM_ELEMENT_TYPES","NOTE_ELEMENT_TYPES","SOURCE_ELEMENT_TYPES","TARGET_ELEMENT_TYPES","ROOT_NOTE_ELEMENT_TYPES","ELEMENT_TO_STEMBEAM","metaElem","BOS_ELEMENT","fractionToElems","SemanticCluster","elementToJSON","sourceMask","targetMask","vMask","compactMatrixH","expandMatrixByMasks","compactMatrixV","_matrixV","expandMatrixByMaskTriu","groupsV","matrixFromGroups","found","mapMatrix","x2i","i2x","mergeOverlapping","overlaps","overlappedNoteheads","ij","nh1","nh2","masks","stemMasks","stemNotes","s0s","subS0Masks","stemMap","stemId","prevId","linkings","roots","parentMasks","parentId","rootId","subNotes","dotGroups","tipRange","beamElem","iter","gen","maskSrc","maskTar","groupIds","id1","id2","ImplicitType","Stream","buffer","Uint8Array","eof","read","readString","readInt32","readInt16","readInt8","signed","readVarInt","OStream","write","writeInt32","writeInt16","writeInt8","writeVarInt","getBuffer","getArrayBuffer","charCodeAt","MIDI","parseMidiData","readChunk","stream","lastEventTypeByte","readEvent","eventTypeByte","param1","eventType","amount","controllerType","programNumber","subtypeByte","hourByte","frameRate","hour","sec","frame","subframe","pow","metronome","headerChunk","headerStream","trackCount","timeDivision","trackChunk","trackStream","encodeMidiFile","writeChunk","writeEvent","frameByte","MidiSequence","midiToSequence","midiFile","trackStates","beatsPerMinute","nextEventIndex","ticksToNextEvent","getNextEvent","nextEventTrack","nextEvent","ticksToEvent","track","midiEvent","processNext","secondsToGenerate","processEvents","trimSequence","clear","fixOverlapNotes","noteMap","overlapMap","swaps","leapIndex","swap","front","back","offEvent","leapEvent","tempo","require$$0","PedalControllerTypes","Notation","parseMidi","fixOverlap","channelStatus","pedalStatus","pedals","channels","millisecondsPerBeat","barIndex","keyRange","correspondences","rawTicks","tempos","rawEvents","deltaTicks","deltaBeats","startTick","low","statusIndex","finger","high","pedalType","fingers","isNaN","endTime","meta","notes","pitchMap","beatInfos","lastInfo","beatIndex","entry","findChordBySoftindex","softIndex","averageTempo","tickRange","to","endtick","span","ticksToTime","next_tempo_index","tempo_index","timeToTicks","tickRangeToTimeRange","scaleTempo","headTempo","MusicNotation","animationDelay","Promise","resolve","requestAnimationFrame","MidiPlayer_1","MidiPlayer","midiData","cacheSpan","onMidi","onPlayFinish","onTurnCursor","notation","isPlaying","progressTime","startTime","performance","now","cursorTurnDelta","dispose","progressTicks","play","nextFrame","currentEventIndex","backturn","eventTime","pause","turnCursor","config","CostStepAttenuation","SkipDeep","PriorDistanceSigmoidFactor","PriorValueSigmoidFactor","SkipCost","LagOffsetCost","LeadOffsetCost","ZeroOffsetCost","RelocationThreshold","Config","require$$1","Node","s_note","c_note","_prev","_totalCost","_value","cacheDirty","ci","rootSi","cost","skip","updateCache","totalCost","selfCost","deep","dump","evaluatePrev","evaluatePrevCost","priorByOffset","distance","navigator","Navigator","criterion","sample","getCursorOffset","outOfPage","bestNode","fineCursor","breakingSI","zeroNode","relocationThreshold","step","prevNote","prevNode","cursors","nullLength","nullSteps","cursor","resetCursor","breaking","deltaSi","fromIndex","toIndex","backPrior","cursorOffset","relocationTendency","normalizeInterval","HEART_BEAT","makeNoteSoftIndex","softIndexFactor","lastNote","Matcher","makeMatchNodes","targetList","targetNote","genNotationContext","runNavigation","onStep","Symbol","for","EXCLUDE_MIDI_EVENT_SUBTYPES","encodeToMIDIData","unclosedNoteDuration","msToTicks","Date","process","VUE_APP_BUILD_TIME","toDateString","MidiUtils","sliceMidi","midi","trackDeltaToAbs","lastTick","trackAbsToDelta","sliceTrack","encodeToMIDI","musicWidgets","require$$2","require$$3","require$$4","COMMON_NOTE_FIELDS","MetaNotation","fromAbsoluteNotes","measureHeads","__","mnotes","mn","field","idTrackMap","performAbsoluteNotes","abNotes","withRestTied","tied","overlapped","staffTrack","contextIndex","implicitType","chordPosition","priorNote","ripe","trackTickBias","headMeasure","trackNames","idSet","toAbsoluteNotes","measureIndices","measureTick","measureNotes","mnote","toPerformingNotation","WHOLE_DURATION_MAGNITUDE","toPerformingMIDI","trackList","zeroTick","measureEvents","mevent","eventPriority","subnote","finalTick","toPerformingNotationWithEvents","assignNotationNoteDataFromEvents","setTempo","midiNotation","noteId","CryptoJS","exports","crypto","window","msCrypto","global","require","err","cryptoSecureRandomInt","getRandomValues","Uint32Array","randomBytes","readInt32LE","F","obj","C","C_lib","lib","Base","extend","overrides","mixIn","init","$super","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","processedWords","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","_doProcessBlock","Hasher","cfg","_doReset","update","messageUpdate","finalize","_doFinalize","_createHelper","hasher","message","_createHmacHelper","C_algo","HMAC","algo","K","isPrime","sqrtN","getFractionalBits","nPrime","W","SHA256","_hash","h","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","nBitsTotal","nBitsLeft","HmacSHA256","factory","HashVector","fromHash","byte","fromString","_SHA256","uwords","word_len","fromWords","vectors","toHash","bit","vec","crop","ODDS","odds","odd","cosHashes","hash1","hash2","xor","xorHashes","i2hex","emptyVoiceFromStaffMeasure","chiefVoice","timeSigNumeric","contextedTerms","markingTiesInVoice","event1","p0","tying","si0","si1","Spartito","solidMeasureCount","measureIndexMapping","headBPM","tempoMark","mark","measureLayoutCode","ms","vb","ve","leftSign","rightSign","nextI","mm","nextVBI","pms","lastVEI","lastMI","dumpEvaluations","rectifyTimeSignatures","mis","newTimeSignature","measuresToFix","originTimeSignature","regularD","numerators","countings","peakCount","bestCounting","best","reducedN","makeVoiceStaves","voiceCount","nextMeasure","ctxList","maxEventX","deferred","leftStaves","lastEvent","tailEvent","tailStaff","pageBreak","headStaff","sd","trait","staffToGroup","voiceTraits","vector","v1","v2","leftVoices","voiceTrait","vs","consistencies","m1","m2","staffVoiceIndices","mode","removeEmptyMeasuresInVoicesStaves","perform","tokenMap","staffToChannel","voiceChannels","hasTempo","nextTick","events0","voice0","part","pitchValue","performByEstimation","noteTick","featureHash","measureWords","levels","meaures","vecY","vecMelody","vecRhythm","featureHashHex","featureHashBigInt","BigInt","assignMeasureNumbers","discard","measureNumber","mod12","ALTER_NAMES","StaffContext","keyAlters","alters","timeSigNumSet","timeSigDenSet","doubtingTimesig","change","yToNote","partialTimeSignature","resetMeasure","resetSystem","noteToY","pitchToNote","preferredAlter","gp","alteredGp","naturalNote","alterValue","keyAlterValue","pitchToY","alterOnNote","yToPitch","yToPitchName","bitsToMask","Score","version","layoutTemplate","staffLayoutCode","pages","page","spartito","upgradeScoreData","headers","instrumentDict","pageSize","unitSize","maxStavesCount","imageKeys","backgroundImage","maskImage","breakSystemIndices","systemCount","staffLayout","staffLayout.parseCode","semanticHash","eventSystemsToTermStaves","eventSystems","termStaves","sys","context","startEvent","processStaffContext","resetPageLayout","parameters","newCenter","offsetX","offsetY","getMeasure","localIndex","getRawCluster","systemY0","y0","getRawClusters","makeSpartito","ri","esys","patch","patches","makeMusicSheet","voiceStaves","title","paperOptions","measureLayout","getMeasureLayout","findPoint","sid","pageIndex","getMeasureSemantics","sy1","sy2","makeTimewiseGraph","store","getTokenMap","confidenceThreshold","append","assembleSystem","markVoices","vis","replaceImageKeys","all","then","inferenceStaffLayout","staffTotal","completeSystems","bracketsAppearance","candidateCodes","codeCounting","maxCount","connectedCode","lastSys","search","code1","startsWith","assignBackgroundForMeasure","imagePosition","original","blackoutFakeNotes","scope","inScope","fakeIds","voicedIds","fakeIdSet","blackIds","measureLayout.parseCode","splitToSingleScoresGen","startSysIndices","templateScore","topology","startSysIndex","endSysIndex","sysInRange","newScore","SubScoreSystem","SubScorePage","splitToSingleScores","BeadType","DIVISION_NAMES","SPACE_LOSS_WEIGHT","POSSIBILITY_LOW_BOUNDARY","STEM_DIRECTION_OPTIONS","BEAM_OPTIONS","saveClusterState","BeadNode","accessCount","nextBranch","possibilities","currentElem","elemIndex","branchID","ni","Pass","Division","Dots","repeat","picker","ptFactor","evaluateCluster","pretentiousness","selfEval","element","residue","fatalError","predictCluster","evaluation","estimateElementDuration","eos","lastOrder","voiceN","scales","referenceScale","nearScale","tickSpan","twist","tickMSE","tickErr","mse","spaceDuration","solveCluster","stopLoss","suc0","bestEvaluation","bestState","restoreClusterState","fixedEvents","pendingEvents","near","stemDirectionVector","beamVector","solveMeasure","quotaMax","quotaFactor","worstLoss","durations","solutionEvents","tipElem","tickSet","glimpseMeasure","resetSignatureForDoubtfulOnly","estimateMeasure","StemTip","StemHead","rect_Lyric","SemanticClusterSet","vocab","converts","connection","SUPPORT_CLEF_TYPES","starry.TokenType","tokenToText","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","Function","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","eventsModule","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","prepend","existing","warning","newListener","emit","warned","w","onceWrapper","fired","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","destructPromise","timeout","rs","rj","setTimeout","defineProperty","RangeError","setMaxListeners","getMaxListeners","doError","er","listeners","addListener","prependListener","prependOnceListener","list","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","AsyncQueue","working","tasks","_digest","taskFn","payload","addTask","task","promise","ZeroClient","queue","socket","Request","sendTimeout","receiveTimeout","connect","__request","retryTimes","req","send","pack","receive","close","request","method","kwargs","args_","kwargs_","msg","opt","unpack","PyProcessor","scriptPath","retryCount","retryDelay","port","freePort","getPortPromise","stopPort","defaultsDeep","pyShell","PythonShell","stdout","isBuffer","inherits_browserModule","ctor","superCtor","super_","writable","TempCtor","util","inherits","inheritsModule","getOwnPropertyDescriptors","descriptors","formatRegExp","format","isString","objects","inspect","isNull","isObject","deprecate","fn","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","opts","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","primitive","simple","isNumber","formatPrimitive","visibleKeys","val","arrayToHash","isError","formatError","isRegExp","RegExp","isDate","output","base","braces","toUTCString","formatProperty","formatArray","cur","reduceToSingleString","desc","ar","objectToString","pad","debuglog","NODE_DEBUG","toUpperCase","pid","bold","italic","underline","white","grey","black","blue","cyan","green","magenta","red","yellow","special","boolean","null","string","date","regexp","isNullOrUndefined","isSymbol","isPrimitive","months","prop","getHours","getMinutes","getSeconds","getDate","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","promisify","promiseResolve","promiseReject","defineProperties","custom","callbackify","callbackified","maybeCb","rej","getPort","base64map","crypt","rotl","rotr","endian","bytes","bytesToWords","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","base64","triplet","charAt","base64ToBytes","imod4","cryptModule","charenc","utf8","stringToBytes","bin","bytesToString","charenc_1","api","digestbytes","H0","H1","H2","H3","H4","asBytes","asString","_blocksize","_digestsize","sha1Module","constructSystem","detection","imageSize","systemWidth","phi2","phi1","systemHeight","lastSystem","stavesTops","middleRhos","starry.Staff","starry.System","convertImage","maxHeight","quality","buf","got","responseType","decompress","https","rejectUnauthorized","toBuffer","webpBuffer","sharp","resize","fit","withoutEnlargement","toFormat","filename","SparkMD5","ArrayBuffer","OffscreenCanvas","Canvas","Image","STAFF_PADDING_LEFT","GAUGE_VISION_SPEC","viewportHeight","viewportUnit","MASK_VISION_SPEC","SEMANTIC_VISION_SPEC","concurrencyTask","fns","shootStaffImage","paddingLeft","spec","middleUnits","canvas","getContext","fillStyle","fillRect","drawImage","loadImage","shootStaffBackgroundImage","sourceCanvas","toBufferSync","gaugeStaff","gaugeImage","pyClients","sourceBuffer","baseY","predictScoreImages","maskStaff","img","semanticStaff","settings","semanticConfidenceThreshold","replacePageImages","onReplaceImageKey","OMRProgress","onChange","setTotal","total","finished","increase","lruCache","WeakLRUCache","pageStore","getValue","setValue","onReplaceImage","multinomial_1","pvals","looseVector","ns","looseEvent","MeasureRectification","roll","DefaultSolutionStore","PendingCondition","solveMeasureRecords","records","onUpdate","pendingCondition","NotFine","pass","onProgress","pendingRecords","ErrorOnly","Imperfect","isPending","record","current","starry.beadSolver.solveMeasure","starry.evaluateMeasure","better","remaining","RECTIFICATION_SEARCH_ITERATIONS","BASE_QUOTA_FACTOR","RECTIFICATION_QUOTA_FACTOR","computeQuota","limit","solveMeasures","solutionStore","ignoreCache","cached","solved","stat","computed","solveMeasuresWithRectifications","n_rec","rec","default","stale","genMeasureRectifications","testMeasure","doSimpleRegulate","PyClients","clients","getClient","client","option","checkHost","warmup","clientType","res","by_buffer","stats","costTotal","pagesCostTotal","pagesTotal","pagesCost","costPerPage","scoreN","pickerCost","measureN","timeN","tryTimes","costPerMeasure","costPerTime","issue","fatal","baseCostTotal","topoCostTotal","baseMeasures","topoMeasures","baseCost","topoCost","baseCostPerMeasure","topoCostPerMeasure","baseComputed","baseSolved","topoSolved","topoIssue","topoFatal","onSaveIssueMeasure","t0","issueMeasures","results","cs","solvedIndices","errorIndices","n_issues","doRegulateWithTopo","maskImages","hasMaskImage","scoreJson","idsMap","idsXMap","idStaffIndexMap","coverTexts","subtitles","subtitle","authors","composer","bgWidth","bgHeight","l1","ls","parts","partTemplates","measureXs","partIndex","template","staffIndexBase","paddedStaves","chordColumns","staffIndexInPart","noteIndex","measureStartX","elems","firstX","innerId","lastFifths","clefs","pt","fifths","lineStaves","systemTopStaff","systemBottomStaff","systemTopStaffY","systemBottomStaffY","lastPartLastStaff","partStaves","staffs","details","hide","visibleStaves","partTopStaff","partBottomStaff","partTopStaffY","partBottomStaffY","distances","imgs","spartitoMeasure","parti","mIndices","sortedParts","midiJson","measInfo","ent","idNoteMap","beatsCurrent","beatsUnitCurrent","mIndex","beatsUnit","evt","note_ticks","measureInfos","beatUnit","mergedTracks","trackIndex","program","lhPattern","rhPattern","instrus","hand","handStaves","trackToSplit","newTracks","stave","rightHandTrack","leftHandTrack","transformedTracks","onEvent","measureTickMap","numId","newEvent","elem_ids","meas_start_tick","images","outputWidth","processes","progress","image","starry.Score","raggedLast","raggedLastBottom","enabledGauge","originalImages","pageCanvasList","scaleForLayout","sourceSize","detections","cvs","enableGauge","imageURLMap","collectImage","createPage","detect","pageKey","cachedPageJson","omit","renew","starry.recoverJSON","starry","starry.Page","unit","cos","sin","needGauge","correctCanvas","pageCanvas","save","setTransform","restore","getImageData","putImageData","sourceCenter","shootImageByDetection","sizeRatios","staffInterval","vw","hwr","maxVW","maxAspect","setGlobalPageSize","systemsCount","allTasks","omitPages","n_page","pageTasks","bracketImages","topMid","bottomMid","sourceRect","OUTPUT_INTERVAL","bracketsRes","buffers","bufferForText","location","box","resultOCR","titleToken","gaugeRes","maskRes","semanticRes","t3","pickers","freshOnly","onPassStart","baseQuality","n_seq","starry.beadSolver.estimateMeasure","counting","toFixed","totalMeasures","computeRemaining","wrappedOnProgress","starry.EditableMeasure","saveMeasure","solutions","batchGet","originMeasure"],"mappings":"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M7F,EAAIA,GAEX,EAvdM6/B,cAASriC,UAAG,gBCiCpB,MAOMmjC,GAAoB,CACzBnhC,EAAaqE,MACbrE,EAAasE,MACbtE,EAAauE,MACbvE,EAAa8E,WACb9E,EAAa+E,WACb/E,EAAa4C,YACb5C,EAAa6C,WACb7C,EAAa8C,WACb9C,EAAa+C,aACb/C,EAAagD,YACbhD,EAAaiD,YACbjD,EAAakD,WACblD,EAAamD,aACbnD,EAAaoD,aACbpD,EAAaqD,YACbrD,EAAaogB,eACbpgB,EAAaqgB,eACbrgB,EAAaiF,aACbjF,EAAaiC,KACbjC,EAAakC,IACblC,EAAamC,IACbnC,EAAaoC,MACbpC,EAAaqC,KACbrC,EAAasC,KACbtC,EAAauC,IACbvC,EAAawC,MACbxC,EAAayC,MACbzC,EAAa0C,KACb1C,EAAayE,WACbzE,EAAa0E,SACb1E,EAAa2E,eACb3E,EAAa4E,QACb5E,EAAa6E,YACb7E,EAAaE,WACbF,EAAaG,WACbH,EAAaI,WACbJ,EAAagc,gBACbhc,EAAaic,gBACbjc,EAAakc,gBACblc,EAAamc,gBACbnc,EAAasD,MACbtD,EAAauD,MACbvD,EAAawD,MACbxD,EAAayD,MACbzD,EAAa0D,MACb1D,EAAa2D,MACb3D,EAAa4D,MACb5D,EAAa6D,OACb7D,EAAa8D,OACb9D,EAAa8a,UACb9a,EAAa+a,QACb/a,EAAawE,IACbxE,EAAakB,EACblB,EAAaf,EACbe,EAAamB,EACbnB,EAAazB,EACbyB,EAAaoB,EACbpB,EAAaqB,EACbrB,EAAasB,EACbtB,EAAakF,cACblF,EAAamF,mBACbnF,EAAaoF,eACbpF,EAAaqF,eACbrF,EAAa2C,oBACb3C,EAAasF,WACbtF,EAAauF,YACbvF,EAAawF,YACbxF,EAAayF,WACbzF,EAAa0F,eACb1F,EAAa2F,YACb3F,EAAa4F,cACb5F,EAAa6F,cACb7F,EAAa8F,aACb9F,EAAa+F,cACb/F,EAAagG,UACbhG,EAAaiG,SACbjG,EAAaohC,cACbphC,EAAaiE,SACbjE,EAAamE,UACbnE,EAAakE,aACblE,EAAaqhC,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"} \ No newline at end of file diff --git a/backend/omr/dist/regulator.d.ts b/backend/omr/dist/regulator.d.ts index fd882ec94d23504ac6ff9b250b5a908e2ab33055..e97d5f089cadad390153a5169d1ce164fe3a455e 100644 --- a/backend/omr/dist/regulator.d.ts +++ b/backend/omr/dist/regulator.d.ts @@ -2880,6 +2880,12 @@ declare namespace beadSolver { const estimateMeasure: (measure: SpartitoMeasure, picker: BeadPicker) => Promise; } declare namespace starry { + const recoverJSON: (json: string | object, classDict: any) => T; + class SimpleClass { + assign(data?: object): void; + toJSON(): any; + deepCopy(): this; + } // implicit note (from expressive marks) types enum ImplicitType { None = 0, @@ -3248,12 +3254,6 @@ declare namespace starry { get width(): number; set width(value: number); } - const recoverJSON: (json: string | object, classDict: any) => T; - class SimpleClass { - assign(data?: object): void; - toJSON(): any; - deepCopy(): this; - } const WHOLE_DURATION: number; enum AccessoryDirection { Up = "^", @@ -3884,24 +3884,85 @@ declare namespace starry { // page general Other = "Other" } - interface Logger { - debug(message?: any, ...optionalParams: any[]): void; - info(message?: any, ...optionalParams: any[]): void; - warn(message?: any, ...optionalParams: any[]): void; - group(...label: any[]): void; - groupCollapsed(...label: any[]): void; - groupEnd(): void; - assert(expr: boolean, ...optionalParams: any[]): void; + enum EventElementType { + PAD = 0, + BOS = 1, + EOS = 2, + CHORD = 3, + REST = 4 } - class DummyLogger implements Logger { - debug(..._: any[]): void; - group(..._: any[]): void; - groupCollapsed(..._: any[]): void; - groupEnd(): void; - info(..._: any[]): void; - warn(..._: any[]): void; - assert(..._: any[]): void; + interface EventElement { + href?: string; + disposed?: boolean; + index?: number; + voice?: number; + type: EventElementType; + staff: number; + x: number; + y1: number; + y2: number; + feature: EventFeature; + pivotX?: number; + headY?: number; + // targets + tick?: number; + division?: number; + dots?: number; + beam?: StemBeam; + stemDirection?: string; + grace?: boolean; + tremoloCatcher?: boolean; + timeWarped?: boolean; + fullMeasure?: boolean; // full measure rest + fake?: boolean; + order?: number; + predisposition?: EventPredisposition; + } + type Matrix = number[][]; + interface Annotation { + loss: number; + grant: boolean; + patched: boolean; // from manually solved measure + } + class EventCluster extends SimpleClass { + static className: string; + static blackKeys: string[]; + id?: string; // for db access + index?: number; + duration?: number; + staffY0?: number; // the first staff top + staffY + signatureDuration: number; + elements: EventElement[]; + matrixH?: Matrix; // matrix N x N, [next][prev] + backgroundImages?: BackgroundImage[]; + annotation?: Annotation; + constructor(data: object); + get regular(): boolean; + get grant(): boolean; + get feature(): Partial; + get estimatedDuration(): number; + assignPrediction(prediction: any): void; + } + class EventClusterSet extends SimpleClass { + static className: string; + name?: string; + clusters: EventCluster[]; + constructor(data: object); + trimIrregular(): number; + } + interface EventRectification { + id: number; + division?: number; + dots?: number; + } + class MeasureRectification { + events: EventRectification[]; + constructor(data: any); + toString(): string; + static default(events: EventTerm[]): MeasureRectification; + static roll(events: EventTerm[]): MeasureRectification; } + const genMeasureRectifications: (measure: SpartitoMeasure) => Generator; class PatchMeasure extends SimpleClass { static className: string; measureIndex: number; @@ -4160,135 +4221,442 @@ declare namespace starry { }; const hashSemanticPoint: (systemIndex: number, staffIndex: number, point: SemanticPoint) => string; const hashPageSemanticPoint: (pageName: string, point: SemanticPoint) => string; - class SemanticGraph extends SimpleClass { + interface SemanticPointInMeasure extends SemanticPoint { + staff: number; + // y1 y2 in system coordinate + sy1: number; + sy2: number; + } + interface GraphMeasure { + measureIndex: number; + left: number; + right: number; + points: SemanticPointInMeasure[]; + } + interface TimewiseGraph { + measures: GraphMeasure[]; + } + type Matrix$0 = number[][]; + type TickMap = Map; + interface SolutionStatistics { + loss?: number; + solverCredits?: number; + solverTimes?: number; + } + class SpartitoMeasure extends SimpleClass { static className: string; - points: SemanticPoint[]; - constructor(data?: any); - /*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph { - const tokens = [].concat(...staff.measures.map(measure => measure.tokens)); - - const voltaRightXs = []; - - const points = []; - tokens.forEach(token => { - const def = hashTable[token.hash]; - - if (token.glyph) { - const glyph = token.glyph as string; - let semantic = null; - - const isKey = /^\\key/.test(token.source) || token.is("KEY"); - let { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 }; - if (token.scale2) { - cx *= token.scale2.x; - cy *= token.scale2.y; - } - - let x = token.x + cx; - const y = token.y + cy; - - switch (glyph) { - case "rests.0": - if (/^R/.test(token.source)) - semantic = "Rest0W"; - else - semantic = "Rest0"; - - break; - case "accidentals.flat": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "accidentals.natural": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "accidentals.sharp": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "dots.dot": - if (token.is("VOLTA")) { - x += 0.24; // dot glyph center X offset - if (token.is("LEFT")) - semantic = SemanticType.VoltaLeft; - else if (token.is("RIGHT")) { - voltaRightXs.push(x); - semantic = SemanticType.VoltaRight; - } - } - else - semantic = "Dot"; - - break; - case "zero": - case "one": - case "two": - case "three": - case "four": - case "five": - case "six": - case "seven": - case "eight": - case "nine": { - const upper = glyph[0].toUpperCase() + glyph.substr(1); - semantic = token.is("TIME_SIG") ? "Timesig" + upper : upper; - } - - break; - default: - semantic = glyphSemanticMapping[glyph]; - } - - if (semantic) { - points.push({ - semantic, - x, - y, - }); - } - - if (token.is("TEMPO_NOTEHEAD")) { - points.push({ - semantic: SemanticType.TempoNotehead, - x, - y, - }); - } - - // grace noteheads - if (token.is("NOTEHEAD") && Number.isFinite(token.scale) && token.scale < 0.75) { - points.push({ - semantic: SemanticType.GraceNotehead, - x, - y, - }); - } - } - - // semantic from token symbol - let semantic = null; + static blackKeys: string[]; + measureIndex: number; + staffMask: number; + staffGroups: number[][]; + originalRegulationHash?: string; + measureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures + patched: boolean; + discard: boolean; + position: { + systemIndex: number; + localIndex: number; // the measure local index in its system + left: number; + right: number; + staffYs?: number[]; + staffYsFull?: number[]; + }; + backgroundImages: BackgroundImage[]; + events: EventTerm[]; + endEvent: Partial; // the placeholder for end tick + contexts: ContextedTerm[][]; // [staff] + marks: MarkTerm[]; + duration: number; + voices?: number[][]; // [voice, id] + break?: boolean; + pageBreak?: boolean; + basics?: StaffBasic[]; // [staff] + voltaBegin: boolean; + voltaEnd: boolean; + alternative: boolean; + barTypes: Record; + indent: boolean; + solutionStat?: SolutionStatistics; + matrixH: Matrix$0; // matrix N x N [right][left] + matrixV: Matrix$0; // matrix N x N + estimatedDuration: number; + graph: GraphMeasure; + deposit: Record; + static reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[]; + constructor(data: any); + get timeSignature(): Fraction$0; + get keySignature(): number; + get timeSignatureChanged(): boolean; + get doubtfulTimesig(): boolean; + get regulated(): boolean; + get validRegulated(): boolean; + get rows(): EventMeasure[]; + get eventStartX(): number; + get startX(): number; + get width(): number; + get tickMap(): TickMap; + get tickToX(): { + [tick: number]: number; + }; + get tickRates(): number[]; + get tickRatesInStaves(): number[]; + get tickRatesInGroups(): number[]; + get tickTwist(): number; + get eventMap(): Record; + get empty(): boolean; + get hasIllEvent(): boolean; + get brief(): string; + get regulationHash(): string; + // prefer use originalRegulationHash + get regulationHash0(): string; + get regulationHashes(): string[]; + get featureWords(): string[][] | null; + get barType(): MeasureBarType; + get partialDuration(): boolean; + postRegulate(): void; + updateRoundX(): void; + updateContextTick(): void; + asSolution(ref?: SpartitoMeasure): RegulationSolution; + applySolution(solution: RegulationSolution): void; + cleanupRegulation(): void; + regulateTest(): void; + regulateSimple(): void; + regulateEquations(options: EquationPolicy.RegulatorOptions): Promise; + // compute event.tick, event.tickGroup, event.timeWarp, voices, duration + regulate({ policy, ...options }?: RegulationOptions): Promise; + createPatch(): PatchMeasure; + createClusters(): EventCluster[]; + applyClusters(clusters: EventCluster[]): void; + } + // NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI + interface EventUIAgent { + readonly id: number; + readonly duration: number; + //ys: number[]; + pitches: TermPitch[]; + rest: RestType; + division: number; + dots: number; + stemDirection: string; + tying: boolean; + tied: boolean; + grace: boolean; // + beam: StemBeam; + timeWarp: string; // + tremolo: number; + tremoloLink: TremoloLink; + glissando: boolean; + arpeggioStyle: ArpeggioStyle; + tick: number; + } + interface MeasureUIAgent { + readonly measureIndex: number; + timeSignature: Fraction$0; + doubtfulTimesig: boolean; + keySignature: number; + //readonly events: EventUIAgent[]; + duration: number; + readonly voices: number[][]; + } + class EditableEvent extends EventTerm { + voice: number; + constructor(data: any); + get agent(): EventUIAgent; + } + class EditableMeasure extends SpartitoMeasure { + static className: string; + static blackKeys: any[]; + events: EditableEvent[]; + constructor(data: any); + syncVoiceToEvents(): void; + syncVoiceFromEvents(): void; + get agent(): MeasureUIAgent; + makeMIDI(bpm?: number): MIDI.MidiData; + } + // Compact display/playback-only score payload. It intentionally excludes editing, + // recognition, regulation, and semantic reconstruction state. + type LiveScoreScalar = string | number | boolean | null; + type LiveScoreTokenId = string | number; + type LiveScoreMidiEventType = "program" | "note-on" | "note-off" | "control" | "pitch-bend" | "aftertouch"; + interface LiveScore { + format: "LiveScore"; + version: 1; + pages: LiveScorePage[]; + playback?: LiveScorePlayback; + metadata?: LiveScoreMetadata; + staffLayout?: string; + } + interface LiveScoreMetadata { + title?: string; + composer?: string; + [key: string]: LiveScoreScalar | LiveScoreScalar[] | undefined; + } + interface LiveScorePage { + w: number; + h: number; + systems: LiveScoreSystem[]; + source?: LiveScoreSourceImage; + } + interface LiveScoreSourceImage { + url: string; + w: number; + h: number; + interval?: number; + matrix?: number[]; + } + interface LiveScoreSystem { + x: number; + y: number; + w: number; + staves: LiveScoreStaff[]; + bars?: number[]; + measures?: LiveScoreSystemMeasure[]; + staffMask?: number; + } + interface LiveScoreSystemMeasure { + i: number; + x1: number; + x2: number; + t1?: number; + t2?: number; + } + interface LiveScoreStaff { + y: number; + staffY: number; + additionalLines?: LiveScoreAdditionalLine[]; + measures?: LiveScoreMeasure[]; + image?: LiveScoreStaffImage; + } + interface LiveScoreStaffImage { + url: string; + x: number; + y: number; + width: number; + height: number; + } + interface LiveScoreAdditionalLine { + left: number; + right: number; + n: number; + } + interface LiveScoreMeasure { + tokens?: LiveScoreToken[]; + } + interface LiveScoreToken { + id?: LiveScoreTokenId; + t: string; + x: number; + y: number; + } + interface LiveScorePlayback { + ticksPerBeat: number; + endTick: number; + tempos?: LiveScoreTempo[]; + measures?: LiveScorePlaybackMeasure[]; + events: LiveScorePlaybackEvent[]; + positions?: LiveScorePlaybackPosition[]; + } + interface LiveScorePlaybackPosition { + id: LiveScoreTokenId; + system: number; + measure: number; + x: number; + endX?: number; + } + interface LiveScoreTempo { + tick: number; + tempo: number; + } + interface LiveScorePlaybackMeasure { + i: number; + t1: number; + t2: number; + } + interface LiveScorePlaybackEvent { + tick: number; + type: LiveScoreMidiEventType; + track?: number; + channel?: number; + note?: number; + velocity?: number; + program?: number; + controller?: number; + value?: number; + ids?: LiveScoreTokenId[]; + } + interface MeasureEvaluation { + events: number; + validEvents: number; + voiceRugged: boolean; + nullEvents: number; + fakeEvents: number; + warpedEvents: number; + complicatedTimewarp: boolean; + spaceTime: number; + surplusTime: number; + durationRate: number; + beamBroken: boolean; + fractionalWarp: boolean; + irregularWarpsN: number; + irregularTick: boolean; + tickTwist: number; + tickOverlapped: boolean; + graceInVoice: boolean; + graceN: number; + graceDominant: boolean; + perfect: boolean; + fine: boolean; + error: boolean; + qualityScore: number; + } + const evaluateMeasure: (measure: SpartitoMeasure) => MeasureEvaluation; + interface Logger { + debug(message?: any, ...optionalParams: any[]): void; + info(message?: any, ...optionalParams: any[]): void; + warn(message?: any, ...optionalParams: any[]): void; + group(...label: any[]): void; + groupCollapsed(...label: any[]): void; + groupEnd(): void; + assert(expr: boolean, ...optionalParams: any[]): void; + } + class DummyLogger implements Logger { + debug(..._: any[]): void; + group(..._: any[]): void; + groupCollapsed(..._: any[]): void; + groupEnd(): void; + info(..._: any[]): void; + warn(..._: any[]): void; + assert(..._: any[]): void; + } + class SemanticGraph extends SimpleClass { + static className: string; + points: SemanticPoint[]; + constructor(data?: any); + /*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph { + const tokens = [].concat(...staff.measures.map(measure => measure.tokens)); + + const voltaRightXs = []; + + const points = []; + tokens.forEach(token => { + const def = hashTable[token.hash]; + + if (token.glyph) { + const glyph = token.glyph as string; + let semantic = null; + + const isKey = /^\\key/.test(token.source) || token.is("KEY"); + let { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 }; + if (token.scale2) { + cx *= token.scale2.x; + cy *= token.scale2.y; + } + + let x = token.x + cx; + const y = token.y + cy; + + switch (glyph) { + case "rests.0": + if (/^R/.test(token.source)) + semantic = "Rest0W"; + else + semantic = "Rest0"; + + break; + case "accidentals.flat": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } + + break; + case "accidentals.natural": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } + + break; + case "accidentals.sharp": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } + + break; + case "dots.dot": + if (token.is("VOLTA")) { + x += 0.24; // dot glyph center X offset + if (token.is("LEFT")) + semantic = SemanticType.VoltaLeft; + else if (token.is("RIGHT")) { + voltaRightXs.push(x); + semantic = SemanticType.VoltaRight; + } + } + else + semantic = "Dot"; + + break; + case "zero": + case "one": + case "two": + case "three": + case "four": + case "five": + case "six": + case "seven": + case "eight": + case "nine": { + const upper = glyph[0].toUpperCase() + glyph.substr(1); + semantic = token.is("TIME_SIG") ? "Timesig" + upper : upper; + } + + break; + default: + semantic = glyphSemanticMapping[glyph]; + } + + if (semantic) { + points.push({ + semantic, + x, + y, + }); + } + + if (token.is("TEMPO_NOTEHEAD")) { + points.push({ + semantic: SemanticType.TempoNotehead, + x, + y, + }); + } + + // grace noteheads + if (token.is("NOTEHEAD") && Number.isFinite(token.scale) && token.scale < 0.75) { + points.push({ + semantic: SemanticType.GraceNotehead, + x, + y, + }); + } + } + + // semantic from token symbol + let semantic = null; const cx = 0; let cy = 0; if (token.is("OCTAVE")) { @@ -4795,263 +5163,77 @@ declare namespace starry { 11: string; 12: string; 13: string; - 14: string; - 15: string; - 16: string; - 17: string; - 18: string; - }; - const NOTEHEAD_ELEMENT_TYPES: SemanticElementType[]; - const NOTE_ELEMENT_TYPES: SemanticElementType[]; - interface SemanticElement { - type: SemanticElementType; - staff: number; - x: number; - y1: number; - y2: number; - index?: number; - tick?: number; - id?: string; - } - type Matrix = number[][]; - const BOS_ELEMENT: SemanticElement; - const fractionToElems: (fraction: Fraction$0) => SemanticElement[]; - class SemanticCluster extends SimpleClass { - index?: number; - elements: SemanticElement[]; - matrixH?: Matrix; // matrix N x N - _matrixV?: Matrix; // matrix N x N - groupsV?: number[][]; // ids array - masks?: [ - boolean[], - boolean[], - boolean[] - ]; // the masks for: [jointer source, jointer target, V] - static elementToJSON(elem: SemanticElement): object; - constructor(data: object); - get sourceMask(): boolean[]; - get targetMask(): boolean[]; - get vMask(): boolean[]; - get compactMatrixH(): Matrix; - set compactMatrixH(value: Matrix); - get compactMatrixV(): number[]; - set compactMatrixV(value: number[]); - get matrixV(): Matrix; - set matrixV(value: Matrix); - toJSON(): any; - static mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][]; - mergeOverlapping(): void; - overlappedNoteheads(): [ - number, - number - ][]; - getEvents(): ChordColumn[]; - } - interface SemanticClusterSetData { - vocab?: string[]; - clusters: SemanticCluster[]; - } - class SemanticClusterSet { - clusters: SemanticCluster[]; - constructor(data?: SemanticClusterSetData); - toJSON(): { - __prototype: string; - vocab: string[]; - clusters: any[]; - }; - } - const expandMatrixByMasks: (matrix: number[], masks: [ - boolean[], - boolean[] - ]) => Matrix; - const expandMatrixByMaskTriu: (matrix: number[], mask: boolean[]) => Matrix; - const matrixFromGroups: (len: number, groups: number[][]) => Matrix; - enum EventElementType { - PAD = 0, - BOS = 1, - EOS = 2, - CHORD = 3, - REST = 4 - } - interface EventElement { - href?: string; - disposed?: boolean; - index?: number; - voice?: number; - type: EventElementType; - staff: number; - x: number; - y1: number; - y2: number; - feature: EventFeature; - pivotX?: number; - headY?: number; - // targets - tick?: number; - division?: number; - dots?: number; - beam?: StemBeam; - stemDirection?: string; - grace?: boolean; - tremoloCatcher?: boolean; - timeWarped?: boolean; - fullMeasure?: boolean; // full measure rest - fake?: boolean; - order?: number; - predisposition?: EventPredisposition; - } - type Matrix$0 = number[][]; - interface Annotation { - loss: number; - grant: boolean; - patched: boolean; // from manually solved measure - } - class EventCluster extends SimpleClass { - static className: string; - static blackKeys: string[]; - id?: string; // for db access - index?: number; - duration?: number; - staffY0?: number; // the first staff top + staffY - signatureDuration: number; - elements: EventElement[]; - matrixH?: Matrix$0; // matrix N x N, [next][prev] - backgroundImages?: BackgroundImage[]; - annotation?: Annotation; - constructor(data: object); - get regular(): boolean; - get grant(): boolean; - get feature(): Partial; - get estimatedDuration(): number; - assignPrediction(prediction: any): void; - } - class EventClusterSet extends SimpleClass { - static className: string; - name?: string; - clusters: EventCluster[]; - constructor(data: object); - trimIrregular(): number; - } - interface EventRectification { - id: number; - division?: number; - dots?: number; - } - class MeasureRectification { - events: EventRectification[]; - constructor(data: any); - toString(): string; - static default(events: EventTerm[]): MeasureRectification; - static roll(events: EventTerm[]): MeasureRectification; - } - const genMeasureRectifications: (measure: SpartitoMeasure) => Generator; - interface SemanticPointInMeasure extends SemanticPoint { + 14: string; + 15: string; + 16: string; + 17: string; + 18: string; + }; + const NOTEHEAD_ELEMENT_TYPES: SemanticElementType[]; + const NOTE_ELEMENT_TYPES: SemanticElementType[]; + interface SemanticElement { + type: SemanticElementType; staff: number; - // y1 y2 in system coordinate - sy1: number; - sy2: number; - } - interface GraphMeasure { - measureIndex: number; - left: number; - right: number; - points: SemanticPointInMeasure[]; - } - interface TimewiseGraph { - measures: GraphMeasure[]; + x: number; + y1: number; + y2: number; + index?: number; + tick?: number; + id?: string; } type Matrix$1 = number[][]; - type TickMap = Map; - interface SolutionStatistics { - loss?: number; - solverCredits?: number; - solverTimes?: number; + const BOS_ELEMENT: SemanticElement; + const fractionToElems: (fraction: Fraction$0) => SemanticElement[]; + class SemanticCluster extends SimpleClass { + index?: number; + elements: SemanticElement[]; + matrixH?: Matrix$1; // matrix N x N + _matrixV?: Matrix$1; // matrix N x N + groupsV?: number[][]; // ids array + masks?: [ + boolean[], + boolean[], + boolean[] + ]; // the masks for: [jointer source, jointer target, V] + static elementToJSON(elem: SemanticElement): object; + constructor(data: object); + get sourceMask(): boolean[]; + get targetMask(): boolean[]; + get vMask(): boolean[]; + get compactMatrixH(): Matrix$1; + set compactMatrixH(value: Matrix$1); + get compactMatrixV(): number[]; + set compactMatrixV(value: number[]); + get matrixV(): Matrix$1; + set matrixV(value: Matrix$1); + toJSON(): any; + static mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][]; + mergeOverlapping(): void; + overlappedNoteheads(): [ + number, + number + ][]; + getEvents(): ChordColumn[]; } - class SpartitoMeasure extends SimpleClass { - static className: string; - static blackKeys: string[]; - measureIndex: number; - staffMask: number; - staffGroups: number[][]; - originalRegulationHash?: string; - measureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures - patched: boolean; - discard: boolean; - position: { - systemIndex: number; - localIndex: number; // the measure local index in its system - left: number; - right: number; - staffYs?: number[]; - staffYsFull?: number[]; - }; - backgroundImages: BackgroundImage[]; - events: EventTerm[]; - endEvent: Partial; // the placeholder for end tick - contexts: ContextedTerm[][]; // [staff] - marks: MarkTerm[]; - duration: number; - voices?: number[][]; // [voice, id] - break?: boolean; - pageBreak?: boolean; - basics?: StaffBasic[]; // [staff] - voltaBegin: boolean; - voltaEnd: boolean; - alternative: boolean; - barTypes: Record; - indent: boolean; - solutionStat?: SolutionStatistics; - matrixH: Matrix$1; // matrix N x N [right][left] - matrixV: Matrix$1; // matrix N x N - estimatedDuration: number; - graph: GraphMeasure; - deposit: Record; - static reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[]; - constructor(data: any); - get timeSignature(): Fraction$0; - get keySignature(): number; - get timeSignatureChanged(): boolean; - get doubtfulTimesig(): boolean; - get regulated(): boolean; - get validRegulated(): boolean; - get rows(): EventMeasure[]; - get eventStartX(): number; - get startX(): number; - get width(): number; - get tickMap(): TickMap; - get tickToX(): { - [tick: number]: number; + interface SemanticClusterSetData { + vocab?: string[]; + clusters: SemanticCluster[]; + } + class SemanticClusterSet { + clusters: SemanticCluster[]; + constructor(data?: SemanticClusterSetData); + toJSON(): { + __prototype: string; + vocab: string[]; + clusters: any[]; }; - get tickRates(): number[]; - get tickRatesInStaves(): number[]; - get tickRatesInGroups(): number[]; - get tickTwist(): number; - get eventMap(): Record; - get empty(): boolean; - get hasIllEvent(): boolean; - get brief(): string; - get regulationHash(): string; - // prefer use originalRegulationHash - get regulationHash0(): string; - get regulationHashes(): string[]; - get featureWords(): string[][] | null; - get barType(): MeasureBarType; - get partialDuration(): boolean; - postRegulate(): void; - updateRoundX(): void; - updateContextTick(): void; - asSolution(ref?: SpartitoMeasure): RegulationSolution; - applySolution(solution: RegulationSolution): void; - cleanupRegulation(): void; - regulateTest(): void; - regulateSimple(): void; - regulateEquations(options: EquationPolicy.RegulatorOptions): Promise; - // compute event.tick, event.tickGroup, event.timeWarp, voices, duration - regulate({ policy, ...options }?: RegulationOptions): Promise; - createPatch(): PatchMeasure; - createClusters(): EventCluster[]; - applyClusters(clusters: EventCluster[]): void; } + const expandMatrixByMasks: (matrix: number[], masks: [ + boolean[], + boolean[] + ]) => Matrix$1; + const expandMatrixByMaskTriu: (matrix: number[], mask: boolean[]) => Matrix$1; + const matrixFromGroups: (len: number, groups: number[][]) => Matrix$1; const emptyVoiceFromStaffMeasure: (staff: TermMeasure, chiefVoice?: boolean) => VoiceMeasure; class Spartito extends SimpleClass { static className: string; @@ -5172,51 +5354,6 @@ declare namespace starry { splitToSingleScoresGen(): Generator; splitToSingleScores(): Score[]; } - // NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI - interface EventUIAgent { - readonly id: number; - readonly duration: number; - //ys: number[]; - pitches: TermPitch[]; - rest: RestType; - division: number; - dots: number; - stemDirection: string; - tying: boolean; - tied: boolean; - grace: boolean; // - beam: StemBeam; - timeWarp: string; // - tremolo: number; - tremoloLink: TremoloLink; - glissando: boolean; - arpeggioStyle: ArpeggioStyle; - tick: number; - } - interface MeasureUIAgent { - readonly measureIndex: number; - timeSignature: Fraction$0; - doubtfulTimesig: boolean; - keySignature: number; - //readonly events: EventUIAgent[]; - duration: number; - readonly voices: number[][]; - } - class EditableEvent extends EventTerm { - voice: number; - constructor(data: any); - get agent(): EventUIAgent; - } - class EditableMeasure extends SpartitoMeasure { - static className: string; - static blackKeys: any[]; - events: EditableEvent[]; - constructor(data: any); - syncVoiceToEvents(): void; - syncVoiceFromEvents(): void; - get agent(): MeasureUIAgent; - makeMIDI(bpm?: number): MIDI.MidiData; - } const mod7: (x: any) => number; /* Coordinates: @@ -5266,32 +5403,39 @@ declare namespace starry { yToPitch(y: number): number; yToPitchName(y: number): string; } - interface MeasureEvaluation { - events: number; - validEvents: number; - voiceRugged: boolean; - nullEvents: number; - fakeEvents: number; - warpedEvents: number; - complicatedTimewarp: boolean; - spaceTime: number; - surplusTime: number; - durationRate: number; - beamBroken: boolean; - fractionalWarp: boolean; - irregularWarpsN: number; - irregularTick: boolean; - tickTwist: number; - tickOverlapped: boolean; - graceInVoice: boolean; - graceN: number; - graceDominant: boolean; - perfect: boolean; - fine: boolean; - error: boolean; - qualityScore: number; + interface BeadPicker { + n_seq: number; + quota: number; + cost: number; // duration in milliseconds + predictCluster(cluster: EventCluster, tip: number): Promise; } - const evaluateMeasure: (measure: SpartitoMeasure) => MeasureEvaluation; + interface ClusterEvaluation { + tickErr: number; + twist: number; + residue: number; + endTick: number; + fatalError: boolean; + voiceN: number; + spaceDuration: number; + pretentiousness: number; + loss: number; + } + const solveCluster: (cluster: EventCluster, picker: BeadPicker, logger: Logger, quota?: number, stopLoss?: number, ptFactor?: number) => Promise; + interface BeadSolverOptions { + picker: BeadPicker; + stopLoss?: number; + quotaMax?: number; + quotaFactor?: number; + ptFactor?: number; + logger?: Logger; + } + const solveMeasure: (measure: SpartitoMeasure, options: BeadSolverOptions) => Promise; + interface GlimpseMeasureOptions { + picker: BeadPicker; + resetSignatureForDoubtfulOnly?: boolean; + } + const glimpseMeasure: (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions) => Promise; + const estimateMeasure: (measure: SpartitoMeasure, picker: BeadPicker) => Promise; } interface LayoutResult { detection: starry.PageLayout; diff --git a/backend/omr/dist/regulator.js b/backend/omr/dist/regulator.js index 4bb2d405efedaf1d0ae3bdc3c17524ea9682b864..be395a16aa78f46c5a30c5aa68ecb156082816ff 100644 --- a/backend/omr/dist/regulator.js +++ b/backend/omr/dist/regulator.js @@ -1,7 +1,7 @@ /** * name: backend * version: v1.0.0 - * build time: 4/23/2026, 7:20:50 PM + * build time: 4/30/2026, 6:33:50 PM * system user: camus * git user name: k.l.lambda * git user email: k.l.lambda@gmail.com @@ -16,8 +16,8 @@ var zeromq = require('zeromq'); var portfinder = require('portfinder'); var pythonShell = require('python-shell'); var require$$0 = require('lodash'); -var sha1 = require('js-sha1'); var pick$1 = require('lodash/pick'); +var sha1 = require('js-sha1'); var erf = require('math-erf'); var weakLruCache = require('weak-lru-cache'); var SparkMD5 = require('spark-md5'); @@ -27,8 +27,8 @@ var got = require('got'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); -var sha1__default = /*#__PURE__*/_interopDefaultLegacy(sha1); var pick__default = /*#__PURE__*/_interopDefaultLegacy(pick$1); +var sha1__default = /*#__PURE__*/_interopDefaultLegacy(sha1); var erf__default = /*#__PURE__*/_interopDefaultLegacy(erf); var SparkMD5__default = /*#__PURE__*/_interopDefaultLegacy(SparkMD5); var sharp__default = /*#__PURE__*/_interopDefaultLegacy(sharp); @@ -1501,11645 +1501,11917 @@ class PyClients { } } -var PageLayoutMethod; -(function (PageLayoutMethod) { - PageLayoutMethod["ByLines"] = "ByLines"; - PageLayoutMethod["ByBlocks"] = "ByBlocks"; -})(PageLayoutMethod || (PageLayoutMethod = {})); -var TextType; -(function (TextType) { - TextType["Title"] = "Title"; - TextType["Author"] = "Author"; - TextType["TempoText"] = "TempoText"; - TextType["TempoNumeral"] = "TempoNumeral"; - TextType["TextualMark"] = "TextualMark"; - TextType["Lyric"] = "Lyric"; - TextType["Instrument"] = "Instrument"; - TextType["MeasureNumber"] = "MeasureNumber"; - TextType["Times"] = "Times"; - TextType["Alternation1"] = "Alternation1"; - TextType["Alternation2"] = "Alternation2"; - TextType["Chord"] = "Chord"; - TextType["PageMargin"] = "PageMargin"; - TextType["Other"] = "Other"; -})(TextType || (TextType = {})); - -var SemanticType; -(function (SemanticType) { - // clefs - SemanticType["ClefG"] = "ClefG"; - SemanticType["ClefF"] = "ClefF"; - SemanticType["ClefC"] = "ClefC"; - // noteheads - SemanticType["NoteheadS0"] = "NoteheadS0"; - SemanticType["NoteheadS1"] = "NoteheadS1"; - SemanticType["NoteheadS2"] = "NoteheadS2"; - SemanticType["NoteheadS1stemU"] = "NoteheadS1stemU"; - SemanticType["NoteheadS1stemD"] = "NoteheadS1stemD"; - SemanticType["NoteheadS2stemU"] = "NoteheadS2stemU"; - SemanticType["NoteheadS2stemD"] = "NoteheadS2stemD"; - SemanticType["vline_Stem"] = "vline_Stem"; - // flags - SemanticType["Flag3"] = "Flag3"; - // beams - SemanticType["BeamLeft"] = "BeamLeft"; - SemanticType["BeamContinue"] = "BeamContinue"; - SemanticType["BeamRight"] = "BeamRight"; - // tremolos - SemanticType["TremoloLeft"] = "TremoloLeft"; - SemanticType["TremoloRight"] = "TremoloRight"; - SemanticType["TremoloMiddle"] = "TremoloMiddle"; - // dots (duration) - SemanticType["Dot"] = "Dot"; - // rests - SemanticType["Rest0"] = "Rest0"; - SemanticType["Rest1"] = "Rest1"; - SemanticType["Rest2"] = "Rest2"; - SemanticType["Rest3"] = "Rest3"; - SemanticType["Rest4"] = "Rest4"; - SemanticType["Rest5"] = "Rest5"; - SemanticType["Rest6"] = "Rest6"; - SemanticType["Rest0W"] = "Rest0W"; - SemanticType["RestM1"] = "RestM1"; - // accidentals - SemanticType["AccNatural"] = "AccNatural"; - SemanticType["AccSharp"] = "AccSharp"; - SemanticType["AccDoublesharp"] = "AccDoublesharp"; - SemanticType["AccFlat"] = "AccFlat"; - SemanticType["AccFlatflat"] = "AccFlatflat"; - // volta - SemanticType["vline_VoltaLeft"] = "vline_VoltaLeft"; - SemanticType["vline_VoltaRight"] = "vline_VoltaRight"; - SemanticType["VoltaLeft"] = "VoltaLeft"; - SemanticType["VoltaRight"] = "VoltaRight"; - SemanticType["VoltaAlternativeBegin"] = "VoltaAlternativeBegin"; - //VoltaAlternativeEnd = "VoltaAlternativeEnd", - // vertical bars - SemanticType["BarMeasure"] = "BarMeasure"; - SemanticType["vline_BarMeasure"] = "vline_BarMeasure"; - SemanticType["vline_BarTerminal"] = "vline_BarTerminal"; - SemanticType["vline_BarSegment"] = "vline_BarSegment"; - // slur & tie - SemanticType["SlurBegin"] = "SlurBegin"; - SemanticType["SlurEnd"] = "SlurEnd"; - // time signature - SemanticType["TimesigC44"] = "TimesigC44"; - SemanticType["TimesigC22"] = "TimesigC22"; - SemanticType["TimesigZero"] = "TimesigZero"; - SemanticType["TimesigOne"] = "TimesigOne"; - SemanticType["TimesigTwo"] = "TimesigTwo"; - SemanticType["TimesigThree"] = "TimesigThree"; - SemanticType["TimesigFour"] = "TimesigFour"; - SemanticType["TimesigFive"] = "TimesigFive"; - SemanticType["TimesigSix"] = "TimesigSix"; - SemanticType["TimesigSeven"] = "TimesigSeven"; - SemanticType["TimesigEight"] = "TimesigEight"; - SemanticType["TimesigNine"] = "TimesigNine"; - // octave shifts - SemanticType["OctaveShift8va"] = "OctaveShift8va"; - SemanticType["OctaveShift8vb"] = "OctaveShift8vb"; - SemanticType["OctaveShift8"] = "OctaveShift8"; - SemanticType["OctaveShift0"] = "OctaveShift0"; - // numbers - SemanticType["Zero"] = "Zero"; - SemanticType["One"] = "One"; - SemanticType["Two"] = "Two"; - SemanticType["Three"] = "Three"; - SemanticType["Four"] = "Four"; - SemanticType["Five"] = "Five"; - SemanticType["Six"] = "Six"; - SemanticType["Seven"] = "Seven"; - SemanticType["Eight"] = "Eight"; - SemanticType["Nine"] = "Nine"; - // dynamics - SemanticType["f"] = "f"; - SemanticType["p"] = "p"; - SemanticType["m"] = "m"; - SemanticType["n"] = "n"; - SemanticType["r"] = "r"; - SemanticType["s"] = "s"; - SemanticType["z"] = "z"; - SemanticType["CrescendoBegin"] = "CrescendoBegin"; - SemanticType["CrescendoEnd"] = "CrescendoEnd"; - SemanticType["DecrescendoBegin"] = "DecrescendoBegin"; - SemanticType["DecrescendoEnd"] = "DecrescendoEnd"; - // scripts - SemanticType["ScriptFermata"] = "ScriptFermata"; - SemanticType["ScriptShortFermata"] = "ScriptShortFermata"; - SemanticType["ScriptSforzato"] = "ScriptSforzato"; - SemanticType["ScriptStaccato"] = "ScriptStaccato"; - SemanticType["ScriptStaccatissimo"] = "ScriptStaccatissimo"; - SemanticType["ScriptTurn"] = "ScriptTurn"; - SemanticType["ScriptTrill"] = "ScriptTrill"; - SemanticType["ScriptSegno"] = "ScriptSegno"; - SemanticType["ScriptCoda"] = "ScriptCoda"; - SemanticType["ScriptArpeggio"] = "ScriptArpeggio"; - SemanticType["ScriptPrall"] = "ScriptPrall"; - SemanticType["ScriptMordent"] = "ScriptMordent"; - SemanticType["ScriptMarcato"] = "ScriptMarcato"; - SemanticType["ScriptTenuto"] = "ScriptTenuto"; - SemanticType["ScriptPortato"] = "ScriptPortato"; - // pedal - SemanticType["PedalStar"] = "PedalStar"; - SemanticType["PedalPed"] = "PedalPed"; - // additional annotation - SemanticType["KeyAcc"] = "KeyAcc"; - SemanticType["TempoNotehead"] = "TempoNotehead"; - SemanticType["GraceNotehead"] = "GraceNotehead"; - SemanticType["SignLined"] = "SignLined"; - SemanticType["SignInterval"] = "SignInterval"; - SemanticType["rect_Text"] = "rect_Text"; - SemanticType["rect_Lyric"] = "rect_Lyric"; -})(SemanticType || (SemanticType = {})); -const glyphSemanticMapping = { - 'rests.1': 'Rest1', - 'rests.0o': 'Rest0', - 'rests.1o': 'Rest1', - 'rests.M1': 'RestM1', - 'rests.2': 'Rest2', - 'rests.3': 'Rest3', - 'rests.4': 'Rest4', - 'rests.5': 'Rest5', - 'rests.6': 'Rest6', - 'accidentals.sharp': 'AccSharp', - 'accidentals.doublesharp': 'AccDoublesharp', - 'accidentals.natural': 'AccNatural', - 'accidentals.flat': 'AccFlat', - 'accidentals.flatflat': 'AccFlatflat', - 'dots.dot': 'Dot', - 'scripts.ufermata': 'ScriptFermata', - 'scripts.dfermata': 'ScriptFermata', - 'scripts.ushortfermata': 'ScriptShortFermata', - 'scripts.dshortfermata': 'ScriptShortFermata', - 'scripts.staccato': 'ScriptStaccato', - 'scripts.ustaccatissimo': 'ScriptStaccatissimo', - 'scripts.dstaccatissimo': 'ScriptStaccatissimo', - 'scripts.turn': 'ScriptTurn', - 'scripts.trill': 'ScriptTrill', - 'scripts.segno': 'ScriptSegno', - 'scripts.coda': 'ScriptCoda', - 'scripts.arpeggio': 'ScriptArpeggio', - 'scripts.prall': 'ScriptPrall', - 'scripts.mordent': 'ScriptMordent', - 'scripts.umarcato': 'ScriptMarcato', - 'scripts.dmarcato': 'ScriptMarcato', - 'scripts.uportato': 'ScriptPortato', - 'scripts.dportato': 'ScriptPortato', - 'scripts.tenuto': 'ScriptTenuto', - 'scripts.sforzato': 'ScriptSforzato', - 'clefs.C': 'ClefC', - 'clefs.F': 'ClefF', - 'clefs.G': 'ClefG', - 'clefs.F_change': 'ClefF', - 'clefs.G_change': 'ClefG', - 'timesig.C44': 'TimesigC44', - 'timesig.C22': 'TimesigC22', - 'pedal.*': 'PedalStar', - 'pedal.Ped': 'PedalPed', - 'noteheads.s0': 'NoteheadS0', - 'noteheads.s1': 'NoteheadS1', - 'noteheads.s2': 'NoteheadS2', - f: 'f', - m: 'm', - p: 'p', - r: 'r', - s: 's', - z: 'z', +const recoverJSON = (json, classDict) => { + if (typeof json === 'object') + json = JSON.stringify(json); + return JSON.parse(json, (_, value) => { + if (value && typeof value === 'object' && value.__prototype) { + const Class = classDict[value.__prototype]; + if (Class) { + const { __prototype, ...fields } = value; + return new Class(fields); + } + } + return value; + }); }; -const semanticPriorities = { - ClefG: 0, - ClefF: 0, - TimesigFour: 0, - TimesigThree: 0, - TimesigTwo: 0, - NoteheadS0: 0, - NoteheadS1: 0, - NoteheadS2: 0, - Dot: 0, - vline_BarMeasure: 0, - vline_Stem: 0, - Flag3: 0, - TimesigC44: 1, - TimesigC22: 1, - TimesigEight: 1, - TimesigSix: 1, - AccNatural: 1, - AccSharp: 1, - AccFlat: 1, - KeyAcc: 1, - Rest0: 1, - Rest1: 1, - Rest2: 1, - Rest3: 1, - Rest4: 1, - OctaveShift8: 1, - OctaveShift0: 1, - AccDoublesharp: 2, - AccFlatflat: 2, - TimesigOne: 2, - TimesigNine: 2, - Rest5: 2, - Rest6: 2, - SlurBegin: 2, - SlurEnd: 2, - VoltaLeft: 2, - VoltaRight: 2, - //VoltaAlternativeBegin: 2, - vline_BarTerminal: 2, - vline_BarSegment: 2, - TempoNotehead: 2, - GraceNotehead: 2, - SignLined: 2, - SignInterval: 2, - BeamLeft: 2, - BeamRight: 2, - BeamContinue: 2, - TremoloLeft: 2, - TremoloRight: 2, - TremoloMiddle: 2, - StemTip: 2, - StemHead: 2, - //Rest0W: 3, - f: 3, - p: 3, - m: 3, - ScriptFermata: 3, - ScriptSforzato: 3, - ScriptStaccato: 3, - ScriptStaccatissimo: 3, - ScriptTurn: 3, - ScriptTrill: 3, - ScriptSegno: 3, - ScriptCoda: 3, - ScriptArpeggio: 3, - ScriptPrall: 3, - ScriptMordent: 3, - ScriptTenuto: 3, - PedalStar: 3, - PedalPed: 3, - TimesigFive: 3, - TimesigSeven: 3, - TimesigZero: 3, - One: 3, - Two: 3, - Three: 3, - Four: 3, - Five: 3, - rect_Text: 3, - rect_Lyric: 3, - CrescendoBegin: 3, - CrescendoEnd: 3, - DecrescendoBegin: 3, - DecrescendoEnd: 3, - RestM1: 4, - ClefC: 4, - ScriptShortFermata: 4, - ScriptMarcato: 4, - ScriptPortato: 4, - s: 4, - r: 4, - z: 4, - Zero: 4, - Six: 4, - Seven: 4, - Eight: 4, - Nine: 4, +const deepCopy = (o, dict = null) => { + dict = dict || new Map(); + if (dict.get(o)) + return dict.get(o); + if (Array.isArray(o)) { + const result = []; + dict.set(o, result); + o.forEach((e) => result.push(deepCopy(e, dict))); + return result; + } + else if (o && typeof o === 'object') { + const result = {}; + dict.set(o, result); + Object.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict))); + Object.setPrototypeOf(result, o.__proto__); + return result; + } + return o; }; -const NOTEHEAD_WIDTHS = { - NoteheadS0: 0.913 * 2, - NoteheadS1: 0.632 * 2, - NoteheadS2: 0.599 * 2, +class SimpleClass { + assign(data) { + if (data) + Object.assign(this, data); + } + toJSON() { + const cls = this.constructor; + const serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key))); + const fields = serializedKeys ? pick__default["default"](this, serializedKeys) : this; + return { + __prototype: cls.className, + ...fields, + }; + } + deepCopy() { + return deepCopy(this); + } +} + +var Sylvester = {}; + +Sylvester.Matrix = function () {}; + +Sylvester.Matrix.create = function (elements) { + var M = new Sylvester.Matrix(); + return M.setElements(elements) }; -const glyphCenters = { - //"clefs.C": { x: 1.3 }, - 'clefs.F': { x: 1.06 }, - 'clefs.G': { x: 1.3 }, - 'clefs.F_change': { x: 0.87 }, - 'clefs.G_change': { x: 1.07 }, - 'timesig.C44': { x: 0.9 }, - 'timesig.C22': { x: 0.9 }, - zero: { x: 0.7, y: -1 }, - one: { x: 0.7, y: -1 }, - two: { x: 0.7, y: -1 }, - three: { x: 0.7, y: -1 }, - four: { x: 0.7, y: -1 }, - five: { x: 0.7, y: -1 }, - six: { x: 0.7, y: -1 }, - seven: { x: 0.7, y: -1 }, - eight: { x: 0.7, y: -1 }, - nine: { x: 0.7, y: -1 }, - 'accidentals.sharp': { x: 0.55 }, - 'accidentals.doublesharp': { x: 0.5 }, - 'accidentals.natural': { x: 0.3 }, - 'accidentals.flat': { x: 0.3 }, - 'accidentals.flatflat': { x: 0.5 }, - 'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 }, - 'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 }, - 'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 }, - 'rests.0': { x: 0.75, y: 1 }, - 'rests.1': { x: 0.75 }, - 'rests.0o': { x: 0.75, y: 1 }, - 'rests.1o': { x: 0.75 }, - 'rests.M1': { x: 0.75, y: 1 }, - 'rests.2': { x: 0.5 }, - 'rests.3': { x: 0.5 }, - 'rests.4': { x: 0.5 }, - 'rests.5': { x: 0.5 }, - 'rests.6': { x: 0.5 }, - f: { x: 0.6, y: -0.5 }, - m: { x: 0.9, y: -0.5 }, - p: { x: 0.5, y: -0.5 }, - r: { x: 0.5, y: -0.5 }, - s: { x: 0.5, y: -0.5 }, - z: { x: 0.5, y: -0.5 }, - 'scripts.trill': { y: -0.5 }, - 'scripts.segno': { x: 0, y: 0 }, - 'scripts.coda': { x: 0, y: 0 }, - 'scripts.arpeggio': { x: 0.5, y: -0.5 }, - 'pedal.*': { x: 0.78, y: -0.78 }, - 'pedal.Ped': { x: 1.6, y: -0.7 }, -}; -const ONE_D_SEMANTICS = [ - 'OctaveShift8va', - 'OctaveShift8vb', - 'OctaveShift8', - 'OctaveShift0', - 'vline_VoltaLeft', - 'vline_VoltaRight', - 'VoltaAlternativeBegin', - 'vline_BarMeasure', - 'vline_BarTerminal', - 'vline_BarSegment', -]; -const SYSTEM_SEMANTIC_TYPES = [ - SemanticType.BarMeasure, - SemanticType.vline_BarMeasure, - SemanticType.vline_BarTerminal, - SemanticType.vline_BarSegment, - SemanticType.vline_VoltaLeft, - SemanticType.vline_VoltaRight, - SemanticType.VoltaAlternativeBegin, -]; -const st = SemanticType; -const CONFLICTION_GROUPS = [ - [st.NoteheadS0, st.NoteheadS1, st.NoteheadS2], - [st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo], - [ - st.TimesigZero, - st.TimesigOne, - st.TimesigTwo, - st.TimesigThree, - st.TimesigFour, - st.TimesigFive, - st.TimesigSix, - st.TimesigSeven, - st.TimesigEight, - st.TimesigNine, - ], - [st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1], - [st.SignInterval, st.SignLined], - [st.BeamLeft, st.BeamContinue, st.BeamRight], -]; -const STAMP_SEMANTICS = [ - st.ClefG, - st.ClefF, - st.ClefC, - st.NoteheadS0, - st.NoteheadS1, - st.NoteheadS2, - st.Dot, - st.Rest0, - st.Rest1, - st.Rest2, - st.Rest3, - st.Rest4, - st.Rest5, - st.Rest6, - st.RestM1, - st.AccNatural, - st.AccSharp, - st.AccDoublesharp, - st.AccFlat, - st.AccFlatflat, - st.TimesigC44, - st.TimesigC22, - st.TimesigZero, - st.TimesigOne, - st.TimesigTwo, - st.TimesigThree, - st.TimesigFour, - st.TimesigFive, - st.TimesigSix, - st.TimesigSeven, - st.TimesigEight, - st.TimesigNine, - st.One, - st.Two, - st.Three, - st.Four, - st.Five, - st.OctaveShift8, - //st.OctaveShift15, - st.OctaveShift0, - st.f, - st.p, - st.m, - st.n, - st.r, - st.s, - st.z, - st.ScriptFermata, - st.ScriptShortFermata, - st.ScriptSforzato, - st.ScriptStaccato, - st.ScriptStaccatissimo, - st.ScriptTurn, - st.ScriptTrill, - st.ScriptSegno, - st.ScriptCoda, - st.ScriptArpeggio, - st.ScriptPrall, - st.ScriptMordent, - st.ScriptMarcato, - st.ScriptTenuto, - st.ScriptPortato, - st.PedalStar, - st.PedalPed, -]; -// [cx, cy, width, height] -const STAMP_RECTS = { - ClefG: [-0.0625, -1.125, 3.6, 8.6], - ClefF: [0.25, 0.5625, 3.6, 3.8], - ClefC: [0.25, 0, 3.25, 4.5], - NoteheadS0: [0.0625, 0, 2.55, 1.4], - NoteheadS1: [0.0625, 0, 1.8, 1.4], - NoteheadS2: [0.0625, -0.0625, 1.65, 1.35], - Dot: [0.25, 0, 0.6, 0.6], - Rest0: [0, -0.75, 3.25, 0.9], - Rest1: [0, -0.25, 3.25, 0.9], - Rest2: [-0.0625, -0.1875, 1.6, 3.375], - Rest3: [0, 0.0625, 1.2, 2.25], - Rest4: [0.0625, 0.5625, 1.65, 3.375], - Rest5: [0.0625, 0.0625, 1.95, 4.375], - Rest6: [0.0625, 0.5625, 1.95, 5.375], - RestM1: [-0.4375, -1.5, 0.75, 1.2], - AccNatural: [0, 0, 0.9, 3.5], - AccSharp: [0, 0, 1.5, 3.5], - AccDoublesharp: [0, 0, 1.5, 1.5], - AccFlat: [0, -0.5625, 1.2, 3.125], - AccFlatflat: [0.1875, -0.5625, 1.95, 3.125], - TimesigC44: [-0.0625, 0, 2.25, 2.3], - TimesigC22: [-0.0625, 0, 2.25, 3.2], - TimesigZero: [0, 0, 1.8, 2.2], - TimesigOne: [-0.125, 0, 1.5, 2.2], - TimesigTwo: [0, 0, 2.2, 2.2], - TimesigThree: [-0.0625, 0, 1.9, 2.4], - TimesigFour: [0.0625, 0, 1.95, 2.2], - TimesigFive: [0, 0, 1.8, 2.3], - TimesigSix: [0, 0, 2.0, 2.4], - TimesigSeven: [0, 0, 1.8, 2.2], - TimesigEight: [0, 0, 1.9, 2.2], - TimesigNine: [0, 0, 1.9, 2.2], - One: [-0.0625, 0, 0.75, 1.6], - Two: [0, 0, 1.2, 1.6], - Three: [0, 0, 1.2, 1.6], - Four: [0, 0, 1.2, 1.6], - Five: [0, 0, 1.2, 1.6], - OctaveShift8: [2.125, -0.1875, 4.75, 3.6], - OctaveShift0: [-0.4, 0, 1.8, 4.2], - f: [0.0625, -0.125, 2.55, 3], - p: [-0.0625, 0.25, 2.55, 2.1], - m: [-0.125, -0.0625, 2.4, 1.35], - n: [-0.3125, -0.0625, 1.95, 1.35], - r: [0, -0.125, 1.5, 1.5], - s: [0, -0.0625, 1.2, 1.35], - z: [0.0625, 0, 1.35, 1.5], - ScriptFermata: [0, 0, 3.25, 3.9], - ScriptShortFermata: [0, 0, 2.4, 4.95], - ScriptSforzato: [-0.0625, 0, 2.5, 1.2], - ScriptStaccato: [0, -0.0625, 0.6, 0.45], - ScriptStaccatissimo: [0, 0, 1.2, 2.6], - ScriptTurn: [0, 0, 2.7, 1.5], - ScriptTrill: [-0.125, -0.5, 3, 2.7], - ScriptSegno: [0, 0, 2.4, 3.5], - ScriptCoda: [0, 0, 2.7, 3.25], - ScriptArpeggio: [-0.0625, 0, 1.05, 1.8], - ScriptPrall: [0, 0, 2.4, 1.2], - ScriptMordent: [0, 0, 2.4, 1.5], - ScriptMarcato: [0, 0, 1.2, 2.475], - ScriptTenuto: [0, -0.0625, 1.5, 0.15], - ScriptPortato: [0, 0, 1.5, 1.65], - PedalStar: [0, 0, 3.2, 3.2], - PedalPed: [0, -0.25, 4.7, 2.4], -}; -const hashSemanticPoint = (systemIndex, staffIndex, point) => { - const x = Math.round(point.x * 10); - const y = Math.round(point.y * 10); - const source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`; - const hash = sha1__default["default"].array(source).slice(12); // clip to 12 bytes - const id = globalThis.btoa(String.fromCharCode(...hash)).substring(0, 11); - point.id = id; - return id; -}; -const hashPageSemanticPoint = (pageName, point) => { - const x = Math.round(point.x); - const y = Math.round(point.y); - const source = `p-${pageName}|${point.semantic}|${x}|${y}`; - const hash = sha1__default["default"].array(source).slice(12); // clip to 12 bytes - const id = globalThis.btoa(String.fromCharCode(...hash)).substring(0, 11); - point.id = id; - return id; + +Sylvester.Matrix.I = function (n) { + var els = [], + i = n, + j; + while (i--) { + j = n; + els[i] = []; + while (j--) { + els[i][j] = i === j ? 1 : 0; + } + } + return Sylvester.Matrix.create(els) }; -var TokenType; -(function (TokenType) { - // clefs - TokenType["ClefG"] = "clefs-G"; - TokenType["ClefF"] = "clefs-F"; - TokenType["ClefC"] = "clefs-C"; - // time signature - TokenType["TimesigC44"] = "timesig-C44"; - TokenType["TimesigC22"] = "timesig-C22"; - TokenType["TimesigZero"] = "zero|timesig0"; - TokenType["TimesigOne"] = "one|timesig1"; - TokenType["TimesigTwo"] = "two|timesig2"; - TokenType["TimesigThree"] = "three|timesig3"; - TokenType["TimesigFour"] = "four|timesig4"; - TokenType["TimesigFive"] = "five|timesig5"; - TokenType["TimesigSix"] = "six|timesig6"; - TokenType["TimesigSeven"] = "seven|timesig7"; - TokenType["TimesigEight"] = "eight|timesig8"; - TokenType["TimesigNine"] = "nine|timesig9"; - // octave shifts - TokenType["OctaveShift8va"] = "octave-a"; - TokenType["OctaveShift8vb"] = "octave-b"; - TokenType["OctaveShift0"] = "octave-0"; - // numbers - TokenType["Zero"] = "zero|n0"; - TokenType["One"] = "one|n1"; - TokenType["Two"] = "two|n2"; - TokenType["Three"] = "three|n3"; - TokenType["Four"] = "four|n4"; - TokenType["Five"] = "five|n5"; - TokenType["Six"] = "six|n6"; - TokenType["Seven"] = "seven|n7"; - TokenType["Eight"] = "eight|n8"; - TokenType["Nine"] = "nine|n9"; - // accidentals - TokenType["AccNatural"] = "accidentals-natural"; - TokenType["AccSharp"] = "accidentals-sharp"; - TokenType["AccDoublesharp"] = "accidentals-doublesharp"; - TokenType["AccFlat"] = "accidentals-flat"; - TokenType["AccFlatflat"] = "accidentals-flatflat"; - TokenType["KeyNatural"] = "accidentals-natural|key-natural"; - TokenType["KeySharp"] = "accidentals-sharp|key-sharp"; - TokenType["KeyFlat"] = "accidentals-flat|key-flat"; - // noteheads - TokenType["NoteheadS0"] = "noteheads-s0"; - TokenType["NoteheadS1"] = "noteheads-s1"; - TokenType["NoteheadS2"] = "noteheads-s2"; - TokenType["NoteheadS1stemU"] = "noteheads-s1|noteheads-s1-u"; - TokenType["NoteheadS1stemD"] = "noteheads-s1|noteheads-s1-d"; - TokenType["NoteheadS2stemU"] = "noteheads-s2|noteheads-s2-u"; - TokenType["NoteheadS2stemD"] = "noteheads-s2|noteheads-s2-d"; - // rests - TokenType["Rest0"] = "rests-0o"; - TokenType["Rest1"] = "rests-1o"; - TokenType["Rest2"] = "rests-2"; - TokenType["Rest3"] = "rests-3"; - TokenType["Rest4"] = "rests-4"; - TokenType["Rest5"] = "rests-5"; - TokenType["Rest6"] = "rests-6"; - TokenType["Rest0W"] = "rests-0"; - TokenType["RestM1"] = "rests-M1"; - // flags - TokenType["Flag3"] = "flags-u3"; - TokenType["Flag4"] = "flags-u4"; - TokenType["Flag5"] = "flags-u5"; - TokenType["Flag6"] = "flags-u6"; - TokenType["Flag7"] = "flags-u7"; - TokenType["Flag8"] = "flags-u8"; - // beams - TokenType["BeamLeft"] = "|beam-left"; - TokenType["BeamRight"] = "|beam-right"; - TokenType["BeamContinue"] = "|beam-continue"; - // tremolos - TokenType["TremoloLeft"] = "|tremolo-left"; - TokenType["TremoloRight"] = "|tremolo-right"; - TokenType["TremoloMiddle"] = "|tremolo-middle"; - // slur & tie - TokenType["SlurBegin"] = "|slur-begin"; - TokenType["SlurEnd"] = "|slur-end"; - TokenType["TieBegin"] = "|tie-begin"; - TokenType["TieEnd"] = "|tie-end"; - // volta - TokenType["VoltaLeft"] = "|volta-left"; - TokenType["VoltaRight"] = "|volta-right"; - TokenType["VoltaAlternativeBegin"] = "|volta-alter-begin"; - //VoltaAlternativeEnd = "|volta-alter-end", - // vertical bars - //BarMeasure = "|bar-measure", - TokenType["BarTerminal"] = "|bar-terminal"; - TokenType["BarSegment"] = "|bar-segment"; - // dots (duration) - TokenType["Dot"] = "|dot"; - TokenType["DotDot"] = "|dotdot"; - // dynamics - TokenType["f"] = "f"; - TokenType["p"] = "p"; - TokenType["m"] = "m"; - TokenType["r"] = "r"; - TokenType["s"] = "s"; - TokenType["z"] = "z"; - // - TokenType["WedgeCrescendo"] = "|wedge-crescendo"; - TokenType["WedgeDiminuendo"] = "|wedge-diminuendo"; - TokenType["WedgeClose"] = "|wedge-close"; - TokenType["CrescendoBegin"] = "|wedge-crescendo"; - TokenType["DecrescendoBegin"] = "|wedge-diminuendo"; - TokenType["CrescendoEnd"] = "|wedge-close"; - TokenType["DecrescendoEnd"] = "|wedge-close"; - // scripts - TokenType["ScriptFermata"] = "scripts-ufermata"; - TokenType["ScriptShortFermata"] = "scripts-ushortfermata"; - TokenType["ScriptSforzato"] = "scripts-sforzato"; - TokenType["ScriptStaccato"] = "scripts-staccato"; - TokenType["ScriptStaccatissimo"] = "scripts-ustaccatissimo"; - TokenType["ScriptTurn"] = "scripts-turn"; - TokenType["ScriptTrill"] = "scripts-trill"; - TokenType["ScriptSegno"] = "scripts-segno"; - TokenType["ScriptCoda"] = "scripts-coda"; - TokenType["ScriptArpeggio"] = "scripts-arpeggio"; - TokenType["ScriptPrall"] = "scripts-prall"; - TokenType["ScriptMordent"] = "scripts-mordent"; - TokenType["ScriptMarcato"] = "scripts-umarcato"; - TokenType["ScriptTenuto"] = "scripts-tenuto"; - TokenType["ScriptPortato"] = "scripts-uportato"; - // pedal - TokenType["PedalStar"] = "pedal-star"; - TokenType["PedalPed"] = "pedal-Ped"; - TokenType["Text"] = "|text"; - TokenType["GraceNotehead"] = "|grace-notehead"; -})(TokenType || (TokenType = {})); -// alias -const tt = TokenType; -const TokenTypes = Object.values(TokenType); -const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t)); -const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t)); -const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t)); -const TokenTimesigsN = TokenTypes.filter((t) => /timesig\d/.test(t)); -const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t)); -const TokenNumbers = TokenTypes.filter((t) => /n\d/.test(t)); -const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t)); -const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t)); -const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2]; -const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t)); -const TokenRests = TokenTypes.filter((t) => /rests-/.test(t)); -const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t)); -const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t)); -const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t)); -const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t)); -const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t)); -const TokenDots = [tt.Dot, tt.DotDot]; -const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd]; -const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t)); -const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t)); -const TokenAccessories = [ - ...TokenNumbers, - ...TokenDynamics, - ...TokenWedges, - ...TokenPedals, - ...TokenArcs, - tt.ScriptFermata, - tt.ScriptShortFermata, - tt.ScriptSforzato, - tt.ScriptStaccato, - tt.ScriptStaccatissimo, - tt.ScriptTurn, - tt.ScriptTrill, - tt.ScriptPrall, - tt.ScriptMordent, - tt.ScriptMarcato, - tt.ScriptTenuto, - tt.ScriptPortato, -]; -const TokenDirectionless = [...TokenPedals]; -const TokenGlyphs = [ - ...TokenClefs, - ...TokenTimesigs, - ...TokenNumbers, - ...TokenAccidentals, - tt.NoteheadS0, - tt.NoteheadS1, - tt.NoteheadS2, - ...TokenRests, - ...TokenDynamics, - ...TokenScripts, - ...TokenPedals, - ...TokenDots, -]; -const TOKEN_Y_ROUND = {}; -TokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1)); -TokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1)); -TokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); -TokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); -TokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); -TokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); -const TOKEN_Y_FIXED = {}; -TokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0)); -TokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0)); -class Token { - constructor(data) { - Object.assign(this, data); - } - get typeId() { - return this.type.split('|').reverse()[0]; - } - get isPredicted() { - return Number.isFinite(this.confidence); +Sylvester.Matrix.prototype = { + dup: function () { + return Sylvester.Matrix.create(this.elements) + }, + + isSquare: function () { + var cols = this.elements.length === 0 ? 0 : this.elements[0].length; + return this.elements.length === cols + }, + + toRightTriangular: function () { + if (this.elements.length === 0) return Sylvester.Matrix.create([]) + var M = this.dup(), + els; + var n = this.elements.length, + i, + j, + np = this.elements[0].length, + p; + for (i = 0; i < n; i++) { + if (M.elements[i][i] === 0) { + for (j = i + 1; j < n; j++) { + if (M.elements[j][i] !== 0) { + els = []; + for (p = 0; p < np; p++) { + els.push(M.elements[i][p] + M.elements[j][p]); + } + M.elements[i] = els; + break + } + } + } + if (M.elements[i][i] !== 0) { + for (j = i + 1; j < n; j++) { + var multiplier = M.elements[j][i] / M.elements[i][i]; + els = []; + for (p = 0; p < np; p++) { + // Elements with column numbers up to an including the number of the + // row that we're subtracting can safely be set straight to zero, + // since that's the point of this routine and it avoids having to + // loop over and correct rounding errors later + els.push( + p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier + ); + } + M.elements[j] = els; + } + } } - get isNotehead() { - return TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0; + return M + }, + + determinant: function () { + if (this.elements.length === 0) { + return 1 } - get isContexted() { - return (TokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)); + if (!this.isSquare()) { + return null } - get isAccessory() { - return TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type); + var M = this.toRightTriangular(); + var det = M.elements[0][0], + n = M.elements.length; + for (var i = 1; i < n; i++) { + det = det * M.elements[i][i]; } - get division() { - switch (this.type) { - case tt.NoteheadS0: - return 0; - case tt.NoteheadS1stemU: - case tt.NoteheadS1stemD: - return 1; - case tt.NoteheadS2stemU: - case tt.NoteheadS2stemD: - return 2; - case tt.Flag3: - return 3; - case tt.Flag4: - return 4; - case tt.Flag5: - return 5; - case tt.Flag6: - return 6; - case tt.Flag7: - return 7; - case tt.Flag8: - return 8; - case tt.RestM1: - return -1; - case tt.Rest0: - return 0; - case tt.Rest1: - return 1; - case tt.Rest2: - return 2; - case tt.Rest3: - return 3; - case tt.Rest4: - return 4; - case tt.Rest5: - return 5; - case tt.Rest6: - return 6; - // TODO: - //case tt.Rest0W: - // return 0; - } - return null; + return det + }, + + isSingular: function () { + return this.isSquare() && this.determinant() === 0 + }, + + augment: function (matrix) { + if (this.elements.length === 0) { + return this.dup() } - get dots() { - switch (this.type) { - case tt.Dot: - return 1; - case tt.DotDot: - return 2; - } - return null; + var M = matrix.elements || matrix; + if (typeof M[0][0] === 'undefined') { + M = Sylvester.Matrix.create(M).elements; } - get direction() { - switch (this.type) { - case tt.NoteheadS1stemU: - case tt.NoteheadS2stemU: - return 'u'; - case tt.NoteheadS1stemD: - case tt.NoteheadS2stemD: - return 'd'; - } - return null; + var T = this.dup(), + cols = T.elements[0].length; + var i = T.elements.length, + nj = M[0].length, + j; + if (i !== M.length) { + return null } - get width() { - switch (this.type) { - case tt.NoteheadS0: - return NOTEHEAD_WIDTHS.NoteheadS0; - case tt.NoteheadS1stemU: - case tt.NoteheadS1stemD: - return NOTEHEAD_WIDTHS.NoteheadS1; - case tt.NoteheadS2stemU: - case tt.NoteheadS2stemD: - return NOTEHEAD_WIDTHS.NoteheadS2; - } + while (i--) { + j = nj; + while (j--) { + T.elements[i][cols + j] = M[i][j]; + } } - get left() { - switch (this.type) { - case tt.NoteheadS0: - return this.x - this.width / 2; - case tt.NoteheadS1stemU: - case tt.NoteheadS2stemU: - return this.x - this.width; - case tt.NoteheadS1stemD: - case tt.NoteheadS2stemD: - return this.x; - } - return this.x; + return T + }, + + inverse: function () { + if (this.elements.length === 0) { + return null } - get right() { - switch (this.type) { - case tt.NoteheadS0: - return this.x + this.width / 2; - case tt.NoteheadS1stemU: - case tt.NoteheadS2stemU: - return this.x; - case tt.NoteheadS1stemD: - case tt.NoteheadS2stemD: - return this.x + this.width; - } - return this.x; + if (!this.isSquare() || this.isSingular()) { + return null } - get voiceIndices() { - if (!this.voice || this.voice < 0) - return []; - return Array(Math.floor(Math.log2(this.voice)) + 1) - .fill(null) - .reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []); - } -} -Token.className = 'Token'; -class TextToken extends Token { - constructor(data) { - super(data); - Object.assign(this, data); - } - get width() { - return this.width_; - } - set width(value) { - this.width_ = value; + var n = this.elements.length, + i = n, + j; + var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular(); + var np = M.elements[0].length, + p, + els, + divisor; + var inverse_elements = [], + new_element; + // Sylvester.Matrix is non-singular so there will be no zeros on the + // diagonal. Cycle through rows from last to first. + while (i--) { + // First, normalise diagonal elements to 1 + els = []; + inverse_elements[i] = []; + divisor = M.elements[i][i]; + for (p = 0; p < np; p++) { + new_element = M.elements[i][p] / divisor; + els.push(new_element); + // Shuffle off the current row of the right hand side into the results + // array as it will not be modified by later runs through this loop + if (p >= n) { + inverse_elements[i].push(new_element); + } + } + M.elements[i] = els; + // Then, subtract this row from those above it to give the identity matrix + // on the left hand side + j = i; + while (j--) { + els = []; + for (p = 0; p < np; p++) { + els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]); + } + M.elements[j] = els; + } } -} + return Sylvester.Matrix.create(inverse_elements) + }, -const recoverJSON = (json, classDict) => { - if (typeof json === 'object') - json = JSON.stringify(json); - return JSON.parse(json, (_, value) => { - if (value && typeof value === 'object' && value.__prototype) { - const Class = classDict[value.__prototype]; - if (Class) { - const { __prototype, ...fields } = value; - return new Class(fields); - } + setElements: function (els) { + var i, + j, + elements = els.elements || els; + if (elements[0] && typeof elements[0][0] !== 'undefined') { + i = elements.length; + this.elements = []; + while (i--) { + j = elements[i].length; + this.elements[i] = []; + while (j--) { + this.elements[i][j] = elements[i][j]; } - return value; - }); -}; -const deepCopy = (o, dict = null) => { - dict = dict || new Map(); - if (dict.get(o)) - return dict.get(o); - if (Array.isArray(o)) { - const result = []; - dict.set(o, result); - o.forEach((e) => result.push(deepCopy(e, dict))); - return result; + } + return this } - else if (o && typeof o === 'object') { - const result = {}; - dict.set(o, result); - Object.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict))); - Object.setPrototypeOf(result, o.__proto__); - return result; + var n = elements.length; + this.elements = []; + for (i = 0; i < n; i++) { + this.elements.push([elements[i]]); } - return o; + return this + }, }; -class SimpleClass { - assign(data) { - if (data) - Object.assign(this, data); - } - toJSON() { - const cls = this.constructor; - const serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key))); - const fields = serializedKeys ? pick__default["default"](this, serializedKeys) : this; - return { - __prototype: cls.className, - ...fields, - }; - } - deepCopy() { - return deepCopy(this); - } -} -var LayoutType; -(function (LayoutType) { - LayoutType["Ordinary"] = "ordinary"; - LayoutType["Full"] = "full"; - LayoutType["Conservative"] = "conservative"; - LayoutType["Once"] = "once"; -})(LayoutType || (LayoutType = {})); -const spreadMeasureSeq = (seq, type = LayoutType.Ordinary) => [].concat(...seq.map((layout) => layout.serialize(type))); -const seqToCode = (seq, { withBrackets = false } = {}) => { - //const code = seq.map(layout => layout.code).join(", "); - let code = ''; - let inRange = false; - for (let i = 0; i < seq.length; ++i) { - const middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout; - if (middle) { - if (!inRange) { - code += '..'; - inRange = true; - } - } - else { - if (i > 0 && !inRange) - code += ', '; - inRange = false; - code += seq[i].code; - } - } - return withBrackets ? `[${code}]` : code; +var matrixInverse = function (elements) { + const mat = Sylvester.Matrix.create(elements).inverse(); + if (mat !== null) { + return mat.elements + } else { + return null + } }; -class SingleMLayout extends SimpleClass { - static from(measure) { - const layout = new SingleMLayout(); - layout.measure = measure; - return layout; - } - constructor(data = undefined) { - super(); - this.assign(data); - } - serialize() { - return [this.measure]; - } - get seq() { - return [this]; - } - get code() { - return this.measure.toString(); - } -} -SingleMLayout.className = 'SingleMLayout'; -class BlockMLayout extends SimpleClass { - static trimSeq(seq) { - const seq2 = []; - for (const layout of seq) { - if (layout instanceof BlockMLayout) { - for (const sub of layout.seq) - seq2.push(sub); - } - else - seq2.push(layout); - } - // reduce duplicated or backwards single measures - const seq3 = []; - let measure = null; - for (const layout of seq2) { - if (layout instanceof SingleMLayout) { - if (layout.measure > measure) { - seq3.push(layout); - measure = layout.measure; - } - } - else - seq3.push(layout); - } - return seq3; - } - static fromSeq(seq) { - const layout = new BlockMLayout(); - layout.seq = BlockMLayout.trimSeq(seq); - return layout; - } - constructor(data = undefined) { - super(); - this.assign(data); - } - serialize(type) { - return spreadMeasureSeq(this.seq, type); - } - get code() { - return seqToCode(this.seq, { withBrackets: true }); - } -} -BlockMLayout.className = 'BlockMLayout'; -class VoltaMLayout extends SimpleClass { - constructor(data = undefined) { - super(); - this.assign(data); - } - serialize(type) { - const bodySeq = spreadMeasureSeq(this.body); - if (this.alternates) { - const alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq)); - const lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1]; - switch (type) { - case LayoutType.Ordinary: - return bodySeq.concat(...alternateSeqs); - case LayoutType.Conservative: - case LayoutType.Full: { - const priorSeq = [].concat(...Array(this.times - 1) - .fill(null) - .map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])); - return [...priorSeq, ...bodySeq, ...lastAlternateSeq]; - } - case LayoutType.Once: - return [...bodySeq, ...lastAlternateSeq]; - } - } - else { - switch (type) { - case LayoutType.Ordinary: - case LayoutType.Conservative: - case LayoutType.Once: - return bodySeq; - case LayoutType.Full: - return [].concat(...Array(this.times) - .fill(null) - .map(() => bodySeq)); - } - } - console.warn('the current case not handled:', type, this); - } - get seq() { - const alternates = this.alternates ? this.alternates[this.alternates.length - 1] : []; - return [...this.body, ...alternates]; - } - get code() { - const body = seqToCode(this.body, { withBrackets: true }); - let code = `${this.times}*${body}`; - if (this.alternates) - code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}'; - return code; - } -} -VoltaMLayout.className = 'VoltaMLayout'; -class ABAMLayout extends SimpleClass { - constructor(data = undefined) { - super(); - this.assign(data); - } - serialize(type) { - const seqA = this.main.serialize(type); - const seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once); - const seqB = spreadMeasureSeq(this.rest, type); - switch (type) { - case LayoutType.Ordinary: // A B - return [...seqA, ...seqB]; - case LayoutType.Once: // B A' - return [...seqB, ...seqA_]; - case LayoutType.Conservative: // A B A' - case LayoutType.Full: // A B A' - return [...seqA, ...seqB, ...seqA_]; - default: - console.warn('the current case not handled:', type, this); - } - } - get seq() { - return [this.main, ...this.rest]; - } - get code() { - return '<' + this.main.code + ', ' + seqToCode(this.rest) + '>'; - } -} -ABAMLayout.className = 'ABAMLayout'; - -var measureLayout = /*#__PURE__*/Object.freeze({ - __proto__: null, - get LayoutType () { return LayoutType; }, - SingleMLayout: SingleMLayout, - BlockMLayout: BlockMLayout, - VoltaMLayout: VoltaMLayout, - ABAMLayout: ABAMLayout -}); - -// @ts-nocheck -/* parser generated by jison 0.4.18 */ -/* - Returns a Parser object of the following structure: - - Parser: { - yy: {} - } - Parser.prototype: { - yy: {}, - trace: function(), - symbols_: {associative list: name ==> number}, - terminals_: {associative list: number ==> name}, - productions_: [...], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), - table: [...], - defaultActions: {...}, - parseError: function(str, hash), - parse: function(input), - - lexer: { - EOF: 1, - parseError: function(str, hash), - setInput: function(input), - input: function(), - unput: function(str), - more: function(), - less: function(n), - pastInput: function(), - upcomingInput: function(), - showPosition: function(), - test_match: function(regex_match_array, rule_index), - next: function(), - lex: function(), - begin: function(condition), - popState: function(), - _currentRules: function(), - topState: function(), - pushState: function(condition), - - options: { - ranges: boolean (optional: true ==> token location info will include a .range[] member) - flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) - backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) - }, - - performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), - rules: [...], - conditions: {associative list: name ==> set}, - } - } - - - token location info (@$, _$, etc.): { - first_line: n, - last_line: n, - first_column: n, - last_column: n, - range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) - } - - - the parseError function receives a 'hash' object with these members for lexer and parser errors: { - text: (matched text) - token: (the produced terminal token, if any) - line: (yylineno) - } - while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { - loc: (yylloc) - expected: (string describing the set of expected tokens) - recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) - } -*/ -var parser$1 = (function () { - var o = function (k, v, o, l) { - for (o = o || {}, l = k.length; l--; o[k[l]] = v) - ; - return o; - }, $V0 = [1, 13], $V1 = [1, 16], $V2 = [1, 15], $V3 = [1, 26], $V4 = [1, 29], $V5 = [1, 28], $V6 = [1, 30], $V7 = [5, 13, 22, 27, 29], $V8 = [2, 15], $V9 = [1, 32], $Va = [5, 14, 21, 22, 27, 28, 29]; - var parser = { - trace: function trace() { }, - yy: {}, - symbols_: { - error: 2, - start_symbol: 3, - measure_layout: 4, - EOF: 5, - index_wise_measure_layout: 6, - 'i:': 7, - 's:': 8, - segment_wise_measure_layout: 9, - iw_sequence: 10, - iw_item: 11, - range: 12, - ',': 13, - UNSIGNED: 14, - '..': 15, - single: 16, - iw_block_item: 17, - iw_volta: 18, - iw_aba: 19, - iw_block: 20, - '[': 21, - ']': 22, - '*': 23, - iw_optional_alternates: 24, - iw_alternates: 25, - '{': 26, - '}': 27, - '<': 28, - '>': 29, - sw_sequence: 30, - sw_item: 31, - segment: 32, - sw_block_item: 33, - sw_volta: 34, - sw_aba: 35, - sw_block: 36, - sw_optional_alternates: 37, - sw_alternates: 38, - $accept: 0, - $end: 1, - }, - terminals_: { - 2: 'error', - 5: 'EOF', - 7: 'i:', - 8: 's:', - 13: ',', - 14: 'UNSIGNED', - 15: '..', - 21: '[', - 22: ']', - 23: '*', - 26: '{', - 27: '}', - 28: '<', - 29: '>', - }, - productions_: [ - 0, - [3, 2], - [4, 1], - [4, 2], - [4, 2], - [6, 1], - [10, 1], - [10, 1], - [10, 3], - [10, 3], - [12, 3], - [11, 1], - [11, 1], - [11, 1], - [11, 1], - [16, 1], - [17, 1], - [20, 3], - [18, 4], - [24, 0], - [24, 1], - [25, 3], - [19, 5], - [9, 1], - [30, 1], - [30, 2], - [31, 1], - [31, 1], - [31, 1], - [31, 1], - [32, 1], - [33, 1], - [36, 3], - [34, 4], - [37, 0], - [37, 1], - [38, 3], - [35, 4], - ], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { - /* this == yyval */ - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - case 2: - this.$ = root(null, $$[$0]); - break; - case 3: - this.$ = root('index-wise', $$[$0]); - break; - case 4: - this.$ = root('segment-wise', serialize($$[$0])); - break; - case 5: - case 23: - if ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') - this.$ = $$[$0][0]; - else - this.$ = blockLayout($$[$0]); - break; - case 6: - case 24: - this.$ = [$$[$0]]; - break; - case 7: - case 11: - case 12: - case 13: - case 14: - case 20: - case 27: - case 28: - case 29: - case 35: - this.$ = $$[$0]; - break; - case 8: - this.$ = [...$$[$0 - 2], $$[$0]]; - break; - case 9: - this.$ = [...$$[$0 - 2], ...$$[$0]]; - break; - case 10: - this.$ = range($$[$0 - 2], $$[$0]); - break; - case 15: - this.$ = singleLayout($$[$0]); - break; - case 16: - case 31: - this.$ = blockLayout($$[$0]); - break; - case 17: - case 32: - this.$ = $$[$0 - 1]; - break; - case 18: - case 33: - this.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]); - break; - case 19: - case 34: - this.$ = null; - break; - case 21: - case 36: - this.$ = alternates($$[$0 - 1]); - break; - case 22: - this.$ = abaBlock($$[$0 - 3], $$[$0 - 1]); - break; - case 25: - this.$ = [...$$[$0 - 1], $$[$0]]; - break; - case 26: - this.$ = blockLayout([$$[$0]]); - break; - case 30: - this.$ = segment($$[$0]); - break; - case 37: - this.$ = abaBlock($$[$0 - 2], $$[$0 - 1]); - break; - } - }, - table: [ - { 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, - { 1: [3] }, - { 5: [1, 17] }, - { 5: [2, 2] }, - { 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, - { 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - { 5: [2, 5], 13: $V6 }, - o($V7, [2, 6]), - o($V7, [2, 7]), - o($V7, [2, 11]), - o($V7, [2, 12]), - o($V7, [2, 13]), - o($V7, [2, 14]), - o($V7, $V8, { 15: [1, 31], 23: $V9 }), - o($V7, [2, 16]), - { 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, - { 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, - { 1: [2, 1] }, - { 5: [2, 3] }, - { 5: [2, 4] }, - { 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - o($Va, [2, 24]), - o($Va, [2, 26]), - o($Va, [2, 27]), - o($Va, [2, 28]), - o($Va, [2, 29]), - o($Va, [2, 30], { 23: [1, 37] }), - o($Va, [2, 31]), - { 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - { 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - { 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, - { 14: [1, 42] }, - { 20: 43, 21: $V1 }, - { 13: [1, 44] }, - { 13: $V8, 23: $V9 }, - { 13: $V6, 22: [1, 45] }, - o($Va, [2, 25]), - { 21: $V4, 36: 46 }, - { 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - { 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - o($V7, [2, 8]), - o($V7, [2, 9]), - o($V7, [2, 10]), - o($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }), - { 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, - o([5, 13, 22, 26, 27, 29], [2, 17]), - o($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }), - { 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - o([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]), - o($V7, [2, 18]), - o($V7, [2, 20]), - { 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, - { 13: $V6, 29: [1, 58] }, - o($Va, [2, 33]), - o($Va, [2, 35]), - { 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - o($Va, [2, 37]), - { 13: $V6, 27: [1, 60] }, - o($V7, [2, 22]), - { 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, - o($V7, [2, 21]), - o($Va, [2, 36]), - ], - defaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } - else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } - else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } - else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer.showPosition) { - errStr = - 'Parse error on line ' + - (yylineno + 1) + - ':\n' + - lexer.showPosition() + - '\nExpecting ' + - expected.join(', ') + - ", got '" + - (this.terminals_[symbol] || symbol) + - "'"; - } - else { - errStr = - 'Parse error on line ' + - (yylineno + 1) + - ': Unexpected ' + - (symbol == EOF ? 'end of input' : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected, - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column, - }; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - }, - }; - const root = (type, data) => ({ __prototype: 'MesaureLayout', type, data }); - const singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) }); - const blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq }); - const voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates }); - const abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest }); - const segment = (n) => ({ segment: true, length: Number(n) }); - const alternates = (items) => items.map((item) => { - if (item.__prototype === 'BlockMLayout') - return item.seq; - return [item]; - }); - const range = (start, end) => { - start = Number(start); - end = Number(end); - if (!(end >= start)) - throw new Error(`invalid measure range: ${start}..${end}`); - return Array(end + 1 - start) - .fill(0) - .map((_, i) => singleLayout(start + i)); - }; - const serializeSeq = (item, options) => { - if (item.segment) { - const index = options.index; - options.index += item.length; - return Array(item.length) - .fill(0) - .map((_, i) => singleLayout(index + i)); - } - return [serialize(item, options)]; - }; - const serialize = (item, options = { index: 1 }) => { - const speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options))); - switch (item.__prototype) { - case 'BlockMLayout': - item.seq = speard(item.seq); - break; - case 'VoltaMLayout': - item.body = speard(item.body); - item.alternates = item.alternates && item.alternates.map(speard); - break; - case 'ABAMLayout': - item.main = serialize(item.main, options); - item.rest = speard(item.rest); - break; - } - return item; - }; - /* generated by jison-lex 0.3.4 */ - var lexer = (function () { - var lexer = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } - else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0, - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } - else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines - ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length - : this.yylloc.first_column - len, - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function () { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } - else { - return this.parseError('Lexical error on line ' + - (this.yylineno + 1) + - '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + - this.showPosition(), { - text: '', - token: null, - line: this.yylineno, - }); - } - return this; - }, - // retain first n characters of the match - less: function (n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ''); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ''); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join('-'); - return pre + this.upcomingInput() + '\n' + c + '^'; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function (match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column, - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done, - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines - ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length - : this.yylloc.last_column + match[0].length, - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, (this.offset += this.yyleng)]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } - else if (this._backtrack) { - // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, - // return next match in input - next: function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } - else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } - else { - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - } - else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === '') { - return this.EOF; - } - else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: '', - token: null, - line: this.yylineno, - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } - else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } - else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } - else { - return this.conditions['INITIAL'].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } - else { - return 'INITIAL'; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - break; - case 1: - return yy_.yytext; - case 2: - return 14; - case 3: - return yy_.yytext; - case 4: - return yy_.yytext; - case 5: - return 5; - } - }, - rules: [/^(?:\s+)/, /^(?:([*,\[\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\.\.)/, /^(?:$)/], - conditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } }, - }; - return lexer; - })(); - parser.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser; - parser.Parser = Parser; - return new Parser(); -})(); -parser$1.Parser; -var parse$1 = function () { - return parser$1.parse.apply(parser$1, arguments); -}; -var grammar$1 = { parser: parser$1, Parser: parser$1.Parser, parse: parse$1 }; - -const parseCode$1 = (code) => { - const raw = grammar$1.parse(code); - if (raw?.data) - return recoverJSON(raw.data, measureLayout); - return null; -}; - -var StaffGroupType; -(function (StaffGroupType) { - StaffGroupType[StaffGroupType["Default"] = 0] = "Default"; - StaffGroupType[StaffGroupType["Brace"] = 1] = "Brace"; - StaffGroupType[StaffGroupType["Bracket"] = 2] = "Bracket"; - StaffGroupType[StaffGroupType["Square"] = 3] = "Square"; -})(StaffGroupType || (StaffGroupType = {})); -var StaffConjunctionType; -(function (StaffConjunctionType) { - StaffConjunctionType[StaffConjunctionType["Blank"] = 0] = "Blank"; - StaffConjunctionType[StaffConjunctionType["Dashed"] = 1] = "Dashed"; - StaffConjunctionType[StaffConjunctionType["Solid"] = 2] = "Solid"; -})(StaffConjunctionType || (StaffConjunctionType = {})); -const singleGroup = (id) => ({ type: StaffGroupType.Default, staff: id }); -const BOUNDS_TO_GROUPTYPE = { - '{': StaffGroupType.Brace, - '}': StaffGroupType.Brace, - '<': StaffGroupType.Bracket, - '>': StaffGroupType.Bracket, - '[': StaffGroupType.Square, - ']': StaffGroupType.Square, -}; -const OPEN_BOUNDS = '{<['; -const CLOSE_BOUNDS = '}>]'; -const CONJUNCTIONS_MAP = { - ',': StaffConjunctionType.Blank, - '-': StaffConjunctionType.Solid, - '.': StaffConjunctionType.Dashed, -}; -const bracketCode = (type, partial = false) => { - if (type === StaffGroupType.Default) - return (inner) => inner; - if (partial) { - switch (type) { - case StaffGroupType.Brace: - return (inner) => `{${inner}`; - case StaffGroupType.Bracket: - return (inner) => `<${inner}`; - case StaffGroupType.Square: - return (inner) => `[${inner}`; - default: - return (inner) => inner; - } - } - switch (type) { - case StaffGroupType.Brace: - return (inner) => `{${inner}}`; - case StaffGroupType.Bracket: - return (inner) => `<${inner}>`; - case StaffGroupType.Square: - return (inner) => `[${inner}]`; - default: - return (inner) => inner; - } -}; -const randomB64 = () => { - const code = btoa(Math.random().toString().substr(2)).replace(/=/g, ''); - return code.split('').reverse().slice(0, 6).join(''); -}; -const makeUniqueName = (set, index, prefix) => { - let name = prefix; - if (!name) - name = index.toString(); - else if (set.has(name)) - name += '_' + index.toString(); - while (set.has(name)) - name += '_' + randomB64(); - return name; -}; -const makeGroupsFromRaw = (parent, seq) => { - let remains = seq; - while (remains.length) { - const word = remains.shift(); - const bound = BOUNDS_TO_GROUPTYPE[word]; - if (bound) { - if (CLOSE_BOUNDS.includes(word) && bound === parent.type) - break; - if (OPEN_BOUNDS.includes(word)) { - const group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 }; - remains = makeGroupsFromRaw(group, remains); - parent.subs = parent.subs || []; - parent.subs.push(group); - } - } - else { - parent.subs = parent.subs || []; - parent.subs.push(singleGroup(word)); - } - } - while (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) { - const sub = parent.subs[0]; - parent.type = sub.type; - parent.subs = sub.subs; - parent.staff = sub.staff; - parent.level = sub.level; - } - while (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) { - const sub = parent.subs[0]; - parent.subs = sub.subs; - parent.staff = sub.staff; - } - parent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff); - return remains; -}; -const groupHead = (group) => { - if (group.staff) - return group.staff; - else if (group.subs) - return groupHead(group.subs[0]); -}; -const groupTail = (group) => { - if (group.staff) - return group.staff; - else if (group.subs) - return groupTail(group.subs[group.subs.length - 1]); -}; -const groupKey = (group) => { - if (group.staff) - return group.staff; - else if (group.subs) - return `${groupHead(group)}-${groupTail(group)}`; -}; -const groupDict = (group, dict) => { - dict[groupKey(group)] = group; - if (group.subs) - group.subs.forEach((sub) => groupDict(sub, dict)); -}; -class StaffLayout { - constructor(raw) { - // make unique ids - const ids = new Set(); - raw.forEach((item, i) => { - item.id = makeUniqueName(ids, i + 1, item.id); - ids.add(item.id); - }); - this.staffIds = raw.map((item) => item.id); - this.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank)); - // make groups - const seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds])); - this.group = { type: StaffGroupType.Default }; - makeGroupsFromRaw(this.group, seq); - const dict = {}; - groupDict(this.group, dict); - this.groups = Object.entries(dict).map(([key, group]) => { - let ids = key.split('-'); - if (ids.length === 1) - ids = [ids[0], ids[0]]; - const range = ids.map((id) => this.staffIds.indexOf(id)); - return { - group, - range, - key, - }; - }); - this.maskCache = new Map(); - } - get stavesCount() { - if (!this.staffIds) - return null; - return this.staffIds.length; - } - get partGroups() { - const grands = this.groups.filter((g) => g.group.grand); - const parts = this.groups.filter((g) => { - if (g.group.grand) - return true; - if (g.range[0] === g.range[1]) { - const index = g.range[0]; - return !grands.some((g) => g.range[0] <= index && g.range[1] >= index); - } - return false; - }); - return parts; - } - get standaloneGroups() { - const groups = []; - const collect = (group) => { - if (group.grand) - groups.push(group.subs.map((sub) => sub.staff)); - else if (group.staff) - groups.push([group.staff]); - else if (group.subs) - group.subs.forEach((sub) => collect(sub)); - }; - collect(this.group); - return groups; - } - conjunctionBetween(upStaff, downStaff) { - if (downStaff <= upStaff) - return null; - let con = StaffConjunctionType.Solid; - for (let i = upStaff; i < downStaff; i++) - con = Math.min(con, this.conjunctions[i]); - return con; - } - static makeMaskLayout(layout, mask) { - const staffIds = layout.staffIds.filter((_, i) => mask & (1 << i)); - if (staffIds.length === layout.staffIds.length) { - return { - staffIds: layout.staffIds, - conjunctions: layout.conjunctions, - groups: layout.groups, - }; - } - const groups = layout.groups - .map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g })) - .filter(({ ids }) => ids.length) - .map(({ ids, ...g }) => ({ - key: g.key, - group: g.group, - range: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])], - })); - const conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => { - const nextId = staffIds[i + 1]; - return layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId)); - }); - return { - staffIds, - conjunctions, - groups, - }; - } - mask(mask) { - if (!this.maskCache.get(mask)) - this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask)); - return this.maskCache.get(mask); - } - // {,} * 1,1 => {,} - // {,} * 1,x => { - // {,} * 0,x => - // {,} * 0,1 => {} - partialMaskCode(bits, withIds = false) { - const staffStatus = this.staffIds - .map((_, i) => (i < bits.length ? bits[i] : null)) - .reduce((status, x, i) => { - status[this.staffIds[i]] = x; - return status; - }, {}); - const joinGroup = (group) => { - if (group.staff) - return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null]; - const subs = group.subs.map((sub) => joinGroup(sub)); - const subStr = subs - .map((pair) => pair[0]) - .filter(Boolean) - .join(','); - const partial = subs.some(([_, partial]) => partial); - const code = subStr ? bracketCode(group.type, partial)(subStr) : null; - return [code, partial]; - }; - let [code] = joinGroup(this.group); - code = code || ''; - if (!withIds) - code = code.replace(/[_\w]+/g, ''); - return code; - } -} - -// @ts-nocheck -/* parser generated by jison 0.4.18 */ -/* - Returns a Parser object of the following structure: - - Parser: { - yy: {} - } - - Parser.prototype: { - yy: {}, - trace: function(), - symbols_: {associative list: name ==> number}, - terminals_: {associative list: number ==> name}, - productions_: [...], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), - table: [...], - defaultActions: {...}, - parseError: function(str, hash), - parse: function(input), - - lexer: { - EOF: 1, - parseError: function(str, hash), - setInput: function(input), - input: function(), - unput: function(str), - more: function(), - less: function(n), - pastInput: function(), - upcomingInput: function(), - showPosition: function(), - test_match: function(regex_match_array, rule_index), - next: function(), - lex: function(), - begin: function(condition), - popState: function(), - _currentRules: function(), - topState: function(), - pushState: function(condition), - - options: { - ranges: boolean (optional: true ==> token location info will include a .range[] member) - flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) - backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) - }, - - performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), - rules: [...], - conditions: {associative list: name ==> set}, - } - } - - - token location info (@$, _$, etc.): { - first_line: n, - last_line: n, - first_column: n, - last_column: n, - range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) - } - - - the parseError function receives a 'hash' object with these members for lexer and parser errors: { - text: (matched text) - token: (the produced terminal token, if any) - line: (yylineno) - } - while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { - loc: (yylloc) - expected: (string describing the set of expected tokens) - recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) - } -*/ -var parser = (function () { - var o = function (k, v, o, l) { - for (o = o || {}, l = k.length; l--; o[k[l]] = v) - ; - return o; - }, $V0 = [1, 15], $V1 = [1, 16], $V2 = [1, 17], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 24], $V7 = [1, 25], $V8 = [1, 26], $V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24], $Va = [15, 16, 17, 21, 22, 23, 24], $Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24], $Vc = [5, 11, 12, 13, 21, 22, 23, 24]; - var parser = { - trace: function trace() { }, - yy: {}, - symbols_: { - error: 2, - start_symbol: 3, - staff_layout: 4, - EOF: 5, - seq: 6, - seq_id: 7, - seq_br: 8, - seq_con: 9, - bound_left: 10, - '<': 11, - '[': 12, - '{': 13, - bound_right: 14, - '>': 15, - ']': 16, - '}': 17, - bound_lefts: 18, - bound_rights: 19, - conjunction: 20, - '-': 21, - ',': 22, - '.': 23, - ID: 24, - seq_bl: 25, - $accept: 0, - $end: 1, - }, - terminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' }, - productions_: [ - 0, - [3, 2], - [4, 1], - [6, 0], - [6, 1], - [6, 1], - [6, 1], - [10, 1], - [10, 1], - [10, 1], - [14, 1], - [14, 1], - [14, 1], - [18, 1], - [18, 2], - [19, 1], - [19, 2], - [20, 1], - [20, 1], - [20, 1], - [7, 1], - [7, 2], - [7, 2], - [7, 2], - [7, 2], - [25, 1], - [25, 2], - [25, 2], - [25, 2], - [8, 2], - [8, 2], - [8, 2], - [9, 1], - [9, 2], - [9, 2], - [9, 2], - [9, 2], - ], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { - /* this == yyval */ - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - case 2: - $$[$0].next(); - this.$ = $$[$0].toJSON(); - break; - case 3: - this.$ = new Seq(); - break; - case 13: - case 15: - this.$ = [$$[$0]]; - break; - case 14: - case 16: - this.$ = [...$$[$0 - 1], $$[$0]]; - break; - case 20: - this.$ = new Seq(); - this.$.tip.i($$[$0]); - break; - case 21: - case 23: - $$[$0 - 1].next(); - $$[$0 - 1].tip.i($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 22: - case 24: - $$[$0 - 1].tip.i($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 25: - this.$ = new Seq(); - this.$.tip.bl($$[$0]); - break; - case 26: - case 27: - $$[$0 - 1].next(); - $$[$0 - 1].tip.bl($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 28: - $$[$0 - 1].tip.bl($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 29: - case 30: - case 31: - $$[$0 - 1].tip.br($$[$0]); - this.$ = $$[$0 - 1]; - break; - case 32: - this.$ = new Seq(); - this.$.tip.con($$[$0]); - this.$.next(); - break; - case 33: - case 34: - case 35: - case 36: - $$[$0 - 1].tip.con($$[$0]); - $$[$0 - 1].next(); - this.$ = $$[$0 - 1]; - break; - } - }, - table: [ - { 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 }, - { 1: [3] }, - { 5: [1, 18] }, - { 5: [2, 2] }, - { 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] }, - { 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] }, - { 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] }, - o($V9, [2, 20]), - { 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] }, - o($V9, [2, 32]), - o($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), - o($V9, [2, 17]), - o($V9, [2, 18]), - o($V9, [2, 19]), - o($Vb, [2, 13]), - o($Vb, [2, 7]), - o($Vb, [2, 8]), - o($Vb, [2, 9]), - { 1: [2, 1] }, - o($V9, [2, 21]), - o($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }), - o($V9, [2, 33]), - o($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), - o($V9, [2, 15]), - o($V9, [2, 10]), - o($V9, [2, 11]), - o($V9, [2, 12]), - o($V9, [2, 23]), - o($V9, [2, 35]), - o($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), - o($V9, [2, 24]), - o($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }), - o($V9, [2, 36]), - o($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), - o($V9, [2, 22]), - o($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }), - o($V9, [2, 34]), - o($Vb, [2, 14]), - o($V9, [2, 16]), - ], - defaultActions: { 3: [2, 2], 18: [2, 1] }, - parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } - else { - var error = new Error(str); - error.hash = hash; - throw error; - } - }, - parse: function parse(input) { - var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } - else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, state, action, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } - else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push("'" + this.terminals_[p] + "'"); - } - } - if (lexer.showPosition) { - errStr = - 'Parse error on line ' + - (yylineno + 1) + - ':\n' + - lexer.showPosition() + - '\nExpecting ' + - expected.join(', ') + - ", got '" + - (this.terminals_[symbol] || symbol) + - "'"; - } - else { - errStr = - 'Parse error on line ' + - (yylineno + 1) + - ': Unexpected ' + - (symbol == EOF ? 'end of input' : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected, - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column, - }; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - }, - }; - class Item { - constructor() { - this.id = null; - this.leftBounds = []; - this.rightBounds = []; - this.conjunction = null; - } - i(id) { - this.id = id; - return this; - } - bl(leftBounds) { - this.leftBounds = leftBounds; - return this; - } - br(rightBounds) { - this.rightBounds = rightBounds; - return this; - } - con(conjunction) { - this.conjunction = conjunction; - return this; - } - } - class Seq { - constructor() { - this.body = []; - this.tip = new Item(); - } - next() { - this.body.push(this.tip); - this.tip = new Item(); - return this; - } - toJSON() { - return this.body; - } - } - /* generated by jison-lex 0.3.4 */ - var lexer = (function () { - var lexer = { - EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } - else { - throw new Error(str); - } - }, - // resets the lexer, sets new input - setInput: function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0, - }; - if (this.options.ranges) { - this.yylloc.range = [0, 0]; - } - this.offset = 0; - return this; - }, - // consumes and returns one char from the input - input: function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } - else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - this._input = this._input.slice(1); - return ch; - }, - // unshifts one char (or a string) into the input - unput: function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines - ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length - : this.yylloc.first_column - len, - }; - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - // When called from action, caches matched text and appends it on next action - more: function () { - this._more = true; - return this; - }, - // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. - reject: function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } - else { - return this.parseError('Lexical error on line ' + - (this.yylineno + 1) + - '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + - this.showPosition(), { - text: '', - token: null, - line: this.yylineno, - }); - } - return this; - }, - // retain first n characters of the match - less: function (n) { - this.unput(this.match.slice(n)); - }, - // displays already matched input, i.e. for error messages - pastInput: function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ''); - }, - // displays upcoming input, i.e. for error messages - upcomingInput: function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ''); - }, - // displays the character position where the lexing error occurred, i.e. for error messages - showPosition: function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join('-'); - return pre + this.upcomingInput() + '\n' + c + '^'; - }, - // test the lexed token: return FALSE when not a match, otherwise return token - test_match: function (match, indexed_rule) { - var token, lines, backup; - if (this.options.backtrack_lexer) { - // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column, - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done, - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines - ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length - : this.yylloc.last_column + match[0].length, - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, (this.offset += this.yyleng)]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } - else if (this._backtrack) { - // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, - // return next match in input - next: function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - var token, match, tempMatch, index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } - else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } - else { - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - } - else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === '') { - return this.EOF; - } - else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: '', - token: null, - line: this.yylineno, - }); - } - }, - // return next match that has a token - lex: function lex() { - var r = this.next(); - if (r) { - return r; - } - else { - return this.lex(); - } - }, - // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - // pop the previously active lexer condition state off the condition stack - popState: function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } - else { - return this.conditionStack[0]; - } - }, - // produce the lexer rule set which is active for the currently active lexer condition state - _currentRules: function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } - else { - return this.conditions['INITIAL'].rules; - } - }, - // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available - topState: function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } - else { - return 'INITIAL'; - } - }, - // alias for begin(condition) - pushState: function pushState(condition) { - this.begin(condition); - }, - // return the number of states currently on the stack - stateStackSize: function stateStackSize() { - return this.conditionStack.length; - }, - options: {}, - performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { - switch ($avoiding_name_collisions) { - case 0: - break; - case 1: - return yy_.yytext; - case 2: - return 24; - case 3: - return 5; - } - }, - rules: [/^(?:\s+)/, /^(?:([-,.\[\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/], - conditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } }, - }; - return lexer; - })(); - parser.lexer = lexer; - function Parser() { - this.yy = {}; - } - Parser.prototype = parser; - parser.Parser = Parser; - return new Parser(); -})(); -parser.Parser; -var parse = function () { - return parser.parse.apply(parser, arguments); -}; -var grammar = { parser: parser, Parser: parser.Parser, parse: parse }; - -const parseCode = (code) => { - const raw = grammar.parse(code); - return new StaffLayout(raw); -}; - -class DummyLogger { - debug(..._) { } - group(..._) { } - groupCollapsed(..._) { } - groupEnd() { } - info(..._) { } - warn(..._) { } - assert(..._) { } -} - -const POINT_CONFLICTION_DISTANCE = 0.4; -const roundNumber = (x, precision, min = -Infinity) => Math.max(Math.round(x / precision) * precision, min); -const distance2D = (p1, p2) => { - const dx = p1.x - p2.x; - const dy = p1.y - p2.y; - return Math.sqrt(dx * dx + dy * dy); -}; -const trans23 = (point, matrix) => ({ - x: matrix[0] * point.x + matrix[2] * point.y + matrix[4], - y: matrix[1] * point.x + matrix[3] * point.y + matrix[5], -}); -const gcd = (a, b) => { - if (!(Number.isInteger(a) && Number.isInteger(b))) { - console.error('non-integer gcd:', a, b); - return 1; - } - return b === 0 ? a : gcd(b, a % b); -}; -const frac = (numerator, denominator) => ({ numerator, denominator }); -const reducedFraction = (n, d) => { - n = Math.round(n); - d = Math.round(d); - const g = n !== 0 ? gcd(n, d) : d; - return frac(n / g, d / g); -}; -const printFraction = (f) => `${f.numerator}/${f.denominator}`; -const fractionMul = (value, fraction) => (fraction ? (value * fraction.numerator) / fraction.denominator : value); -const segmentPoints = (points, axis) => { - const sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]); - let seg = null; - let lastP = null; - return sorted.reduce((segments, p, i) => { - if (!lastP) { - lastP = p; - seg = [p]; - } - else { - if (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) - seg.push(p); - else { - if (seg.length > 1) - segments.push(seg); - lastP = p; - seg = [p]; - } - } - if (seg.length > 1 && i === sorted.length - 1) - segments.push(seg); - return segments; - }, []); -}; -const filterWeekPoints = (points) => { - //console.log("filterWeekPoints:", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`)); - //console.table(points.map(p => ({ ...p }))); - if (points.length <= 1) - return []; - let rests = points.slice(1); - const group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic)); - if (!group) - return filterWeekPoints(rests); - const weeks = rests.filter((p) => group.includes(p.semantic)); - rests = rests.filter((p) => !group.includes(p.semantic)); - return [...weeks, ...filterWeekPoints(rests)]; -}; -const solveOverlapping = (points) => { - const pset = new Set(points); - const xClusters = segmentPoints(points, 'x'); - const clusters = [].concat(...xClusters.map((c) => segmentPoints(c, 'y'))); - clusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence)); - clusters.forEach((ps) => { - filterWeekPoints(ps).forEach((p) => pset.delete(p)); - }); - return Array.from(pset); -}; -const GROUP_N_TO_PITCH$1 = [0, 2, 4, 5, 7, 9, 11]; -const MIDDLE_C$1 = 60; -const mod7$1 = (x) => { - let y = x % 7; - while (y < 0) - y += 7; - return y; -}; -const noteToPitch = ({ note, alter }) => { - const group = Math.floor(note / 7); - const gn = mod7$1(note); - return MIDDLE_C$1 + group * 12 + GROUP_N_TO_PITCH$1[gn] + alter; -}; -const argmax$1 = (data) => { - const max = Math.max(...data); - return data.indexOf(max); -}; - -const WHOLE_DURATION = 128 * 3 * 5; -const WHOLE_EXP2 = WHOLE_DURATION / 15; -var AccessoryDirection; -(function (AccessoryDirection) { - AccessoryDirection["Up"] = "^"; - AccessoryDirection["Down"] = "_"; - AccessoryDirection["Middle"] = "-"; -})(AccessoryDirection || (AccessoryDirection = {})); -var GraceType; -(function (GraceType) { - GraceType["Grace"] = "grace"; - GraceType["AfterGrace"] = "afterGrace"; - GraceType["Acciaccatura"] = "acciaccatura"; - GraceType["Appoggiatura"] = "appoggiatura"; - GraceType["SlashedGrace"] = "slashedGrace"; -})(GraceType || (GraceType = {})); -var StemBeam; -(function (StemBeam) { - StemBeam["Open"] = "Open"; - StemBeam["Close"] = "Close"; - StemBeam["Continue"] = "Continue"; -})(StemBeam || (StemBeam = {})); -var TremoloLink; -(function (TremoloLink) { - TremoloLink["Pitcher"] = "Pitcher"; - TremoloLink["Catcher"] = "Catcher"; - TremoloLink["Pierced"] = "Pierced"; -})(TremoloLink || (TremoloLink = {})); -var GlissandoStyle; -(function (GlissandoStyle) { - GlissandoStyle["Normal"] = "normal"; - GlissandoStyle["DashedLine"] = "dashed-line"; - GlissandoStyle["DottedLine"] = "dotted-line"; - GlissandoStyle["Zigzag"] = "zigzag"; - GlissandoStyle["Trill"] = "trill"; -})(GlissandoStyle || (GlissandoStyle = {})); -var ArpeggioStyle; -(function (ArpeggioStyle) { - ArpeggioStyle["Normal"] = "Normal"; - ArpeggioStyle["Bracket"] = "Bracket"; - ArpeggioStyle["Parenthesis"] = "Parenthesis"; - ArpeggioStyle["ParenthesisDashed"] = "ParenthesisDashed"; - ArpeggioStyle["ArrowDown"] = "ArrowDown"; -})(ArpeggioStyle || (ArpeggioStyle = {})); -class Term extends SimpleClass { -} -const SCALE_NAMES = 'CDEFGAB'; -class EventTerm extends Term { - static space({ tick, duration }) { - const term = new EventTerm({ - rest: 's', - tick, - accessories: [], - }); - term.duration = Math.round(duration); - return term; - } - constructor(data) { - super(); - super.assign(data); - Object.assign(this, data); - if (Number.isFinite(data.left) && Number.isFinite(data.right)) - this.x = (this.left + this.right) / 2; - if (!Number.isFinite(this.pivotX)) - this.pivotX = this.x; - //console.assert(Number.isFinite(this.x), "EventTerm: invalid x,", data); - } - get alignedTick() { - return this.grace ? this.tick + this.duration : this.tick; - } - get mainDuration() { - return WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots); - } - get duration() { - let value = this.mainDuration; - if (this.multiplier) - value *= this.multiplier.numerator / this.multiplier.denominator; - if (this.timeWarp) - value *= this.timeWarp.numerator / this.timeWarp.denominator; - return this.grace ? value / 8 : value; - } - set duration(value) { - console.assert(Number.isFinite(value), 'invalid duration value:', value); - const divider = gcd(value, WHOLE_EXP2); - const division = Math.log2(WHOLE_EXP2 / divider); - const multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION); - this.division = division; - this.dots = 0; - if (multiplier.numerator !== multiplier.denominator) - this.multiplier = multiplier; - else - this.multiplier = undefined; - } - get prior() { - return this.tick; - } - get times() { - if (!this.timeWarp) - return null; - return `${this.timeWarp.numerator}/${this.timeWarp.denominator}`; - } - get fullMeasureRest() { - return this.rest === 'R'; - } - get tipX() { - return this.tip ? this.tip.x : this.x; - } - get tipY() { - return this.tip ? this.tip.y : this.ys ? this.ys[0] : 0; - } - get tremoloCatcher() { - return this.tremoloLink === TremoloLink.Catcher; - } - get scaleChord() { - return this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join(''); - } - get zeroHolder() { - return !!this.grace || this.tremoloCatcher; - } -} -EventTerm.className = 'EventTerm'; -var ContextType; -(function (ContextType) { - ContextType[ContextType["Clef"] = 0] = "Clef"; - ContextType[ContextType["KeyAcc"] = 1] = "KeyAcc"; - ContextType[ContextType["Acc"] = 2] = "Acc"; - ContextType[ContextType["OctaveShift"] = 3] = "OctaveShift"; - ContextType[ContextType["TimeSignatureC"] = 4] = "TimeSignatureC"; - ContextType[ContextType["TimeSignatureN"] = 5] = "TimeSignatureN"; -})(ContextType || (ContextType = {})); -class ContextedTerm extends Term { - constructor(data) { - super(); - Object.assign(this, data); - } - get type() { - if (TokenClefs.includes(this.tokenType)) - return ContextType.Clef; - if (/\|key-/.test(this.tokenType)) - return ContextType.KeyAcc; - if (/accidentals-/.test(this.tokenType)) - return ContextType.Acc; - if (TokenOctshifts.includes(this.tokenType)) - return ContextType.OctaveShift; - if (TokenTimesigsC.includes(this.tokenType)) - return ContextType.TimeSignatureC; - if (TokenTimesigsN.includes(this.tokenType)) - return ContextType.TimeSignatureN; - return null; - } - get staffLevel() { - return [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type); - } - get prior() { - return this.tick - 0.1; - } - get clef() { - switch (this.tokenType) { - case TokenType.ClefG: - return -this.y - 2; - case TokenType.ClefF: - return -this.y + 2; - case TokenType.ClefC: - return -this.y; - } - return null; - } - get alter() { - switch (this.tokenType) { - case TokenType.AccNatural: - case TokenType.KeyNatural: - return 0; - case TokenType.AccSharp: - case TokenType.KeySharp: - return 1; - case TokenType.AccFlat: - case TokenType.KeyFlat: - return -1; - case TokenType.AccDoublesharp: - return 2; - case TokenType.AccFlatflat: - return -2; - } - return null; - } - get octaveShift() { - switch (this.tokenType) { - case TokenType.OctaveShift8va: - return -1; - case TokenType.OctaveShift0: - return 0; - case TokenType.OctaveShift8vb: - return 1; - } - return null; - } - get number() { - switch (this.tokenType) { - case TokenType.TimesigZero: - return 0; - case TokenType.TimesigOne: - return 1; - case TokenType.TimesigTwo: - return 2; - case TokenType.TimesigThree: - return 3; - case TokenType.TimesigFour: - return 4; - case TokenType.TimesigFive: - return 5; - case TokenType.TimesigSix: - return 6; - case TokenType.TimesigSeven: - return 7; - case TokenType.TimesigEight: - return 8; - case TokenType.TimesigNine: - return 9; - } - return null; - } -} -ContextedTerm.className = 'ContextedTerm'; -//class BreakTerm extends Term { -//}; -class MarkTerm extends Term { - get prior() { - return this.tick + 0.01; - } -} -MarkTerm.className = 'MarkTerm'; -const MUSIC_NOTES = Array(7) - .fill(0) - .map((_, i) => String.fromCodePoint(0x1d15d + i)); -class TempoTerm extends MarkTerm { - static fromNumeralText(text) { - if (/.+=.*\d+/.test(text)) { - const [symbol, value] = text.split('='); - let division = MUSIC_NOTES.findIndex((n) => symbol.includes(n)); - division = division >= 0 ? division : 2; - let duration = (2 ** division).toString(); - if (symbol.includes('.')) - duration += '.'; - return new TempoTerm({ tick: 0, duration, beats: value }); - } - return null; - } - constructor(data) { - super(); - Object.assign(this, data); - } - get prior() { - return this.tick - 0.01; - } - // a whole note equal to 1920 - get durationMagnitude() { - const [_, den, dot] = this.duration.match(/^(\d+)(\.)?$/); - const magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1); - return magnitude; - } - // beats per minute, suppose 1 beat = 480 ticks - get bpm() { - const [number] = this.beats.match(/\d+/) || [90]; - const beats = Number(number); - return (beats * this.durationMagnitude * 4) / WHOLE_DURATION; - } - isValid(range = [10, 400]) { - const bpm = this.bpm; - return Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1]; - } -} -TempoTerm.className = 'TempoTerm'; -class GlyphTerm extends MarkTerm { - constructor(data) { - super(); - Object.assign(this, data); - } -} -GlyphTerm.className = 'GlyphTerm'; -class TextTerm extends MarkTerm { - constructor(data) { - super(); - Object.assign(this, data); - } -} -TextTerm.className = 'TextTerm'; -class LyricTerm extends MarkTerm { - constructor(data) { - super(); - Object.assign(this, data); - } -} -LyricTerm.className = 'LyricTerm'; -class CommandTerm extends MarkTerm { - constructor(data) { - super(); - Object.assign(this, data); - } -} -CommandTerm.className = 'CommandTerm'; -class ChordmodeTerm extends Term { - constructor(data) { - super(); - Object.assign(this, data); - } - get prior() { - return this.tick; - } - get duration() { - const value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots); - if (this.multiplier) - return (value * this.multiplier.numerator) / this.multiplier.denominator; - return value; - } -} -ChordmodeTerm.className = 'ChordmodeTerm'; - -const BEAM_STATUS = { - [StemBeam.Open]: 1, - [StemBeam.Continue]: 0, - [StemBeam.Close]: -1, -}; -const evaluateMeasure = (measure) => { - if (!measure.regulated) - return undefined; - const eventMap = measure.eventMap; - const events = measure.events.length; - const validEvents = measure.voices.flat(1).length; - const warpedEvents = measure.events.filter((e) => e.timeWarp).length; - const warps = new Set(measure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp.numerator}/${e.timeWarp.denominator}`)); - const irregularWarps = new Set(warps); - irregularWarps.delete('2/3'); - const fractionalWarp = measure.voices.some((voice) => { - const events = voice.map((id) => eventMap[id]); - if (!events.some((e) => e.timeWarp)) - return false; - let denominator = 0; - let tickSum = 0; - let eventN = 0; - return events.some((event, i) => { - const d = event.timeWarp ? event.timeWarp.denominator : 0; - if (d !== denominator) { - if (denominator > 0 && (tickSum % denominator || eventN < 2)) - return true; - tickSum = 0; - eventN = 0; - } - denominator = d; - tickSum += event.duration; - ++eventN; - if (i === events.length - 1) { - if (denominator > 0 && (tickSum % denominator || eventN < 2)) - return true; - } - return false; - }); - }); - const tickOverlapped = measure.voices.some((voice) => { - const events = voice.map((id) => eventMap[id]); - let tick = 0; - return events.some((event) => { - if (event.grace) - return false; - if (event.tick < tick) - return true; - tick = event.tick + event.duration; - return false; - }); - }); - const fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration)); - const complicatedTimewarp = fractionalTimes.size > 1; - const literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature); - const sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration; - const inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]); - // Guard: detect corrupted event data in voices (e.g. missing division, NaN tick) - const corruptedVoiceEvent = inVoiceEvents.some((event) => !event || - !Number.isFinite(event.tick) || - !Number.isFinite(event.division) || - event.division < 0 || - !Number.isFinite(event.duration) || - event.duration <= 0); - const overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false); - const overDuration = measure.duration > literalDuration; - const graceInVoice = inVoiceEvents.some((event) => event.grace); - const graceN = measure.events.filter((e) => e.grace).length; - const graceDominant = graceN >= inVoiceEvents.length; - const irregularTick = inVoiceEvents.some((event) => { - let t = event.tick * 2 ** (event.division + 2); - if (event.timeWarp) - t *= event.timeWarp.denominator; - if (!Number.isFinite(t)) - return true; - const fragment = gcd(Math.round(t), WHOLE_DURATION); - //if (fragment < WHOLE_DURATION) - // console.log("irregularTick:", event.tick, fragment); - return fragment < WHOLE_DURATION; - }); - const beamStatus = measure.voices.map((voice) => voice.reduce(({ status, broken }, ei, evi) => { - const event = eventMap[ei]; - if (event.beam) { - // allow an open beam at beginning of a voice - if (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) - status = 1; - status += BEAM_STATUS[event.beam]; - broken = broken || !(status >= 0 && status <= 1); - } - else if (!event.rest) - broken = broken || status !== 0; - return { status, broken }; - }, { status: 0, broken: false })); - const beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1) - let spaceTime = 0; - let surplusTime = 0; - measure.voices.forEach((voice) => { - const eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0); - spaceTime += Math.max(0, measure.duration - eventDuration); - surplusTime += Math.max(0, eventDuration - measure.duration); - }); - spaceTime /= WHOLE_DURATION; - const nullEvents = measure.events.filter((e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)).length; - const fakeEvents = measure.events.filter((event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)).length; - const { voiceRugged } = measure.voices.flat(1).reduce((result, ei) => { - if (!result.voiceRugged) { - if (result.es.has(ei)) - return { voiceRugged: true, es: result.es }; - } - result.es.add(ei); - return result; - }, { voiceRugged: false, es: new Set() }); - const tickTwist = measure.tickTwist || 0; - const error = corruptedVoiceEvent || - tickTwist >= 1 || - tickOverlapped || - voiceRugged || - measure.tickRatesInStaves.some((rate) => rate < 0) || - nullEvents > 2 || - !measure.timeSignature || - overranged || - measure.duration > sigDuration || - measure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5); - const perfect = !error && - !overDuration && - tickTwist < 0.2 && - !fractionalWarp && - !irregularWarps.size && - !irregularTick && - !spaceTime && - !surplusTime && - !!measure.voices.length && - !beamBroken && - !graceInVoice && - !graceDominant && - (measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75)); - const fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice; - let expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2); - if (Number.isFinite(measure.estimatedDuration)) - expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration)); - const durationRate = measure.duration / expectDuration; - let qualityScore = 0; - if (measure.patched && !corruptedVoiceEvent) - qualityScore = 1; - else if (!error) { - const spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1); - let expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2); - if (Number.isFinite(measure.estimatedDuration)) - expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration)); - const durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0; - const warpsLoss = Math.tanh(irregularWarps.size); - qualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2); - } - return { - events, - validEvents, - voiceRugged, - nullEvents, - fakeEvents, - warpedEvents, - complicatedTimewarp, - spaceTime, - surplusTime, - durationRate, - beamBroken, - fractionalWarp, - irregularWarpsN: irregularWarps.size, - irregularTick, - tickTwist, - tickOverlapped, - graceInVoice, - graceN, - graceDominant, - perfect, - fine, - error, - qualityScore, - }; -}; - -//import { staffSvg } from "@kelvinnxu/lotus"; -class SemanticGraph extends SimpleClass { - constructor(data) { - super(); - super.assign(data); - } - /*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph { - const tokens = [].concat(...staff.measures.map(measure => measure.tokens)); - - const voltaRightXs = []; - - const points = []; - tokens.forEach(token => { - const def = hashTable[token.hash]; - - if (token.glyph) { - const glyph = token.glyph as string; - let semantic = null; - - const isKey = /^\\key/.test(token.source) || token.is("KEY"); - let { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 }; - if (token.scale2) { - cx *= token.scale2.x; - cy *= token.scale2.y; - } - - let x = token.x + cx; - const y = token.y + cy; - - switch (glyph) { - case "rests.0": - if (/^R/.test(token.source)) - semantic = "Rest0W"; - else - semantic = "Rest0"; - - break; - case "accidentals.flat": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "accidentals.natural": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "accidentals.sharp": - semantic = glyphSemanticMapping[glyph]; - if (isKey) { - points.push({ - semantic: SemanticType.KeyAcc, - x, - y, - }); - } - - break; - case "dots.dot": - if (token.is("VOLTA")) { - x += 0.24; // dot glyph center X offset - if (token.is("LEFT")) - semantic = SemanticType.VoltaLeft; - else if (token.is("RIGHT")) { - voltaRightXs.push(x); - semantic = SemanticType.VoltaRight; - } - } - else - semantic = "Dot"; - - break; - case "zero": - case "one": - case "two": - case "three": - case "four": - case "five": - case "six": - case "seven": - case "eight": - case "nine": { - const upper = glyph[0].toUpperCase() + glyph.substr(1); - semantic = token.is("TIME_SIG") ? "Timesig" + upper : upper; - } - - break; - default: - semantic = glyphSemanticMapping[glyph]; - } - - if (semantic) { - points.push({ - semantic, - x, - y, - }); - } - - if (token.is("TEMPO_NOTEHEAD")) { - points.push({ - semantic: SemanticType.TempoNotehead, - x, - y, - }); - } - - // grace noteheads - if (token.is("NOTEHEAD") && Number.isFinite(token.scale) && token.scale < 0.75) { - points.push({ - semantic: SemanticType.GraceNotehead, - x, - y, - }); - } - } - - // semantic from token symbol - let semantic = null; - const cx = 0; - let cy = 0; - if (token.is("OCTAVE")) { - if (token.is("_8")) { - semantic = SemanticType.OctaveShift8; - cy = token.is("B") ? -0.7512 : -0.7256; - } - else if (token.is("CLOSE")) { - semantic = SemanticType.OctaveShift0; - cy = 0; - } - } - else if (/^flags/.test(token.glyph)) { - let direction = 0; - if (/\.u\d/.test(token.glyph)) - direction = 1; - if (/\.d\d/.test(token.glyph)) - direction = -1; - if (direction) { - const [n] = token.glyph.match(/\d+/); - const flagCount = Number(n) - 2; - //console.log("flags:", token.glyph, flagCount); - for (let i = 0; i < flagCount; ++i) { - const y = token.y + (i + 0.5) * direction; - points.push({ - semantic: SemanticType.Flag3, - x: token.x, - y, - }); - //console.log("flags.1:", token.x, y); - } - } - } - else if (token.is("SLUR")) { - const d = def && def.d; - if (d) { - const numbers = d.match(/-?[\d.]+/g).map(Number); - //console.log("slur:", numbers); - const x1 = token.x + numbers[0]; - const y1 = token.y + numbers[1]; - const x2 = token.x + numbers[6]; - const y2 = token.y + numbers[7]; - - points.push({ - semantic: SemanticType.SlurBegin, - x: x1, - y: y1, - }); - points.push({ - semantic: SemanticType.SlurEnd, - x: x2, - y: y2, - }); - } - } - else if (token.is("NOTE_STEM")) { - points.push({ - semantic: SemanticType.vline_Stem, - x: token.x + def.width / 2, - y: token.y, - extension: { - y1: token.y, - y2: token.y + token.height, - }, - }); - } - else if (token.is("TEXT") || token.is("CHORD_TEXT")) { - if (/\S/.test(token.text)) { - // NOTE: text rect computation is delayed to sheet rendering - points.push({ - semantic: SemanticType.rect_Text, - x: token.x, - y: token.y, - extension: { - index: token.index, - text: token.text, - }, - }); - } - } - - if (semantic) { - points.push({ - semantic, - x: token.x + cx, - y: token.y + cy, - }); - } - }); - - // beams - const stems = tokens.filter(token => token.is("NOTE_STEM")).map(stem => ({ - x: stem.x + stem.width / 2, - y1: stem.y, - y2: stem.y + stem.height, - })); - const beams = tokens.filter(token => token.is("NOTETAIL") && token.is("JOINT")) - .map(beam => { - const def = hashTable[beam.hash]; - const points = def && def.points; - if (points) { - const floats = points.split(" ").map(Number); - const x1 = beam.x + floats[4]; - const x2 = beam.x + floats[0]; - const y1 = beam.y + (floats[5] + floats[7]) / 2; - const y2 = beam.y + (floats[1] + floats[3]) / 2; - const k = (y2 - y1) / (x2 - x1); - - return { x1, x2, y1, y2, k, capital: beam.is("CAPITAL_BEAM") }; - } - - return null; - }).filter(Boolean); - //console.log("beams:", beams); - beams.forEach(beam => { - const innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2); - //console.log("innerStems:", beam, innerStems); - - let lines = 0; - innerStems.forEach(stem => { - const beamY = beam.y1 + (stem.x - beam.x1) * beam.k; - //console.log("beamY:", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2))); - if (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) { - points.push({ - semantic: SemanticType.Flag3, - x: stem.x, - y: beamY, - }); - - ++lines; - - // beam semantics - if (beam.capital) { - let semantic = SemanticType.BeamContinue; - if (Math.abs(stem.x - beam.x1) < 0.2) - semantic = SemanticType.BeamLeft; - else if (Math.abs(stem.x - beam.x2) < 0.2) - semantic = SemanticType.BeamRight; - - points.push({ - semantic, - x: stem.x, - y: beamY, - }); - } - } - }); - if (!lines) - console.warn("empty beam:", beam, innerStems, stems); - //else if (lines < 2) - // console.debug("single beam:", beam, innerStems, stems); - }); - - // wedges (crescendo & decrescendo) - const crescendos = tokens.filter(token => token.is("WEDGE CRESCENDO TOP")); - const crescendoBottoms = tokens.filter(token => token.is("WEDGE CRESCENDO BOTTOM")); - const decrescendos = tokens.filter(token => token.is("WEDGE DECRESCENDO TOP")); - const decrescendoBottoms = tokens.filter(token => token.is("WEDGE DECRESCENDO BOTTOM")); - crescendos.forEach(line => { - const partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06); - - if (partner) { - points.push({ - semantic: SemanticType.CrescendoBegin, - x: line.x, - y: line.y, - }); - } - //else - // console.log("unpaired crescendo:", line, crescendoBottoms); - points.push({ - semantic: SemanticType.CrescendoEnd, - x: line.x + line.target.x, - y: line.y + line.target.y, - }); - }); - decrescendos.forEach(line => { - const partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06); - - points.push({ - semantic: SemanticType.DecrescendoBegin, - x: line.x, - y: line.y, - }); - if (partner) { - points.push({ - semantic: SemanticType.DecrescendoEnd, - x: line.x + line.target.x, - y: line.y + line.target.y, - }); - } - //else - // console.log("unpaired decrescendo:", line, decrescendoBottoms); - }); - - // TODO: volta alternative - - // measure bars - const measureSeparators = staff.tokens.filter(token => token.is("MEASURE_SEPARATOR")); - const singleBars = []; - const groupBars = []; - - for (let i = 0; i < measureSeparators.length; ++i) { - const bar = measureSeparators[i]; - const nextBar = measureSeparators[i + 1]; - const inteval = nextBar ? nextBar.x - bar.x : Infinity; - - if (inteval < 1) { - groupBars.push([bar, nextBar]); - ++i; - } - else - singleBars.push(bar); - }; - //console.log("bars:", singleBars, groupBars); - - singleBars.forEach(bar => { - points.push({ - semantic: SemanticType.vline_BarMeasure, - x: bar.x + bar.sw / 2, - y: 0, - extension: { - y1: -2, - y2: 2, - }, - }); - }); - - groupBars.forEach(group => { - let x = (group[0].x + group[1].x) / 2; - const bold0 = group[0].is("BOLD"); - const bold1 = group[1].is("BOLD"); - - let semantic = null; - if (!bold0 && bold1) { - x = group[0].x; - - if (!voltaRightXs.some(vx => x - vx < 2)) - semantic = SemanticType.vline_BarTerminal; - } - else if (bold0 && !bold1) - x = group[1].x; - else if (!bold0 && !bold1) - semantic = SemanticType.vline_BarSegment; - - //console.log("group:", group[0].x, group[1].x, x); - points.push({ - semantic: SemanticType.vline_BarMeasure, - x, - y: 0, - extension: { - y1: -2, - y2: 2, - }, - }); - - if (semantic) { - points.push({ - semantic, - x, - y: 0, - extension: { - y1: -2, - y2: 2, - }, - }); - } - }); - - const graph = new SemanticGraph(); - graph.points = points; - - return graph; - }*/ - static fromPoints(points = []) { - const graph = new SemanticGraph(); - graph.points = points; - return graph; - } - getLayer(semantic) { - return this.points.filter((p) => p.semantic === semantic); - } - getConfidentLayer(semantic, threshold) { - return this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold)); - } - getSystemPoints() { - return this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic)); - } - getStaffPoints() { - return this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic)); - } - offset(x, y) { - this.points.forEach((point) => { - point.x += x; - point.y += y; - }); - } - scale(factor) { - this.points.forEach((point) => { - point.x *= factor; - point.y *= factor; - }); - } - // multipy 3x2 matrix - transform(matrix) { - this.points.forEach((point) => { - let x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0]; - const y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1]; - if (point.extension) { - if (Number.isFinite(point.extension.y1)) { - const y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1]; - const y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1]; - x = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0]; - point.extension.y1 = y1; - point.extension.y2 = y2; - } - if (Number.isFinite(point.extension.width)) { - const scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]); - point.extension.width *= scaling; - point.extension.height *= scaling; - } - } - point.x = x; - point.y = y; - }); - } -} -SemanticGraph.className = 'SemanticGraph'; - -const CHORD_X_TOLERANCE = 0.2; -//const EVENT_X_TOLERANCE = 0.8; -const STEM_LENGTH_MAX = 6; -const INDENT_THRESHOLD = 2; -const MEASURE_SEMANTICS = [ - SemanticType.ClefG, - SemanticType.ClefF, - SemanticType.ClefC, - SemanticType.TimesigC44, - SemanticType.TimesigC22, - SemanticType.TimesigZero, - SemanticType.TimesigOne, - SemanticType.TimesigTwo, - SemanticType.TimesigThree, - SemanticType.TimesigFour, - SemanticType.TimesigFive, - SemanticType.TimesigSix, - SemanticType.TimesigSeven, - SemanticType.TimesigEight, - SemanticType.TimesigNine, - SemanticType.OctaveShift8va, - SemanticType.OctaveShift8vb, - SemanticType.OctaveShift0, - SemanticType.Zero, - SemanticType.One, - SemanticType.Two, - SemanticType.Three, - SemanticType.Four, - SemanticType.Five, - SemanticType.Six, - SemanticType.Seven, - SemanticType.Eight, - SemanticType.Nine, - SemanticType.AccNatural, - SemanticType.AccSharp, - SemanticType.AccDoublesharp, - SemanticType.AccFlat, - SemanticType.AccFlatflat, - SemanticType.NoteheadS0, - SemanticType.NoteheadS1, - SemanticType.NoteheadS2, - SemanticType.NoteheadS1stemU, - SemanticType.NoteheadS1stemD, - SemanticType.NoteheadS2stemU, - SemanticType.NoteheadS2stemD, - SemanticType.Rest0, - SemanticType.Rest1, - SemanticType.Rest2, - SemanticType.Rest3, - SemanticType.Rest4, - SemanticType.Rest5, - SemanticType.Rest6, - SemanticType.Rest0W, - SemanticType.RestM1, - SemanticType.SlurBegin, - SemanticType.SlurEnd, - SemanticType.Dot, - SemanticType.f, - SemanticType.p, - SemanticType.m, - SemanticType.n, - SemanticType.r, - SemanticType.s, - SemanticType.z, - SemanticType.ScriptFermata, - SemanticType.ScriptShortFermata, - SemanticType.ScriptSforzato, - SemanticType.ScriptStaccato, - SemanticType.ScriptStaccatissimo, - SemanticType.ScriptTurn, - SemanticType.ScriptTrill, - SemanticType.ScriptSegno, - SemanticType.ScriptCoda, - SemanticType.ScriptArpeggio, - SemanticType.ScriptPrall, - SemanticType.ScriptMordent, - SemanticType.ScriptMarcato, - SemanticType.ScriptTenuto, - SemanticType.ScriptPortato, - SemanticType.PedalStar, - SemanticType.PedalPed, - SemanticType.GraceNotehead, - SemanticType.BeamLeft, - SemanticType.BeamRight, - SemanticType.BeamContinue, - SemanticType.CrescendoBegin, - SemanticType.CrescendoEnd, - SemanticType.DecrescendoBegin, - SemanticType.DecrescendoEnd, - SemanticType.TremoloLeft, - SemanticType.TremoloRight, - SemanticType.TremoloMiddle, -]; -const STAFF_LINED_SEMANTICS = [ - SemanticType.AccNatural, - SemanticType.AccSharp, - SemanticType.AccDoublesharp, - SemanticType.AccFlat, - SemanticType.AccFlatflat, - SemanticType.NoteheadS0, - SemanticType.NoteheadS1, - SemanticType.NoteheadS2, - SemanticType.NoteheadS1stemU, - SemanticType.NoteheadS1stemD, - SemanticType.NoteheadS2stemU, - SemanticType.NoteheadS2stemD, -]; -const LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval]; -const NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2]; -const KEYACC_CANDIDATE_SEMANTICS = { - AccSharp: TokenType.KeySharp, - AccNatural: TokenType.KeyNatural, - AccFlat: TokenType.KeyFlat, -}; -const NOTEHEAD_TABLE = { - [SemanticType.NoteheadS1]: { - up: SemanticType.NoteheadS1stemU, - down: SemanticType.NoteheadS1stemD, - }, - [SemanticType.NoteheadS2]: { - up: SemanticType.NoteheadS2stemU, - down: SemanticType.NoteheadS2stemD, - }, -}; -const REST_SEMANTICS = [ - SemanticType.Rest0, - SemanticType.Rest1, - SemanticType.Rest2, - SemanticType.Rest3, - SemanticType.Rest4, - SemanticType.Rest5, - SemanticType.Rest6, -]; -const TOKEN_TO_STEMBEAM = { - [TokenType.BeamLeft]: 'Open', - [TokenType.BeamRight]: 'Close', - [TokenType.BeamContinue]: 'Continue', -}; -const TEXT_TYPE_ALIAS = { - Alter1: TextType.Alternation1, - Alter2: TextType.Alternation2, -}; -const noteheadsXPivot = (xs, direction) => { - switch (xs.length) { - case 0: - return undefined; - case 1: - return xs[0]; - case 2: - return direction === 'u' ? Math.min(...xs) : Math.max(...xs); - default: { - const mean = xs.reduce((sum, x) => sum + x, 0) / xs.length; - xs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean)); - return noteheadsXPivot(xs.slice(0, xs.length - 1), direction); - } - } -}; -const noteheadsPivot = (nhs) => noteheadsXPivot(nhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)), nhs[0].direction); -class Measure extends SimpleClass { - constructor(data) { - super(); - super.assign(data); - this.tokens = this.tokens || []; - this.antiTokens = this.antiTokens || []; - this.barTypes = this.barTypes || {}; - } - get right() { - return this.left + this.width; - } - get noteheads() { - return this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x); - } - get chordRects() { - const noteheads = this.noteheads.filter((nh) => [TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)); - let nulN = 0; - const nhmap = noteheads.reduce((map, nh) => { - const tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`; - let key = `${nh.type}|${tip}`; - if (!nh.tip && map[key]) { - if (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) { - ++nulN; - key = `${nh.type}|nul${nulN}`; - } - } - map[key] = map[key] || []; - map[key].push(nh); - return map; - }, {}); - return Object.values(nhmap).map((nhs) => { - const left = Math.min(...nhs.map((nh) => nh.x)); - const right = Math.max(...nhs.map((nh) => nh.x)); - const top = Math.min(...nhs.map((nh) => nh.y)); - const bottom = Math.max(...nhs.map((nh) => nh.y)); - const nh0 = nhs[0]; - const stemX = nh0 && nh0.tip ? nh0.tip.x : left; - let x = left; - let width = right - left; - let stemDirection = null; - switch (nh0.type) { - case TokenType.NoteheadS0: - x -= NOTEHEAD_WIDTHS.NoteheadS0 / 2; - width += NOTEHEAD_WIDTHS.NoteheadS0; - break; - case TokenType.NoteheadS1stemU: - case TokenType.NoteheadS2stemU: - stemDirection = 'u'; - x -= NOTEHEAD_WIDTHS.NoteheadS1; - width += NOTEHEAD_WIDTHS.NoteheadS1; - break; - case TokenType.NoteheadS1stemD: - case TokenType.NoteheadS2stemD: - stemDirection = 'd'; - width += NOTEHEAD_WIDTHS.NoteheadS1; - break; - } - return { - x, - width, - stemX, - stemDirection, - top, - bottom, - tip: nh0.tip, - }; - }); - } - get timeWarped() { - return this.tokens && this.tokens.some((token) => token.timeWarped); - } - get additionalLines() { - const chords = this.getChords(); - const up = chords - .filter((chord) => chord.ys.some((y) => y <= -3)) - .map((chord) => ({ - left: chord.left, - right: chord.right, - n: Math.ceil(Math.min(...chord.ys)) + 2, - })); - const down = chords - .filter((chord) => chord.ys.some((y) => y >= 3)) - .map((chord) => ({ - left: chord.left, - right: chord.right, - n: Math.floor(Math.max(...chord.ys)) - 2, - })); - return [...up, ...down].map((stack) => ({ - left: stack.left - 0.28, - right: stack.right + 0.28, - n: stack.n, - })); - } - getChords() { - const flags = this.tokens.filter((t) => TokenFlags.includes(t.type)); - const dots = this.tokens.filter((t) => TokenDots.includes(t.type)); - const beams = this.tokens.filter((t) => TokenBeams.includes(t.type)); - const chordRcs = this.chordRects - .map((rect) => { - const noteheads = this.noteheads.filter((nh) => nh.direction === rect.stemDirection && - nh.left >= rect.x && - nh.right <= rect.x + rect.width + CHORD_X_TOLERANCE && - nh.y >= rect.top && - nh.y <= rect.bottom); - noteheads.sort((n1, n2) => n2.y - n1.y); - const ys = noteheads.map((nh) => nh.y); - const noteIds = noteheads.map((nh) => nh.id); - const division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0); - return { - rect, - left: rect.x, - right: rect.x + rect.width, - pivotX: noteheadsPivot(noteheads), - ys, - tip: rect.tip, - noteIds, - division, - dots: null, - rest: false, - stemDirection: rect.stemDirection, - beam: null, - }; - }) - .sort((c1, c2) => c2.left - c1.left); - const accs = new Set(); - const chords = chordRcs.map(({ rect, ...chord }) => { - if (chord.division >= 1) { - // NOTE: notehead-s1 may have flags too - const flagRange = [rect.bottom, rect.top]; - switch (rect.stemDirection) { - case 'u': - flagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5; - break; - case 'd': - flagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5; - break; - } - const nearbyFlags = flags.filter((flag) => !accs.has(flag.id) && - flag.x > rect.stemX - CHORD_X_TOLERANCE && - flag.x < rect.stemX + CHORD_X_TOLERANCE && - flag.y > flagRange[0] && - flag.y < flagRange[1]); - chord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division); - nearbyFlags.forEach((flag) => accs.add(flag.id)); - if (chord.division >= 3) { - const beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7); - if (beamToken) - chord.beam = TOKEN_TO_STEMBEAM[beamToken.type]; - } - } - const nearbyDots = dots.filter((dot) => !accs.has(dot.id) && - dot.x > rect.x + rect.width - 0.2 && - dot.x < rect.x + rect.width + 1.2 && - dot.y > rect.top - 1 && - dot.y <= rect.bottom + 0.5); - chord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0); - nearbyDots.forEach((dot) => accs.add(dot.id)); - return chord; - }); - chords.reverse(); - return chords; - } - getRests() { - const rests = this.tokens.filter((t) => TokenRests.includes(t.type)); - const dots = this.tokens.filter((t) => TokenDots.includes(t.type)); - return rests.map((rest) => { - const nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5); - const dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0); - return { - left: rest.x - 0.75, - right: rest.x + 0.75, - pivotX: rest.x, - rest: true, - ys: [rest.y], - noteIds: [rest.id], - dots: dotValue, - division: rest.division, - stemDirection: null, - }; - }); - } - getEvents() { - return [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left); - } - getContexts(fields = {}) { - return this.tokens - .filter((t) => t.isContexted) - .sort((n1, n2) => n1.x - n2.x) - .map((token) => new ContextedTerm({ - x: token.x, - y: token.y, - tokenType: token.type, - ...fields, - })); - } - assignAccessoriesOnEvents(events) { - events.forEach((event) => (event.accessories = event.accessories || [])); - const accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type)); - //console.log("accessories:", accessories); - accessories.forEach((accessory) => { - const relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1); - if (relatedEvents.length > 0) { - let owner = relatedEvents[0]; - if (relatedEvents.length > 1) { - owner = relatedEvents - .map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) })) - .sort(({ d: d1 }, { d: d2 }) => d1 - d2) - .map(({ event }) => event)[0]; - } - //console.log("relatedEvents:", accessory, owner); - let direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up; - if (TokenDirectionless.includes(accessory.type)) - direction = null; - owner.accessories.push({ - type: accessory.type, - id: accessory.id, - direction, - x: accessory.x - owner.left, - }); - } - //else - // console.debug("alone accessory:", accessory.type); - }); - // arpeggio - const sortEvents = [...events]; - sortEvents.sort((e1, e2) => e1.left - e2.left); - const arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio); - arpeggios.forEach((arpeggio) => { - const owner = sortEvents.find((event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)); - //const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5)); - if (owner) { - owner.accessories.push({ - type: TokenType.ScriptArpeggio, - id: arpeggio.id, - x: arpeggio.x - owner.left, - }); - } - //else - // console.debug("alone arpeggio:", arpeggio); - }); - // grace noteheads - const graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead); - graceNhs.forEach((grace) => { - const event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4)); - if (event) - event.grace = GraceType.Grace; - }); - // tremolos - const tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft); - const tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight); - const tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle); - const tevents = events - .filter((event) => !event.rest) - .map((event) => { - const ys = [...event.ys]; - if (event.tip) - ys.push(event.tip.y); - else { - ys.push(event.ys[0] + 2); - ys.push(event.ys[event.ys.length - 1] - 2); - } - const stemL = event.tip ? event.tip.x : event.left; - const stemR = event.tip ? event.tip.x : event.right; - return { - event, - top: Math.min(...ys), - bottom: Math.max(...ys), - stemL, - stemR, - }; - }); - tremolsMs.forEach((tm) => { - const te = tevents.find((te) => { - if (te.event.tip) - return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3; - return false; - }); - if (te) { - te.event.tremolo = te.event.tremolo || 2; - ++te.event.tremolo; - } - }); - tremolsLs.forEach((tl) => { - const te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6); - if (te) { - te.event.tremolo = te.event.tremolo || 2; - ++te.event.tremolo; - te.event.tremoloLink = TremoloLink.Pitcher; - } - }); - tremolsRs.forEach((tr) => { - const te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6); - if (te) { - te.event.tremolo = te.event.tremolo || 2; - ++te.event.tremolo; - te.event.tremoloLink = TremoloLink.Catcher; - } - }); - } - assignFeaturesOnEvents(events, semantics) { - const points = semantics.filter((point) => point.x > this.left && point.x < this.right); - const rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic)); - const flags = points.filter((point) => point.semantic === SemanticType.Flag3); - const dotPs = points.filter((point) => point.semantic === SemanticType.Dot); - const beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft); - const beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue); - const beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight); - const gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead); - const tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight); - const stems = points.filter((point) => point.semantic === SemanticType.vline_Stem); - const s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0); - const s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1); - const s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2); - events.forEach((event) => { - const cx = event.tip ? event.tip.x : (event.left + event.right) / 2; - const top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1]; - const bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0]; - const stemL = event.tip ? event.tip.x : event.left; - const divisions = [0, 0, 0, 0, 0, 0, 0]; - if (event.rest) { - const i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5); - i_rests.forEach((r) => { - const d = REST_SEMANTICS.indexOf(r.semantic); - divisions[d] = Math.max(divisions[d], r.confidence); - }); - } - else { - const nhs = [s0, s1, s2] - .map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25)) - .map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence))); - const i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2); - i_flags.sort((f1, f2) => f2.confidence - f1.confidence); - divisions[0] = nhs[0]; - divisions[1] = nhs[1]; - divisions[2] = nhs[2]; - Array(divisions.length - 3) - .fill(0) - .forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0)); - } - const i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6); - const dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2)); - const dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))]; - const beams = [beamLs, beamMs, beamRs] - .map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2)) - .map((bs) => Math.max(0, ...bs.map((b) => b.confidence))); - const u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5); - const d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5); - const stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))]; - const graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4)); - const grace = Math.max(0, ...graces.map((grace) => grace.confidence)); - const tremolos = event.division === 0 - ? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right) - : tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL); - const tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence)); - event.feature = { - divisions, - dots, - beams, - stemDirections, - grace, - tremoloCatcher, - }; - }); - } -} -Measure.className = 'Measure'; -Measure.blackKeys = ['tokens', 'antiTokens']; -class Staff extends SimpleClass { - constructor({ measureCount = null, measureBars = null, ...data } = {}) { - super(); - super.assign(data); - this.height = this.height || 10; - this.staffY = this.staffY || 5; - if (measureBars) { - let left = 0; - this.measures = measureBars.map((endX) => { - const measure = new Measure({ left, width: endX - left, height: this.height }); - left = endX; - return measure; - }); - } - else if (measureCount) - this.measures = Array(measureCount) - .fill(null) - .map(() => new Measure()); - else - this.measures = []; - } - // relative to staffY - get noteRange() { - const noteheads = [].concat(...this.measures.map((measure) => measure.noteheads)); - const ys = noteheads.map((note) => note.y); - const top = Math.min(-2, ...ys); - const bottom = Math.max(2, ...ys); - return { top, bottom }; - } - get additionalLines() { - return [].concat(...this.measures.map((measure) => measure.additionalLines)); - } - rearrangeMeasures(measureBars) { - if (!measureBars.length) { - console.warn('rearrangeMeasures error, measureBars are empty.'); - return; - } - const tokens = this.measures?.map((measure) => measure.tokens).flat(1) || []; - let left = 0; - this.measures = measureBars.map((endX) => { - const measure = new Measure({ left, width: endX - left, height: this.height }); - left = endX; - return measure; - }); - this.reassignTokens(tokens); - } - reassignTokens(tokens = null) { - if (!tokens) - tokens = [].concat(...this.measures.map((measure) => measure.tokens)); - this.measures.forEach((measure) => (measure.tokens = [])); - tokens.forEach((token) => { - for (const measure of this.measures) { - if (token.x < measure.right) { - measure.tokens.push(token); - break; - } - } - }); - } - assignSemantics(graph) { - this.semantics = graph.getStaffPoints(); - } - // generate tokens from semantics - assemble(threshold, system, logger = new DummyLogger()) { - if (!this.semantics) - return; - let points = system.qualifiedSemantics(this.semantics, threshold); - points = solveOverlapping(points); - // tempo noteheads - const tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead); - tempoNhs.forEach((tempoNh) => { - const index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3); - //console.log("temponh:", tempoNh, index, points[index]); - if (index >= 0) - points.splice(index, 1); - // TODO: construct tempo term - }); - const antiP = (id) => { - if (system.displacementSemantics?.[id]) - return this.semantics.find((p) => p.id === id); - return null; - }; - points.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points })); - // noteheads with stem from noteheads & stems - const stems = points - .filter((point) => point.semantic === SemanticType.vline_Stem) - .filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems - .map((p) => ({ - x: p.x, - y1: p.extension.y1, - y2: p.extension.y2, - direction: null, - })); - const noteheads = points.filter((point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom); - const rootNhs = new Set(); - // for 2nd degree chord notes - const nhOffsetX = (nh, stem, down) => { - if ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) - return 0; - const offset = NOTEHEAD_WIDTHS[nh.semantic]; - return down ? -offset : offset; - }; - // find root noteheads on stem - stems.forEach((stem) => { - const attachedHeads = noteheads.filter((nh) => Math.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 && - Math.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem - nh.y > stem.y1 - 0.5 && - nh.y < stem.y2 + 0.5 && - !(nh.x > stem.x && nh.y > stem.y2) && - !(nh.x < stem.x && nh.y < stem.y1)); - //if (stem.x===102.0625 && stem.y2===1.875) - // debugger; - if (attachedHeads.length) { - attachedHeads.sort((n1, n2) => n1.y - n2.y); - const topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1)); - const bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y)); - if (Math.min(topDist, bottomDist) > 0.5) - return; // no root notehead on this stem - const down = topDist < bottomDist; - stem.direction = down ? 'd' : 'u'; - if (!down) - attachedHeads.reverse(); - const root = attachedHeads[0]; - const semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up; - this.appendPoint({ - id: root.id, - semantic, - x: stem.x + nhOffsetX(root, stem, down), - y: root.y, - pivotX: root.x, - confidence: root.confidence, - }, { - tip: { x: stem.x, y: down ? stem.y2 : stem.y1 }, - antiPoint: antiP(root.id), - points, - }); - rootNhs.add(root.id); - } - }); - // non-root noteheads - noteheads - .filter((nh) => !rootNhs.has(nh.id)) - .forEach((nh) => { - const nearStems = stems - .filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2) - .sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x)); - const stem = nearStems[0]; - if (stem) { - const down = stem.direction === 'd'; - const semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up; - this.appendPoint({ - id: nh.id, - semantic, - x: stem.x + nhOffsetX(nh, stem, down), - y: nh.y, - pivotX: nh.x, - confidence: nh.confidence, - }, { - tip: { x: stem.x, y: down ? stem.y2 : stem.y1 }, - antiPoint: antiP(nh.id), - points, - }); - } - else - logger.debug('isolated notehead:', system.index, this.index, nh); - }); - // group flags - const flags = points.filter((point) => point.semantic === SemanticType.Flag3); - flags.sort((f1, f2) => f1.x - f2.x); - this.appendFlags(flags, stems); - // group dots - const dots = points - .filter((point) => point.semantic === SemanticType.Dot) - .map((dot) => { - const y = roundNumber(dot.y, 0.5); - return { x: dot.x, y }; - }); - const dotLines = dots.reduce((table, dot) => { - table[dot.y] = table[dot.y] || []; - table[dot.y].push(dot); - return table; - }, {}); - Object.entries(dotLines).forEach(([sy, line]) => { - const y = Number(sy); - if (line.length > 1) { - line.sort((d1, d2) => d1.x - d2.x); - for (let i = 0; i < line.length - 1; i++) { - const dot = line[i]; - if (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) { - this.appendPoint({ - id: dot.id, - x: dot.x, - y, - confidence: dot.confidence, - }, { type: TokenType.DotDot, antiPoint: antiP(dot.id), points }); - } - } - } - }); - // pair key accidentals - const keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc); - const accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]); - accs.forEach((acc) => { - if (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) { - this.appendPoint({ - id: acc.id, - x: acc.x, - y: acc.y, - confidence: acc.confidence, - }, { type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }); - } - }); - // octave shift heads - const octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8); - octs.forEach((oct) => { - const type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb; - this.appendPoint({ - id: oct.id, - x: oct.x, - y: oct.y, - confidence: oct.confidence, - }, { type, points }); - }); - // group volta dots - const voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic)); - voltaDots.sort((d1, d2) => d1.x - d2.x); - const voltaGroups = voltaDots.reduce((groups, dot) => { - const group = groups[dot.semantic]; - const xs = Array.from(Object.keys(group)).map(Number); - const x = xs.find((x) => dot.x < x + 0.2) || dot.x; - group[x] = groups[dot.semantic][x] || []; - group[x].push(dot); - return groups; - }, { [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }); - for (const [type, group] of Object.entries(voltaGroups)) { - Object.values(group).forEach((dots) => { - if (dots.length > 1) { - const confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0); - if (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) - this.appendPoint(dots[0], { type: TokenType[type] }); - } - }); - } - } - appendPoint(point, { type, points = null, antiPoint, ...fields } = {}) { - //console.log("appendPoint.0:", point, point.x, point.y); - const x = point.x; - const measure = this.measures.find((measure) => x < measure.left + measure.width); - if (!measure) - // drop tokens out of measures range - return; - // lined or interval - let lined = false; - let interval = false; - if (STAFF_LINED_SEMANTICS.includes(point.semantic)) { - console.assert(points, 'argument of points for this semantic is required:', point.semantic); - const signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2); - if (signs.some((s) => s.semantic === SemanticType.SignLined)) - lined = true; - else if (signs.some((s) => s.semantic === SemanticType.SignInterval)) - interval = true; - } - type = type || TokenType[point.semantic]; - const fixedY = TOKEN_Y_FIXED[type]; - let roundY = TOKEN_Y_ROUND[type]; - if (lined || interval) - roundY = Math.max(roundY, 1); - let y = point.y; - if (Number.isFinite(fixedY)) - y = fixedY; - else if (roundY) { - if (interval) - y = roundNumber(y + 0.5, roundY) - 0.5; - else - y = roundNumber(y, roundY); - } - //if (lined || interval) - // console.log("round sign:", point.semantic, y, lined, interval); - const holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1); - if (holder) { - if (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) { - holder.x = x; - holder.y = y; - holder.confidence = point.confidence; - } - return; - } - // exlude clef out of pitch range - if (TokenClefs.includes(type)) { - if (Math.abs(y) > 3) - return; - } - // TODO: exclude overlapped pair by a token prior table - measure.tokens.push(new Token({ - id: point.id, - type, - x, - y, - pivotX: point.pivotX, - confidence: point.confidence, - ...fields, - })); - if (antiPoint) { - measure.antiTokens.push(new Token({ - id: antiPoint.id, - type, - x, - y: antiPoint.y, - confidence: antiPoint.confidence, - })); - } - } - appendFlags(flags, stems) { - //console.log("flags:", flags); - const stemGroups = stems - .map((stem) => ({ - ...stem, - flags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5), - })) - .filter((group) => group.flags.length); - stemGroups.forEach((group) => { - const mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null); - //const upDistance = mainFlag.y - group.y1; - //const downDistance = group.y2 - mainFlag.y; - //const downward = downDistance < upDistance; - const downward = group.direction === 'd'; - const tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX); - const flagTips = group.flags.map((flag) => ({ - tip: (tailY - flag.y) * (downward ? 1 : -1), - confidence: flag.confidence, - })); - const count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length; - const type = TokenFlags[count - 1]; - if (type) { - this.appendPoint({ - id: group.flags[0].id, - x: group.x, - y: tailY, - confidence: Math.min(...group.flags.map((flag) => flag.confidence)), - }, { type }); - //console.log("flag:", type); - } - }); - } - clearTokens() { - this.measures.forEach((measure) => (measure.tokens = [])); - this.semantics = []; - } - clearPredictedTokens() { - this.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted))); - } -} -Staff.className = 'Staff'; -Staff.blackKeys = ['index', 'semanticTop', 'semanticBttom']; -class System extends SimpleClass { - constructor({ stavesCount, ...fields }) { - super(); - super.assign(fields); - if (!this.measureBars) { - const HEAD_WIDTH = 5; - const segmentLength = (this.width - HEAD_WIDTH) / this.measureCount; - this.measureBars = Array(this.measureCount) - .fill(0) - .map((_, i) => HEAD_WIDTH + segmentLength * (i + 1)); - } - if (!fields.staves && stavesCount) - this.staves = Array(stavesCount) - .fill(null) - .map(() => new Staff({ measureBars: this.measureBars })); - this.arrangePosition(); - this.measureCount = this.measureCount || this.measureBars.length; - this.sidBlackList = this.sidBlackList || []; - this.sidWhiteList = this.sidWhiteList || []; - } - get noteRange() { - if (!this.staves.length) - return null; - const staffTop = this.staves[0]; - const staffBottom = this.staves[this.staves.length - 1]; - return { - top: staffTop.top + staffTop.staffY + staffTop.noteRange.top, - bottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom, - }; - } - get staffPositions() { - return this.staves.map((staff) => ({ - y: staff.top + staff.staffY, - radius: 2, - })); - } - get staffMask() { - if (this.staffMaskChanged) - return this.staffMaskChanged; - if (this.prev && this.staves.length === this.prev.staves.length) - return this.prev.staffMask; - return 2 ** this.staves.length - 1; - } - get staffTop() { - const positions = this.staffPositions; - return positions.length ? positions[0].y - positions[0].radius : 0; - } - get staffBottom() { - const positions = this.staffPositions; - return positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0; - } - arrangePosition() { - let y = 0; - for (const staff of this.staves) { - if (Number.isFinite(staff.top)) - break; - staff.top = y; - y += staff.height; - } - } - tidyMeasureBars() { - this.measureBars = this.measureBars.filter((x) => x > 1); - this.measureBars.sort((b1, b2) => b1 - b2); - const restWidth = this.width - this.measureBars[this.measureBars.length - 1]; - if (restWidth > 12) - this.measureBars.push(this.width); - else if (restWidth < 2) - this.measureBars[this.measureBars.length - 1] = this.width; - this.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4); - } - rearrangeMeasures() { - this.measureCount = this.measureBars.length; - this.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars)); - } - get height() { - return this.staves.reduce((height, staff) => height + staff.height, 0); - } - get connectionLine() { - const staffHead = this.staves[0]; - const staffTail = this.staves[this.staves.length - 1]; - return (staffHead && { - top: staffHead.top + staffHead.staffY - 2, - bottom: staffTail.top + staffTail.staffY + 2, - }); - } - get middleY() { - if (!this.staves.length) - return 0; - const sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0); - return sum / this.staves.length; - } - get timeSignatureOnHead() { - return this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type))); - } - // an array staff or null on every position of full staff layout - getStaffArray(stavesCount) { - let si = 0; - return Array(stavesCount) - .fill(null) - .map((_, i) => { - const on = this.staffMask & (1 << i); - const staff = on ? this.staves[si++] : null; - console.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2)); - return staff; - }); - } - // measureIndex: the local measure index - getMarksInMeasure(measureIndex) { - console.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length); - const left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0; - const right = this.measureBars[measureIndex]; - const tempoTokens = (this.tokens ?? []).filter((token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral); - return [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)]; - } - getEvents(stavesCount) { - console.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex); - // Empty system (no measureBars / no staves with measures): return empty result - if (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) { - return { staffMask: this.staffMask, columns: [] }; - } - const staves = this.getStaffArray(stavesCount); - // [staff, measure] - const rows = staves.map((staff) => { - if (!staff) { - return Array(this.measureCount) - .fill(null) - .map(() => ({ - events: [], - contexts: [], - voltaBegin: false, - voltaEnd: false, - alternative: false, - barTypes: {}, - })); - } - return staff.measures.map((measure) => { - const events = measure.getEvents(); - measure.assignAccessoriesOnEvents(events); - measure.assignFeaturesOnEvents(events, staff.semantics); - return { - events: events.map((event) => new EventTerm({ - staff: staff.index, - system: this.index, - ...event, - rest: event.rest ? 'r' : null, - })), - contexts: measure.getContexts({ staff: staff.index }), - voltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft), - voltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight), - alternative: measure.alternative, - barTypes: measure.barTypes, - }; - }); - }); - // supplement time signatures for empty staves - for (let mi = 0; mi < this.measureCount; ++mi) { - const tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type))); - const timeSigs = tsRows.find((row) => row?.length); - if (timeSigs) { - rows.forEach((row) => { - if (row[mi] && !row[mi].contexts.length && !row[mi].events.length) - row[mi].contexts.push(...timeSigs); - }); - } - } - //const measureWidths = this.staves[0].measures.map(measure => measure.width); - //onst measureStartXs = [0, ...this.measureBars]; - const columns = Array(this.measureCount) - .fill(null) - .map((_, i) => ({ - measureIndex: this.headMeasureIndex + i, - //startX: measureStartXs[i], - //width: measureWidths[i], - rows: rows.map((row) => row[i]), - marks: this.getMarksInMeasure(i), - //xToTick: {}, - duration: 0, - voltaBegin: rows.some((row) => row[i]?.voltaBegin), - voltaEnd: rows.some((row) => row[i]?.voltaEnd), - alternative: rows.some((row) => row[i]?.alternative), - barTypes: rows.reduce((ts, row) => ({ - ...ts, - ...row[i]?.barTypes, - }), {}), - })); - //columns.forEach(computeMeasureTicks); - // assign id on column events - columns.forEach((column) => { - const events = [].concat(...column.rows.filter(Boolean).map((row) => row.events)); - events.forEach((event, i) => (event.id = i + 1)); - }); - const lastColumn = columns[columns.length - 1]; - if (lastColumn) - lastColumn.break = true; - return { - staffMask: this.staffMask, - columns, - }; - } - getEventsFunctional(stavesCount, ev, processors = [], { useXMap = false } = {}) { - const staves = this.getStaffArray(stavesCount); - // [staff, measure] - const rows = staves.map((staff, si) => { - if (!staff) { - return Array(this.measureCount) - .fill(null) - .map(() => ({ - events: [], - contexts: [], - voltaBegin: false, - voltaEnd: false, - alternative: false, - barTypes: {}, - })); - } - return staff.measures.map((measure, mi) => { - const events = ev(si, mi); - return (events && { - events: events.map((event) => new EventTerm({ - system: this.index, - ...event, - rest: event.rest ? 'r' : null, - })), - contexts: measure.getContexts({ staff: si }), - voltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft), - voltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight), - alternative: measure.alternative, - barTypes: measure.barTypes, - }); - }); - }); - //const measureWidths = this.staves[0].measures.map(measure => measure.width); - //const measureStartXs = [0, ...this.measureBars]; - // [measure, staff] - const columns = Array(this.measureCount) - .fill(null) - .map((_, mi) => { - const localRows = rows.map((row) => row[mi]); - if (localRows.some((row) => !row)) - return null; - let xMap = null; - if (useXMap) { - const events = [].concat(...localRows.map((row) => row.events)); - const groupMap = events.reduce((map, event) => { - if (Number.isFinite(event.tickGroup)) - map[event.tickGroup] = map[event.tickGroup] || []; - map[event.tickGroup].push(event); - return map; - }, {}); - xMap = Object.values(groupMap).reduce((map, events) => { - const x = Math.min(...events.map((event) => (event.left + event.right) / 2)); - map.set(x, events); - return map; - }, new Map()); - } - return { - measureIndex: this.headMeasureIndex + mi, - //startX: measureStartXs[mi], - //width: measureWidths[mi], - rows: localRows, - marks: this.getMarksInMeasure(mi), - //xToTick: {}, - duration: 0, - xMap, - voltaBegin: localRows.some((row) => row.voltaBegin), - voltaEnd: localRows.some((row) => row.voltaEnd), - alternative: localRows.some((row) => row.alternative), - barTypes: localRows.reduce((ts, row) => ({ - ...ts, - ...row.barTypes, - }), {}), - }; - }); - processors.forEach((proc) => columns.forEach(proc)); - return { - staffMask: this.staffMask, - columns, - }; - } - // get EventSystem contains only contexted terms - getContexts(stavesCount) { - const staves = this.getStaffArray(stavesCount); - // [staff, measure] - const rows = staves.map((staff) => { - if (!staff) { - return Array(this.measureCount) - .fill(null) - .map(() => ({ - events: null, - contexts: [], - voltaBegin: false, - voltaEnd: false, - alternative: false, - barTypes: {}, - })); - } - return staff.measures.map((measure) => ({ - events: null, - contexts: measure.getContexts(), - voltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft), - voltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight), - alternative: rows.some((row) => row.alternative), - barTypes: measure.barTypes, - })); - }); - // supplement time signatures for empty staves - for (let mi = 0; mi < this.measureCount; ++mi) { - const tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type))); - const timeSigs = tsRows.find((row) => row?.length); - if (timeSigs) { - rows.forEach((row) => { - if (!row[mi].contexts.length) - row[mi].contexts.push(...timeSigs); - }); - } - } - //const measureWidths = this.staves[0].measures.map(measure => measure.width); - //const measureStartXs = [0, ...this.measureBars]; - const columns = Array(this.measureCount) - .fill(null) - .map((_, i) => ({ - measureIndex: this.headMeasureIndex + i, - //startX: measureStartXs[i], - //width: measureWidths[i], - rows: rows.map((row) => row[i]), - marks: [], - //xToTick: {}, - duration: 0, - voltaBegin: rows.some((row) => row[i].voltaBegin), - voltaEnd: rows.some((row) => row[i].voltaEnd), - alternative: rows.some((row) => row.alternative), - barTypes: rows.reduce((ts, row) => ({ - ...ts, - ...row[i].barTypes, - }), {}), - })); - return { - staffMask: this.staffMask, - columns, - }; - } - assignSemantics(staffIndex, graph) { - const staff = this.staves[staffIndex]; - console.assert(staff, 'staff is null:', staffIndex, this.staves); - const oy = staff.top + staff.staffY; - graph.getSystemPoints().forEach((point) => { - const p = { ...point }; - p.y += oy; - if (p.extension) { - p.extension = { ...p.extension }; - if (Number.isFinite(p.extension.y1)) { - p.extension.y1 += oy; - p.extension.y2 += oy; - } - } - this.semantics.push(p); - }); - } - // generate tokens from semantics - assemble(threshold, logger = new DummyLogger()) { - //console.log("System.assignSemantics:", graph); - this.measureBars = []; - if (!this.semantics) - return; - const graph = SemanticGraph.fromPoints(this.semantics); - const bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold); - bars.sort((b1, b2) => b1.x - b2.x); - const staffTop = this.staffTop; - const staffBottom = this.staffBottom; - const MERGE_WINDOW = 0.4; - let lastX = 0; - const barColumns = bars.reduce((columns, bar) => { - const confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1; - const x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX; - lastX = bar.x; - let intensity = columns[x] || 0; - intensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence; - if (bar.x !== x) - delete columns[x]; - columns[bar.x] = intensity; - return columns; - }, {}); - const barXs = Object.entries(barColumns) - .filter(([x, intensity]) => (intensity > 3 * this.staves.length)) - .map(([x]) => Number(x)); - // Include bar positions from whitelisted semantic points - if (this.sidWhiteList.length) { - for (const bar of bars) { - if (this.sidWhiteList.includes(bar.id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) { - barXs.push(bar.x); - } - } - } - barXs.sort((x1, x2) => x1 - x2); - barXs.forEach((x, i) => { - if (i <= 0 || x - barXs[i - 1] > 2) - this.measureBars.push(x); - }); - if (!this.measureBars.length) - this.measureBars.push(this.width); - this.tidyMeasureBars(); - this.rearrangeMeasures(); - // measure bar type - const typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic)); - typeBars.forEach((bar) => { - const measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1); - if (measure) { - const type = bar.semantic.replace(/^vline_Bar/, ''); - measure.barTypes[type] = measure.barTypes[type] || 0; - measure.barTypes[type] += bar.confidence; - } - }); - let staffIndex = 0; - const staffMask = this.staffMask; - this.staves.forEach((staff, si) => { - // staff index - while (!(staffMask & (1 << staffIndex))) - ++staffIndex; - staff.index = staffIndex++; - // assign semantic boundaries - if (si === 0) - staff.semanticTop = -staff.staffY; - else { - const prevStaff = this.staves[si - 1]; - staff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY); - } - if (si < this.staves.length - 1) { - const nextStaff = this.staves[si + 1]; - staff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY); - } - else - staff.semanticBottom = this.height - (staff.top + staff.staffY); - if (staff.semantics && staff.semantics.length) { - staff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point)); - staff.clearPredictedTokens(); - staff.assemble(threshold, this, logger); - } - }); - } - qualifiedSemantics(semantics, threshold = 1) { - return semantics - .filter((p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))) - .map((point) => { - // displace semantic point - if (this.displacementSemantics && this.displacementSemantics[point.id]) - return { ...point, ...this.displacementSemantics[point.id] }; - return point; - }); - } - clearTokens() { - this.staves.forEach((staff) => staff.clearTokens()); - this.semantics = []; - } - newPoint(staffIndex, data, threshold = 1) { - const staff = this.staves[staffIndex]; - console.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length); - const { semantic, x, y, confidence = 0, extension = null } = data; - const point = { semantic, x, y, confidence, extension }; - if (!point.extension) - delete point.extension; - hashSemanticPoint(this.index, staffIndex, point); - staff.semantics.push(point); - staff.clearPredictedTokens(); - staff.assemble(threshold, this); - return point; - } - appendToken(token) { - this.tokens.push(token); - switch (token.textType) { - case TextType.TempoNumeral: - { - // remove noteheads in text area - const staff = this.staves[0]; - if (staff) { - const oy = staff.top + staff.staffY; - staff.measures.forEach((measure) => { - measure.tokens = measure.tokens.filter((t) => !TokenNoteheads.includes(t.type) || - Math.abs(t.x - token.x) > token.width / 2 || - Math.abs(oy + t.y - token.y) > token.fontSize / 2); - }); - } - } - break; - case TextType.Alternation1: - case TextType.Alternation2: - //console.log("appendToken:", token, this.staves[0].measures); - this.staves[0].measures.forEach((measure) => { - const overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2); - measure.alternative = measure.alternative || overlap / measure.width > 0.5; - }); - break; - } - } -} -System.className = 'System'; -System.blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent']; -class Page extends SimpleClass { - constructor(data) { - super(); - super.assign(data); - this.systems = this.systems || []; - if (this.source) { - this.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0]; - } - } - get sidBlackList() { - const ids = [].concat(...this.systems.map((system) => system.sidBlackList)); - return new Set(ids); - } - get sidWhiteList() { - const ids = [].concat(...this.systems.map((system) => system.sidWhiteList)); - return new Set(ids); - } - clearTokens() { - this.semantics = null; - this.tokens = null; - this.systems.forEach((system) => (system.tokens = null)); - } - assignTexts(areas, [imageHeight, imageWidth]) { - const interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height; - this.semantics = areas.map((area) => { - const p = { - x: (area.cx - imageWidth / 2) / interval, - y: (area.cy - imageHeight / 2) / interval, - }; - const rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p; - return { - confidence: area.score, - x: rp.x + this.width / 2, - y: rp.y + this.height / 2, - semantic: SemanticType.rect_Text, - extension: { - text: area.text, - type: area.type, - width: area.width / interval, - height: area.height / interval, - theta: area.theta, - textFeature: area.feature_dict, - }, - }; - }); - } - assemble({ textAnnotations = null } = {}, logger = new DummyLogger()) { - this.tokens = []; - this.systems.forEach((system) => (system.tokens = [])); - // compute system indent - if (this.systems.length) { - const sysXs = this.systems.map((system) => system.left); - const middleX = sysXs[Math.floor((sysXs.length - 1) / 2)]; - this.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD)); - } - if (this.semantics) { - const pageName = this.source ? this.source.name : this.index.toString(); - this.semantics.forEach((point) => { - hashPageSemanticPoint(pageName, point); - const fields = { - id: point.id, - type: TokenType.Text, - confidence: point.confidence, - textType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type, - text: (textAnnotations && textAnnotations[point.id]) || point.extension.text, - textFeasure: point.extension.textFeature, - width: point.extension.width, - fontSize: point.extension.height, - }; - switch (point.semantic) { - case SemanticType.rect_Text: - switch (fields.textType) { - // page tokens - case TextType.Title: - case TextType.Author: - case TextType.PageMargin: - case TextType.Other: - this.tokens.push(new TextToken({ - x: point.x, - y: point.y, - ...fields, - })); - break; - // tokens on the top of system - case TextType.TempoNumeral: - case TextType.Chord: - case TextType.MeasureNumber: - case TextType.Instrument: - case TextType.Alternation1: - case TextType.Alternation2: - { - const system = this.systems.find((system) => system.top + system.staffTop > point.y); - if (system) { - system.appendToken(new TextToken({ - x: point.x - system.left, - y: point.y - system.top, - ...fields, - })); - } - } - break; - // tokens in staff - case TextType.TextualMark: - case TextType.Times: - { - const system = [...this.systems].reverse().find((system) => system.top < point.y); - if (system) { - const sy = point.y - (system.top + system.staffTop); - const sx = point.x - system.left; - const staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height); - if (staff) { - const measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width); - if (measure) { - measure.tokens.push(new TextToken({ - x: sx, - y: sy, - ...fields, - })); - } - } - } - } - break; - } - break; - } - }); - } - } -} -Page.className = 'Page'; -Page.blackKeys = ['index', 'tokens']; - -var SemanticElementType; -(function (SemanticElementType) { - SemanticElementType[SemanticElementType["BOS"] = 0] = "BOS"; - SemanticElementType[SemanticElementType["PAD"] = 1] = "PAD"; - SemanticElementType[SemanticElementType["NoteheadS0"] = 2] = "NoteheadS0"; - SemanticElementType[SemanticElementType["NoteheadS1"] = 3] = "NoteheadS1"; - SemanticElementType[SemanticElementType["NoteheadS2"] = 4] = "NoteheadS2"; - SemanticElementType[SemanticElementType["NoteheadGrace"] = 5] = "NoteheadGrace"; - SemanticElementType[SemanticElementType["vline_Stem"] = 6] = "vline_Stem"; - SemanticElementType[SemanticElementType["Flag3"] = 7] = "Flag3"; - SemanticElementType[SemanticElementType["BeamLeft"] = 8] = "BeamLeft"; - SemanticElementType[SemanticElementType["BeamContinue"] = 9] = "BeamContinue"; - SemanticElementType[SemanticElementType["BeamRight"] = 10] = "BeamRight"; - SemanticElementType[SemanticElementType["Dot"] = 11] = "Dot"; - SemanticElementType[SemanticElementType["Rest0"] = 12] = "Rest0"; - SemanticElementType[SemanticElementType["Rest1"] = 13] = "Rest1"; - SemanticElementType[SemanticElementType["Rest2"] = 14] = "Rest2"; - SemanticElementType[SemanticElementType["Rest3"] = 15] = "Rest3"; - SemanticElementType[SemanticElementType["Rest4"] = 16] = "Rest4"; - SemanticElementType[SemanticElementType["Rest5"] = 17] = "Rest5"; - SemanticElementType[SemanticElementType["Rest6"] = 18] = "Rest6"; - // measure time signature denominators & numerators - SemanticElementType[SemanticElementType["TimeD2"] = 19] = "TimeD2"; - SemanticElementType[SemanticElementType["TimeD4"] = 20] = "TimeD4"; - SemanticElementType[SemanticElementType["TimeD8"] = 21] = "TimeD8"; - SemanticElementType[SemanticElementType["TimeN1"] = 22] = "TimeN1"; - SemanticElementType[SemanticElementType["TimeN2"] = 23] = "TimeN2"; - SemanticElementType[SemanticElementType["TimeN3"] = 24] = "TimeN3"; - SemanticElementType[SemanticElementType["TimeN4"] = 25] = "TimeN4"; - SemanticElementType[SemanticElementType["TimeN5"] = 26] = "TimeN5"; - SemanticElementType[SemanticElementType["TimeN6"] = 27] = "TimeN6"; - SemanticElementType[SemanticElementType["TimeN7"] = 28] = "TimeN7"; - SemanticElementType[SemanticElementType["TimeN8"] = 29] = "TimeN8"; - SemanticElementType[SemanticElementType["TimeN9"] = 30] = "TimeN9"; - SemanticElementType[SemanticElementType["TimeN10"] = 31] = "TimeN10"; - SemanticElementType[SemanticElementType["TimeN11"] = 32] = "TimeN11"; - SemanticElementType[SemanticElementType["TimeN12"] = 33] = "TimeN12"; -})(SemanticElementType || (SemanticElementType = {})); -const TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]])); -const TIME_SIG_NUMERATORS = Object.fromEntries(Array(12) - .fill(null) - .map((_, i) => i + 1) - .map((n) => [n, SemanticElementType[`TimeN${n}`]])); -const et = SemanticElementType; -const ELEMENT_TOKEN_NAMES = { - [et.BOS]: 'BOS', - [et.NoteheadS0]: 'noteheads-s0', - [et.NoteheadS1]: 'noteheads-s1', - [et.NoteheadS2]: 'noteheads-s2', - [et.NoteheadGrace]: 'GraceNotehead', - [et.Flag3]: 'flags-u3', - [et.BeamLeft]: 'BeamLeft', - [et.BeamContinue]: 'BeamContinue', - [et.BeamRight]: 'BeamRight', - [et.Dot]: 'dot', - [et.Rest0]: 'rests-0o', - [et.Rest1]: 'rests-1o', - [et.Rest2]: 'rests-2', - [et.Rest3]: 'rests-3', - [et.Rest4]: 'rests-4', - [et.Rest5]: 'rests-5', - [et.Rest6]: 'rests-6', -}; -const NOTEHEAD_BASE_DIVISION = { - [et.NoteheadS0]: 0, - [et.NoteheadS1]: 1, - [et.NoteheadS2]: 2, - [et.NoteheadGrace]: 2, -}; -const NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace]; -const REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6]; -const BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight]; -const NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES]; -const SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem]; -const TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES]; -const ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem]; -const ELEMENT_TO_STEMBEAM = { - [et.BeamLeft]: 'Open', - [et.BeamRight]: 'Close', -}; -const metaElem = (type) => ({ - type, - staff: -1, - x: 0, - y1: 0, - y2: 0, -}); -const BOS_ELEMENT = metaElem(SemanticElementType.BOS); -const fractionToElems = (fraction) => [ - metaElem(TIME_SIG_NUMERATORS[fraction.numerator]), - metaElem(TIME_SIG_DENOMINATORS[fraction.denominator]), -]; -const argmax = (data, mask) => { - const values = data.filter((_, i) => mask[i]); - const max = Math.max(...values); - return data.findIndex((x) => x === max); -}; -class SemanticCluster extends SimpleClass { - static elementToJSON(elem) { - const result = { - type: elem.type, - staff: elem.staff, - x: elem.x, - y1: elem.y1, - y2: elem.y2, - }; - if (elem.id) - result.id = elem.id; - return result; - } - constructor(data) { - super(); - super.assign(data); - } - get sourceMask() { - return this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type)); - } - get targetMask() { - return this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type)); - } - get vMask() { - return this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type)); - } - get compactMatrixH() { - if (!this.matrixH) - return null; - const sourceMask = this.sourceMask; - const targetMask = this.targetMask; - return this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j])); - } - set compactMatrixH(value) { - this.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]); - } - get compactMatrixV() { - if (!this._matrixV) - return null; - const vMask = this.vMask; - const matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j])); - return [].concat(...matrix.map((row, i) => row.slice(0, i))); - } - set compactMatrixV(value) { - this.matrixV = value && expandMatrixByMaskTriu(value, this.vMask); - } - get matrixV() { - return this.groupsV && matrixFromGroups(this.elements.length, this.groupsV); - } - set matrixV(value) { - if (!value) { - this.groupsV = null; - this._matrixV = value; - return; - } - const THRESHOLD = 0.5; - const groups = []; - const vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i]))); - value.forEach((row, i) => { - if (vMask[i]) { - let found = false; - for (let j = 0; j < i; ++j) { - const cell = row[j]; - if (cell >= THRESHOLD) { - const g = groups.findIndex((group) => group.includes(j)); - groups[g].push(i); - found = true; - break; - } - } - if (!found) - groups.push([i]); - } - }); - this.groupsV = groups; - this._matrixV = value; - } - toJSON() { - return { - __prototype: 'SemanticCluster', - index: this.index, - elements: this.elements.map(SemanticCluster.elementToJSON), - compactMatrixH: this.compactMatrixH, - compactMatrixV: this.compactMatrixV, - //groupsV: this.groupsV, - }; - } - static mapMatrix(matrix, x2i, i2x) { - const rows = x2i.reduce((rows, i, x) => { - if (rows[i]) - rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0)); - else - rows[i] = matrix[x]; - return rows; - }, []); - return rows.map((row) => i2x.map((x) => row[x])); - } - mergeOverlapping() { - const overlaps = this.overlappedNoteheads(); - if (overlaps.length) { - const x2i = this.elements.map((_, index) => { - const pair = overlaps.find((ij) => index === ij[1]); - const i = pair ? pair[0] : index; - return i - overlaps.filter((ij) => ij[1] < i).length; - }); - const i2x = Array(this.elements.length - overlaps.length) - .fill(null) - .map((_, i) => x2i.findIndex((ii) => ii === i)); - this.elements = i2x.map((x) => this.elements[x]); - console.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x); - this.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x); - this.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x])))); - } - } - overlappedNoteheads() { - const indices = []; - const noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type)); - for (let i = 0; i < noteheads.length; ++i) { - const nh1 = noteheads[i]; - for (let j = i + 1; j < noteheads.length; ++j) { - const nh2 = noteheads[j]; - if ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) - indices.push([nh1.index, nh2.index]); - } - } - return indices; - } - getEvents() { - console.assert(this.matrixH, '[SemanticCluster.getEvents] matrixH is null.'); - const NOTE_STEM_CONFIDENCE = 0.5; - const ids = Array(this.elements.length) - .fill(null) - .map((_, index) => index); - const targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type)); - //const stems = ids.filter(i => this.elements[i].type === et.vline_Stem); - const stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model - const stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type)); - const s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0); - const subS0Masks = ids.map(() => false); - // root elements: top NoteheadS0, Rests, stem with noteheads - const stemMap = {}; - stemNotes.forEach((id) => { - const note = this.elements[id]; - const stems = ids - .filter((i) => stemMasks[i]) - .filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range - .sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence - .slice(0, 2) - .filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE); - stems.forEach((stem) => { - stemMap[stem] = stemMap[stem] || []; - stemMap[stem].push(id); - }); - }); - s0s.forEach((id) => { - const s0 = this.elements[id]; - const prevId = argmax(this.matrixH[id], targetMask); - const prev = this.elements[prevId]; - if (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) { - subS0Masks[id] = true; - stemMap[prevId] = stemMap[prevId] || [prevId]; - stemMap[prevId].push(id); - } - else - stemMap[id] = stemMap[id] || [id]; - }); - // setup linkings - const linkings = {}; - const roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type)); - roots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later - const parentMasks = ids.map((id) => id === et.BOS); - roots.forEach((id) => { - const parentId = argmax(this.matrixH[id], parentMasks); - linkings[id] = parentId; - if (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) - parentMasks[parentId] = false; - parentMasks[id] = true; - }); - //console.log("topology:", stemMap, linkings); - const dots = this.elements.filter((elem) => elem.type === et.Dot); - const flags = this.elements.filter((elem) => elem.type === et.Flag3); - const beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type)); - const groupsV = this.groupsV; - return roots - .map((rootId) => { - const root = this.elements[rootId]; - const tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null; - if (REST_ELEMENT_TYPES.includes(root.type)) { - const nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1); - return { - left: root.x - 0.75, - right: root.x + 0.75, - pivotX: root.x, - rest: true, - ys: [root.y1], - noteIds: [root.id], - dots: nearbyDots.length, - division: root.type - et.Rest0, - stemDirection: null, - id: rootId, - prevId: linkings[rootId], - staff: root.staff, - tickGroup, - }; - } - else if (stemMap[rootId]) { - const subNotes = stemMap[rootId].map((id) => this.elements[id]); - const left = Math.min(...subNotes.map((n) => n.x - 0.7)); - const right = Math.max(...subNotes.map((n) => n.x + 0.7)); - subNotes.sort((n1, n2) => n2.y1 - n1.y1); - const ys = subNotes.map((note) => note.y1); - const noteIds = subNotes.map((note) => note.id); - const top = ys[0]; - const bottom = ys[ys.length - 1]; - const nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5); - const dotGroups = nearbyDots.reduce((groups, dot) => { - const y = roundNumber(dot.y1, 0.5); - groups[y] = groups[y] || []; - groups[y].push(dot); - return groups; - }, {}); - const dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0); - let division = NOTEHEAD_BASE_DIVISION[subNotes[0].type]; - let stemDirection = null; - let beam = null; - let tip = null; - if (root.type === et.vline_Stem) { - const topTip = top - root.y1; - const bottomTip = root.y2 - bottom; - stemDirection = topTip > bottomTip ? 'u' : 'd'; - tip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 }; - if (division === 2) { - const flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4]; - const nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]); - division += nearbyFlags.length; - } - //const tipY = stemDirection === "u" ? root.y1 : root.y2; - const tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2]; - const beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]); - beam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null; - } - const grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null; - return { - left, - right, - pivotX: root.x, - ys, - tip, - noteIds, - division, - dots: dotValue, - rest: false, - stemDirection, - beam, - id: rootId, - prevId: linkings[rootId], - staff: subNotes[0].staff, - grace, - tickGroup, - }; - } - }) - .filter(Boolean); - } -} -class SemanticClusterSet { - constructor(data) { - if (data) { - this.clusters = data.clusters; - // upgrade vocab - if (data.vocab) { - const converts = data.vocab - .map((name, i) => [i, SemanticElementType[name]]) - .filter(([x, y]) => x !== y) - .reduce((table, [x, y]) => ((table[x] = y), table), {}); - this.clusters.forEach((connection) => connection.elements.forEach((elem) => { - if (Number.isFinite(converts[elem.type])) - elem.type = converts[elem.type]; - })); - } - } - } - toJSON() { - const vocab = Object.entries(SemanticElementType) - .filter((entry) => Number.isFinite(entry[1])) - .map((entry) => entry[0]); - return { - __prototype: 'SemanticClusterSet', - vocab, - clusters: this.clusters.map((c) => c.toJSON()), - }; - } -} -const expandMatrixByMasks = (matrix, masks) => { - const gen = function* () { - for (const x of matrix) - yield x; - }; - const iter = gen(); - const [maskSrc, maskTar] = masks; - return maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null))); -}; -const expandMatrixByMaskTriu = (matrix, mask) => { - const gen = function* () { - for (const x of matrix) - yield x; - }; - const iter = gen(); - return mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null))); -}; -const matrixFromGroups = (len, groups) => { - const groupIds = Array(len) - .fill(null) - .map((_, i) => groups.findIndex((group) => group.includes(i))); - return Array(len) - .fill(null) - .map((_, i) => Array(len) - .fill(null) - .map((_, j) => { - if (j >= i) - return null; - const id1 = groupIds[i]; - const id2 = groupIds[j]; - if (id1 < 0 || id2 < 0) - return null; - return id1 === id2 ? 1 : 0; - })); -}; - -// implicit note (from expressive marks) types -var ImplicitType; -(function (ImplicitType) { - ImplicitType[ImplicitType["None"] = 0] = "None"; - ImplicitType["Mordent"] = "mordent"; - ImplicitType["Prall"] = "prall"; - ImplicitType["Turn"] = "turn"; - ImplicitType["Trill"] = "trill"; - ImplicitType["Tremolo"] = "tremolo"; - ImplicitType["Arpeggio"] = "arpeggio"; -})(ImplicitType || (ImplicitType = {})); - -/* Wrapper for accessing buffer through sequential reads */ - - - -var stream = class Stream { - constructor (buffer) { - this.array = new Uint8Array(buffer); - this.position = 0; - } - - - eof () { - return this.position >= this.array.length; - } - - - read (length) { - const result = this.array.slice(this.position, this.position + length); - this.position += length; - - return result; - } - - - readString (length) { - const data = Array.from(this.read(length)); - - return data.map(c => String.fromCharCode(c)).join(""); - } - - - // read a big-endian 32-bit integer - readInt32 () { - const result = ( - (this.array[this.position] << 24) + - (this.array[this.position + 1] << 16) + - (this.array[this.position + 2] << 8) + - this.array[this.position + 3]); - this.position += 4; - - return result; - } - - - // read a big-endian 16-bit integer - readInt16 () { - const result = ( - (this.array[this.position] << 8) + - this.array[this.position + 1]); - this.position += 2; - - return result; - } - - - // read an 8-bit integer - readInt8 (signed) { - let result = this.array[this.position]; - if (signed && result > 127) - result -= 256; - this.position += 1; - - return result; - } - - - /* read a MIDI-style variable-length integer - (big-endian value in groups of 7 bits, - with top bit set to signify that another byte follows) - */ - readVarInt () { - let result = 0; - while (true) { - const b = this.readInt8(); - if (b & 0x80) { - result += (b & 0x7f); - result <<= 7; - } - else { - // b is the last byte - return result + b; - } - } - } -}; - -/* -class to parse the .mid file format -(depends on stream.js) -*/ - -const Stream = stream; - - - -var midifile = function MidiFile (data) { - function readChunk (stream) { - const id = stream.readString(4); - const length = stream.readInt32(); - - return { - id, - length, - data: stream.read(length), - }; - } - - let lastEventTypeByte; - - function readEvent (stream) { - const event = {}; - event.deltaTime = stream.readVarInt(); - let eventTypeByte = stream.readInt8(); - if ((eventTypeByte & 0xf0) === 0xf0) { - // system / meta event - if (eventTypeByte === 0xff) { - // meta event - event.type = "meta"; - const subtypeByte = stream.readInt8(); - const length = stream.readVarInt(); - - switch (subtypeByte) { - case 0x00: - event.subtype = "sequenceNumber"; - if (length !== 2) - throw new Error("Expected length for sequenceNumber event is 2, got " + length); - event.number = stream.readInt16(); - - return event; - case 0x01: - event.subtype = "text"; - event.text = stream.readString(length); - - return event; - case 0x02: - event.subtype = "copyrightNotice"; - event.text = stream.readString(length); - - return event; - case 0x03: - event.subtype = "trackName"; - event.text = stream.readString(length); - - return event; - case 0x04: - event.subtype = "instrumentName"; - event.text = stream.readString(length); - - return event; - case 0x05: - event.subtype = "lyrics"; - event.text = stream.readString(length); - - return event; - case 0x06: - event.subtype = "marker"; - event.text = stream.readString(length); - - return event; - case 0x07: - event.subtype = "cuePoint"; - event.text = stream.readString(length); - - return event; - case 0x20: - event.subtype = "midiChannelPrefix"; - if (length !== 1) - throw new Error("Expected length for midiChannelPrefix event is 1, got " + length); - event.channel = stream.readInt8(); - - return event; - case 0x2f: - event.subtype = "endOfTrack"; - if (length !== 0) - throw new Error("Expected length for endOfTrack event is 0, got " + length); - - return event; - case 0x51: - event.subtype = "setTempo"; - if (length !== 3) - throw new Error("Expected length for setTempo event is 3, got " + length); - event.microsecondsPerBeat = ( - (stream.readInt8() << 16) + - (stream.readInt8() << 8) + - stream.readInt8() - ); - - return event; - case 0x54: - event.subtype = "smpteOffset"; - if (length !== 5) - throw new Error("Expected length for smpteOffset event is 5, got " + length); - const hourByte = stream.readInt8(); - event.frameRate = { - 0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30, - }[hourByte & 0x60]; - event.hour = hourByte & 0x1f; - event.min = stream.readInt8(); - event.sec = stream.readInt8(); - event.frame = stream.readInt8(); - event.subframe = stream.readInt8(); - - return event; - case 0x58: - event.subtype = "timeSignature"; - if (length !== 4) - throw new Error("Expected length for timeSignature event is 4, got " + length); - event.numerator = stream.readInt8(); - event.denominator = Math.pow(2, stream.readInt8()); - event.metronome = stream.readInt8(); - event.thirtyseconds = stream.readInt8(); - - return event; - case 0x59: - event.subtype = "keySignature"; - if (length !== 2) - throw new Error("Expected length for keySignature event is 2, got " + length); - event.key = stream.readInt8(true); - event.scale = stream.readInt8(); - - return event; - case 0x7f: - event.subtype = "sequencerSpecific"; - event.data = stream.readString(length); - - return event; - default: - // console.log("Unrecognised meta event subtype: " + subtypeByte); - event.subtype = "unknown"; - event.data = stream.readString(length); - - return event; - } - - //event.data = stream.readString(length); - //return event; - } - else if (eventTypeByte === 0xf0) { - event.type = "sysEx"; - const length = stream.readVarInt(); - event.data = stream.readString(length); - - return event; - } - else if (eventTypeByte === 0xf7) { - event.type = "dividedSysEx"; - const length = stream.readVarInt(); - event.data = stream.readString(length); - - return event; - } - else - throw new Error("Unrecognised MIDI event type byte: " + eventTypeByte); - } - else { - /* channel event */ - let param1; - if ((eventTypeByte & 0x80) === 0) { - /* running status - reuse lastEventTypeByte as the event type. - eventTypeByte is actually the first parameter - */ - param1 = eventTypeByte; - eventTypeByte = lastEventTypeByte; - } - else { - param1 = stream.readInt8(); - lastEventTypeByte = eventTypeByte; - } - - const eventType = eventTypeByte >> 4; - event.channel = eventTypeByte & 0x0f; - event.type = "channel"; - - switch (eventType) { - case 0x08: - event.subtype = "noteOff"; - event.noteNumber = param1; - event.velocity = stream.readInt8(); - - return event; - case 0x09: - event.noteNumber = param1; - event.velocity = stream.readInt8(); - if (event.velocity === 0) - event.subtype = "noteOff"; - else - event.subtype = "noteOn"; - - return event; - case 0x0a: - event.subtype = "noteAftertouch"; - event.noteNumber = param1; - event.amount = stream.readInt8(); - - return event; - case 0x0b: - event.subtype = "controller"; - event.controllerType = param1; - event.value = stream.readInt8(); - - return event; - case 0x0c: - event.subtype = "programChange"; - event.programNumber = param1; - - return event; - case 0x0d: - event.subtype = "channelAftertouch"; - event.amount = param1; - - return event; - case 0x0e: - event.subtype = "pitchBend"; - event.value = param1 + (stream.readInt8() << 7); - - return event; - default: - throw new Error("Unrecognised MIDI event type: " + eventType); - - /* - console.log("Unrecognised MIDI event type: " + eventType); - stream.readInt8(); - event.subtype = 'unknown'; - return event; - */ - } - } - } - - - let source = data; - if (typeof data === "string") - source = data.split("").map(c => c.charCodeAt(0)); - - const stream = new Stream(source); - const headerChunk = readChunk(stream); - if (headerChunk.id !== "MThd" || headerChunk.length !== 6) - throw new Error("Bad .mid file - header not found"); - - const headerStream = new Stream(headerChunk.data); - const formatType = headerStream.readInt16(); - const trackCount = headerStream.readInt16(); - const timeDivision = headerStream.readInt16(); - - let ticksPerBeat; - if (timeDivision & 0x8000) - throw new Error("Expressing time division in SMTPE frames is not supported yet"); - else - ticksPerBeat = timeDivision; - - - const header = { - formatType, - trackCount, - ticksPerBeat, - }; - const tracks = []; - for (let i = 0; i < header.trackCount; i++) { - tracks[i] = []; - const trackChunk = readChunk(stream); - if (trackChunk.id !== "MTrk") - throw new Error("Unexpected chunk - expected MTrk, got " + trackChunk.id); - - const trackStream = new Stream(trackChunk.data); - while (!trackStream.eof()) { - const event = readEvent(trackStream); - tracks[i].push(event); - } - } - - return { - header, - tracks, - }; -}; - -/* Wrapper for accessing strings through sequential writes */ - - - -var streamEx = class OStream { - constructor () { - this.buffer = ""; - } - - write (str) { - this.buffer += str; - } - - /* write a big-endian 32-bit integer */ - writeInt32 (i) { - this.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) + - String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff); - } - - /* write a big-endian 16-bit integer */ - writeInt16 (i) { - this.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff); - } - - /* write an 8-bit integer */ - writeInt8 (i) { - this.buffer += String.fromCharCode(i & 0xff); - } - - /* write a MIDI-style variable-length integer - (big-endian value in groups of 7 bits, - with top bit set to signify that another byte follows) - */ - writeVarInt (i) { - if (i < 0) - throw new Error("OStream.writeVarInt minus number: " + i); - - const b = i & 0x7f; - i >>= 7; - let str = String.fromCharCode(b); - - while (i) { - const b = i & 0x7f; - i >>= 7; - str = String.fromCharCode(b | 0x80) + str; - } - - this.buffer += str; - } - - getBuffer () { - return this.buffer; - } - - getArrayBuffer () { - return Uint8Array.from(this.buffer.split("").map(c => c.charCodeAt(0))).buffer; - } -}; - -/* -class to encode the .mid file format -(depends on streamEx.js) -*/ - -const OStream = streamEx; - - - -var midifileEx = function OMidiFile ({ header, tracks }) { - function writeChunk (stream, id, data) { - console.assert(id.length === 4, "chunk id must be 4 byte"); - - stream.write(id); - stream.writeInt32(data.length); - stream.write(data); - } - - function writeEvent (stream, event) { - if (event.subtype === "unknown") - return; - - stream.writeVarInt(event.deltaTime); - - switch (event.type) { - case "meta": - stream.writeInt8(0xff); - - switch (event.subtype) { - case "sequenceNumber": - stream.writeInt8(0x00); - stream.writeVarInt(2); - - stream.writeInt16(event.number); - - break; - case "text": - stream.writeInt8(0x01); - stream.writeVarInt(event.text.length); - - stream.write(event.text); - - break; - case "copyrightNotice": - stream.writeInt8(0x02); - stream.writeVarInt(event.text.length); - - stream.write(event.text); - - break; - case "trackName": - stream.writeInt8(0x03); - stream.writeVarInt(event.text.length); - - stream.write(event.text); - - break; - case "instrumentName": - stream.writeInt8(0x04); - stream.writeVarInt(event.text.length); - - stream.write(event.text); - - break; - case "lyrics": - stream.writeInt8(0x05); - stream.writeVarInt(event.text.length); - - stream.write(event.text); - - break; - case "marker": - stream.writeInt8(0x06); - stream.writeVarInt(event.text.length); - - stream.write(event.text); - - break; - case "cuePoint": - stream.writeInt8(0x07); - stream.writeVarInt(event.text.length); - - stream.write(event.text); - - break; - case "midiChannelPrefix": - stream.writeInt8(0x20); - stream.writeVarInt(1); - - stream.writeInt8(event.channel); - - break; - case "endOfTrack": - stream.writeInt8(0x2f); - stream.writeVarInt(0); - - break; - case "setTempo": - stream.writeInt8(0x51); - stream.writeVarInt(3); - - stream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff); - stream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff); - stream.writeInt8(event.microsecondsPerBeat & 0xff); - - break; - case "smpteOffset": - stream.writeInt8(0x54); - stream.writeVarInt(5); - - var frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate]; - stream.writeInt8(event.hour | frameByte); - stream.writeInt8(event.min); - stream.writeInt8(event.sec); - stream.writeInt8(event.frame); - stream.writeInt8(event.subframe); - - break; - case "timeSignature": - stream.writeInt8(0x58); - stream.writeVarInt(4); - - stream.writeInt8(event.numerator); - stream.writeInt8(Math.log2(event.denominator)); - stream.writeInt8(event.metronome); - stream.writeInt8(event.thirtyseconds); - - break; - case "keySignature": - stream.writeInt8(0x59); - stream.writeVarInt(2); - - stream.writeInt8(event.key); - stream.writeInt8(event.scale); - - break; - case "sequencerSpecific": - stream.writeInt8(0x7f); - stream.writeVarInt(event.data.length); - - stream.write(event.data); - - break; - default: - throw new Error("unhandled event subtype:" + event.subtype); - } - - break; - case "sysEx": - stream.writeInt8(0xf0); - stream.writeVarInt(event.data.length); - stream.write(event.data); - - break; - case "dividedSysEx": - stream.writeInt8(0xf7); - stream.writeVarInt(event.data.length); - stream.write(event.data); - - break; - case "channel": - switch (event.subtype) { - case "noteOn": - stream.writeInt8(0x90 | event.channel); - stream.writeInt8(event.noteNumber); - stream.writeInt8(event.velocity); - - break; - case "noteOff": - stream.writeInt8(0x80 | event.channel); - stream.writeInt8(event.noteNumber); - stream.writeInt8(event.velocity ? event.velocity : 0); - - break; - case "noteAftertouch": - stream.writeInt8(0xa0 | event.channel); - stream.writeInt8(event.noteNumber); - stream.writeInt8(event.amount); - - break; - case "controller": - stream.writeInt8(0xb0 | event.channel); - stream.writeInt8(event.controllerType); - stream.writeInt8(event.value); - - break; - case "programChange": - stream.writeInt8(0xc0 | event.channel); - stream.writeInt8(event.programNumber); - - break; - case "channelAftertouch": - stream.writeInt8(0xd0 | event.channel); - stream.writeInt8(event.amount); - - break; - case "pitchBend": - stream.writeInt8(0xe0 | event.channel); - stream.writeInt8(event.value & 0xff); - stream.writeInt8((event.value >> 7) & 0xff); - - break; - default: - throw new Error("unhandled event subtype:" + event.subtype); - } - - break; - default: - throw new Error("unhandled event type:" + event.type); - } - } - - const stream = new OStream(); - - const headerChunk = new OStream(); - headerChunk.writeInt16(header.formatType); - headerChunk.writeInt16(tracks.length); - headerChunk.writeInt16(header.ticksPerBeat); - - writeChunk(stream, "MThd", headerChunk.getBuffer()); - - for (let i = 0; i < tracks.length; ++i) { - const trackChunk = new OStream(); - - for (let ei = 0; ei < tracks[i].length; ++ei) - writeEvent(trackChunk, tracks[i][ei]); - - writeChunk(stream, "MTrk", trackChunk.getBuffer()); - } - - return stream.getArrayBuffer(); -}; - -var MIDI$2 = { - parseMidiData: midifile, - encodeMidiFile: midifileEx, -}; - -const midiToSequence = (midiFile, {timeWarp = 1} = {}) => { - const trackStates = []; - let beatsPerMinute = 120; - const ticksPerBeat = midiFile.header.ticksPerBeat; - - for (let i = 0; i < midiFile.tracks.length; i++) { - trackStates[i] = { - nextEventIndex: 0, - ticksToNextEvent: ( - midiFile.tracks[i].length ? - midiFile.tracks[i][0].deltaTime : - null - ), - }; - } - - function getNextEvent () { - let ticksToNextEvent = null; - let nextEventTrack = null; - let nextEventIndex = null; - - for (let i = 0; i < trackStates.length; i++) { - if ( - trackStates[i].ticksToNextEvent != null - && (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent) - ) { - ticksToNextEvent = trackStates[i].ticksToNextEvent; - nextEventTrack = i; - nextEventIndex = trackStates[i].nextEventIndex; - } - } - if (nextEventTrack != null) { - /* consume event from that track */ - const nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex]; - if (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) - trackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime; - else - trackStates[nextEventTrack].ticksToNextEvent = null; - - trackStates[nextEventTrack].nextEventIndex += 1; - /* advance timings on all tracks by ticksToNextEvent */ - for (let i = 0; i < trackStates.length; i++) { - if (trackStates[i].ticksToNextEvent != null) - trackStates[i].ticksToNextEvent -= ticksToNextEvent; - } - return { - ticksToEvent: ticksToNextEvent, - event: nextEvent, - track: nextEventTrack, - }; - } - else - return null; - - } // - let midiEvent; - const events = []; - // - function processEvents () { - function processNext () { - let secondsToGenerate = 0; - if (midiEvent.ticksToEvent > 0) { - const beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat; - secondsToGenerate = beatsToGenerate / (beatsPerMinute / 60); - } - - // beatsPerMinute must be changed after secondsToGenerate calculation - if ( midiEvent.event.type == "meta" && midiEvent.event.subtype == "setTempo" ) { - // tempo change events can occur anywhere in the middle and affect events that follow - beatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat; - } - - const time = (secondsToGenerate * 1000 * timeWarp) || 0; - events.push([ midiEvent, time ]); - midiEvent = getNextEvent(); - } // - if (midiEvent = getNextEvent()) { - while (midiEvent) - processNext(); - } - } - processEvents(); - - return events; -}; - - -const trimSequence = seq => { - const status = new Map(); - - return seq.filter(([{event, ticksToEvent}]) => { - if (ticksToEvent > 0) - status.clear(); - - if (event.type !== "channel") - return true; - - const key = `${event.subtype}|${event.channel}|${event.noteNumber}`; - - if (status.get(key)) { - //console.debug("event trimmed:", event, ticksToEvent); - return false; - } - - status.set(key, event); - - return true; - }); -}; - - -const fixOverlapNotes = seq => { - const noteMap = new Map(); - const overlapMap = new Map(); - const swaps = []; - - let leapIndex = -1; - - seq.forEach(([{event, ticksToEvent}], index) => { - if (ticksToEvent > 0) - leapIndex = index; - - if (event.type !== "channel") - return; - - const key = `${event.channel}|${event.noteNumber}`; - - switch (event.subtype) { - case "noteOn": - if (noteMap.get(key)) - overlapMap.set(key, leapIndex); - else - noteMap.set(key, leapIndex); - - break; - case "noteOff": - if (overlapMap.get(key)) { - swaps.push([overlapMap.get(key), index]); - overlapMap.delete(key); - } - else - noteMap.delete(key); - - break; - } - }); - - // shift overlapped swaps - swaps.forEach((swap, i) => { - for (let ii = i - 1; ii >= 0; --ii) { - const pre = swaps[ii]; - if (pre[1] < swap[0]) - break; - - if (swap[0] > pre[0]) - ++swap[0]; - } - }); - - //console.debug("swaps:", swaps); - swaps.forEach(([front, back]) => { - if (back >= seq.length - 1 || front < 0) - return; - - const offEvent = seq[back]; - const nextEvent = seq[back + 1]; - const leapEvent = seq[front]; - - if (!leapEvent[0].ticksToEvent) { - console.warn("invalid front index:", front, back, leapEvent); - return; - } - - // ms per tick - const tempo = leapEvent[1] / leapEvent[0].ticksToEvent; - - nextEvent[1] += offEvent[1]; - nextEvent[0].ticksToEvent += offEvent[0].ticksToEvent; - - offEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1; - leapEvent[0].ticksToEvent = 1; - - offEvent[1] = offEvent[0].ticksToEvent * tempo; - leapEvent[1] = leapEvent[0].ticksToEvent * tempo; - //console.debug("swap:", [front, back], offEvent, nextEvent, leapEvent); - - seq.splice(back, 1); - seq.splice(front, 0, offEvent); - }); - - return seq; -}; - - - -var MidiSequence$1 = { - midiToSequence, - trimSequence, - fixOverlapNotes, -}; - -const MidiSequence = MidiSequence$1; - - - -const PedalControllerTypes = { - 64: "Sustain", - 65: "Portamento", - 66: "Sostenuto", - 67: "Soft", -}; - - - -class Notation$1 { - static parseMidi (data, {fixOverlap = true} = {}) { - const channelStatus = []; - const pedalStatus = {}; - const pedals = {}; - const channels = []; - const bars = []; - let time = 0; - let millisecondsPerBeat = 600000 / 120; - let beats = 0; - let numerator = 4; - let barIndex = 0; - const keyRange = {}; - let rawTicks = 0; - let ticks = 0; - let correspondences; - const tempos = []; - - const ticksPerBeat = data.header.ticksPerBeat; - - let rawEvents = MidiSequence.midiToSequence(data); - - if (fixOverlap) - rawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents)); - - const events = rawEvents.map(d => ({ - data: d[0].event, - track: d[0].track, - deltaTime: d[1], - deltaTicks: d[0].ticksToEvent, - })); - - let index = 0; - - const ticksNormal = 1; - - for (const ev of events) { - rawTicks += ev.deltaTicks; - ticks = Math.round(rawTicks * ticksNormal); - - if (ev.deltaTicks > 0) { - // append bars - const deltaBeats = ev.deltaTicks / ticksPerBeat; - for (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) { - const t = time + (b - beats) * millisecondsPerBeat; - bars.push({time: t, index: barIndex % numerator}); - - ++barIndex; - } - - beats += deltaBeats; - } - - time += ev.deltaTime; - - //const ticksTime = beats * millisecondsPerBeat; - //console.log("time:", time, ticksTime, ticksTime - time); - - ev.time = time; - ev.ticks = ticks; - - const event = ev.data; - switch (event.type) { - case "channel": - //channelStatus[event.channel] = channelStatus[event.channel] || []; - - switch (event.subtype) { - case "noteOn": - { - const pitch = event.noteNumber; - //channelStatus[event.channel][pitch] = { - channelStatus.push({ - channel: event.channel, - pitch, - startTick: ticks, - start: time, - velocity: event.velocity, - beats: beats, - track: ev.track, - }); - - keyRange.low = Math.min(keyRange.low || pitch, pitch); - - ev.index = index; - ++index; - } - - break; - case "noteOff": - { - const pitch = event.noteNumber; - - channels[event.channel] = channels[event.channel] || []; - - const statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch); - if (statusIndex >= 0) { - const status = channelStatus.splice(statusIndex, 1)[0]; - - channels[event.channel].push({ - channel: event.channel, - startTick: status.startTick, - endTick: ticks, - pitch, - start: status.start, - duration: time - status.start, - velocity: status.velocity, - beats: status.beats, - track: status.track, - finger: status.finger, - }); - } - else - console.debug("unexpected noteOff: ", time, event); - - keyRange.high = Math.max(keyRange.high || pitch, pitch); - } - - break; - case "controller": - switch (event.controllerType) { - // pedal controllers - case 64: - case 65: - case 66: - case 67: - const pedalType = PedalControllerTypes[event.controllerType]; - - pedalStatus[event.channel] = pedalStatus[event.channel] || {}; - pedals[event.channel] = pedals[event.channel] || []; - - const status = pedalStatus[event.channel][pedalType]; - - if (status) - pedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value}); - pedalStatus[event.channel][pedalType] = {start: time, value: event.value}; - - break; - } - - break; - } - - break; - case "meta": - switch (event.subtype) { - case "setTempo": - millisecondsPerBeat = event.microsecondsPerBeat / 1000; - //beats = Math.round(beats); - //console.assert(Number.isFinite(time), "invalid time:", time); - tempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time}); - - break; - case "timeSignature": - numerator = event.numerator; - barIndex = 0; - - break; - case "text": - if (!correspondences && /^find-corres:/.test(event.text)) { - const captures = event.text.match(/:([\d\,-]+)/); - const str = captures && captures[1] || ""; - correspondences = str.split(",").map(s => Number(s)); - } - else if (/fingering\(.*\)/.test(event.text)) { - const [_, fingers] = event.text.match(/\((.+)\)/); - const finger = Number(fingers); - if (!Number.isNaN(finger)) { - const status = channelStatus[channelStatus.length - 1]; - if (status) - status.finger = finger; - - const event = events.find(e => e.index == index - 1); - if (event) - event.data.finger = finger; - } - } - - break; - case "copyrightNotice": - console.log("MIDI copyright:", event.text); - - break; - } - - break; - } - } - - channelStatus.forEach(status => { - console.debug("unclosed noteOn event at", status.startTick, status); - - channels[status.channel].push({ - startTick: status.startTick, - endTick: ticks, - pitch: status.pitch, - start: status.start, - duration: time - status.start, - velocity: status.velocity, - beats: status.beats, - track: status.track, - finger: status.finger, - }); - }); - - return new Notation$1({ - channels, - keyRange, - pedals, - bars, - endTime: time, - endTick: ticks, - correspondences, - events, - tempos, - ticksPerBeat, - meta: {}, - }); - } - - - constructor (fields) { - Object.assign(this, fields); - - // channels to notes - this.notes = []; - for (const channel of this.channels) { - if (channel) { - for (const note of channel) - this.notes.push(note); - } - } - this.notes.sort(function (n1, n2) { - return n1.start - n2.start; - }); - - for (const i in this.notes) - this.notes[i].index = Number(i); - - - // duration - this.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0, - - //this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0; - - - // pitch map - this.pitchMap = []; - for (const c in this.channels) { - for (const n in this.channels[c]) { - const pitch = this.channels[c][n].pitch; - this.pitchMap[pitch] = this.pitchMap[pitch] || []; - - this.pitchMap[pitch].push(this.channels[c][n]); - } - } - - this.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start)); - - - /*// setup measure notes index - if (this.measures) { - const measure_list = []; - - let last_measure = null; - const measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0])); - for (const [t, measure] of measure_entries) { - //console.log("measure time:", Number(t)); - measure.startTick = Number(t); - measure.notes = []; - - if (last_measure) - last_measure.endTick = measure.startTick; - - const m = measure.measure; - measure_list[m] = measure_list[m] || []; - measure_list[m].push(measure); - - last_measure = measure; - } - if (last_measure) - last_measure.endTick = this.notes[this.notes.length - 1].endTick; - for (const i in this.notes) { - const note = this.notes[i]; - for (const t in this.measures) { - const measure = this.measures[t]; - if (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick) - measure.notes.push(note); - } - } - - this.measure_list = measure_list; - }*/ - - - // prepare beats info - if (this.meta.beatInfos) { - for (let i = 0; i < this.meta.beatInfos.length; ++i) { - const info = this.meta.beatInfos[i]; - if (i > 0) { - const lastInfo = this.meta.beatInfos[i - 1]; - info.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat); - } - else - info.beatIndex = 0; - } - } - - - // compute tempos tick -> time - { - let time = 0; - let ticks = 0; - let tempo = 500000; - for (const entry of this.tempos) { - const deltaTicks = entry.tick - ticks; - time += (tempo / 1000) * deltaTicks / this.ticksPerBeat; - - ticks = entry.tick; - tempo = entry.tempo; - - entry.time = time; - } - } - } - - - findChordBySoftindex (softIndex, radius = 0.8) { - return this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius); - } - - - averageTempo (tickRange) { - tickRange = tickRange || {from: 0, to: this.endtick}; - - console.assert(this.tempos, "no tempos."); - console.assert(tickRange.to > tickRange.from, "range is invalid:", tickRange); - - const span = index => { - const from = Math.max(tickRange.from, this.tempos[index].tick); - const to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to; - - return Math.max(0, to - from); - }; - - const tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0); - - const average = tempo_sum / (tickRange.to - tickRange.from); - - // convert microseconds per beat to beats per minute - return 60e+6 / average; - } - - - ticksToTime (tick) { - console.assert(Number.isFinite(tick), "invalid tick value:", tick); - console.assert(this.tempos && this.tempos.length, "no tempos."); - - const next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick); - const tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0); - - const tempo = this.tempos[tempo_index]; - - return tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat; - } - - - timeToTicks (time) { - console.assert(Number.isFinite(time), "invalid time value:", time); - console.assert(this.tempos && this.tempos.length, "no tempos."); - - const next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time); - const tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0); - - const tempo = this.tempos[tempo_index]; - - return tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3); - } - - - tickRangeToTimeRange (tickRange) { - console.assert(tickRange.to >= tickRange.from, "invalid tick range:", tickRange); - - return { - from: this.ticksToTime(tickRange.from), - to: this.ticksToTime(tickRange.to), - }; - } - - - /*getMeasureRange (measureRange) { - console.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), "invalid measure range:", measureRange); - console.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], "no measure data for specific index:", this.measure_list, measureRange); - - const startMeasure = this.measure_list[measureRange.start][0]; - let endMeasure = null; - for (const measure of this.measure_list[measureRange.end]) { - if (measure.endTick > startMeasure.startTick) { - endMeasure = measure; - break; - } - } - - // there no path between start measure and end measure. - if (!endMeasure) - return null; - - const tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick}; - const timeRange = this.tickRangeToTimeRange(tickRange); - timeRange.duration = timeRange.to - timeRange.from; - - return { - tickRange, - timeRange, - }; - }*/ - - - scaleTempo ({factor, headTempo}) { - console.assert(this.tempos && this.tempos.length, "[Notation.scaleTempo] tempos is empty."); - - if (headTempo) - factor = headTempo / this.tempos[0].tempo; - - console.assert(Number.isFinite(factor) && factor > 0, "[Notation.scaleTempo] invalid factor:", factor); - - this.tempos.forEach(tempo => { - tempo.tempo *= factor; - tempo.time *= factor; - }); - this.events.forEach(event => { - event.deltaTime *= factor; - event.time *= factor; - }); - this.notes.forEach(note => { - note.start *= factor; - note.duration *= factor; - }); - - this.endTime *= factor; - } -} - - -var MusicNotation$1 = { - Notation: Notation$1, -}; - -const { Notation } = MusicNotation$1; - - - -//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms)); -const animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve)); - - -class MidiPlayer$1 { - constructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) { - this.cacheSpan = cacheSpan; - this.onMidi = onMidi; - this.onPlayFinish = onPlayFinish; - this.onTurnCursor = onTurnCursor; - - let notation; - if (midiData.notes && Number.isFinite(midiData.endTime)) - notation = midiData; - else - notation = Notation.parseMidi(midiData); - - this.notation = notation; - this.events = notation.events; - //console.log("events:", this.events); - - this.isPlaying = false; - this.progressTime = 0; - this.startTime = performance.now(); - this.duration = notation.endTime; - this.cursorTurnDelta = 0; - - console.assert(notation.tempos && notation.tempos.length, "[MidiPlayer] invalid notation, tempos is empty."); - } - - - dispose () { - this.isPlaying = false; - this.progressTime = 0; - } - - - get progressTicks () { - return this.notation.timeToTicks(this.progressTime); - } - - - set progressTicks (value) { - this.progressTime = this.notation.ticksToTime(value); - - if (this.onTurnCursor) - this.onTurnCursor(this.progressTime); - } - - - async play ({nextFrame = animationDelay} = {}) { - if (this.progressTime >= this.duration) - this.progressTime = 0; - - let now = performance.now(); - this.startTime = now - this.progressTime; - - this.isPlaying = true; - - let currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime); - - while (this.isPlaying) { - for (; currentEventIndex < this.events.length; ++currentEventIndex) { - const event = this.events[currentEventIndex]; - //console.log("play event:", currentEventIndex, event.time, this.progressTime + this.cacheSpan); - if (!event || event.time > this.progressTime + this.cacheSpan) - break; - - if (event.data.type === "channel" && this.startTime + event.time >= now) - if (this.onMidi) - this.onMidi(event.data, this.startTime + event.time); - } - - await nextFrame(); - - if (!this.isPlaying) - break; - - if (this.cursorTurnDelta !== 0) { - const backturn = this.cursorTurnDelta < 0; - - this.startTime -= this.cursorTurnDelta; - this.cursorTurnDelta = 0; - - if (backturn) { - for (; currentEventIndex > 0; --currentEventIndex) { - const eventTime = this.events[currentEventIndex].time; - if (this.startTime + eventTime < now) - break; - } - } - } - - now = performance.now(); - - this.progressTime = now - this.startTime; - - if (this.progressTime > this.duration) { - this.isPlaying = false; - - if (this.onPlayFinish) - this.onPlayFinish(); - } - } - } - - - pause () { - this.isPlaying = false; - } - - - turnCursor (time) { - //console.log("onTurnCursor:", time, oldTime); - if (this.isPlaying) - this.cursorTurnDelta += time - this.progressTime; - else - this.progressTime = time; - - if (this.onTurnCursor) - this.onTurnCursor(time); - } -} - - -var MidiPlayer_1 = MidiPlayer$1; - -var config = { - CostStepAttenuation: 0.6, - SkipDeep: 3, - PriorDistanceSigmoidFactor: 0.1, - PriorValueSigmoidFactor: 0.12, - - SkipCost: 0.5, - LagOffsetCost: 1, - LeadOffsetCost: 1.6, - ZeroOffsetCost: 0.58, - - RelocationThreshold: 6, -}; - -const {pick} = require$$0__default["default"]; - -const Config$1 = config; - - - -class Node$2 { - constructor (s_note, c_note) { - this.s_note = s_note; - this.c_note = c_note; - - console.assert(this.s_note.softIndex != null, "s_note softIndex is null"); - this.offset = this.s_note.softIndex - this.c_note.softIndex; - - this._prev = null; - this._totalCost = 0; - this._value = 0; - this.cacheDirty = true; - - //this.evaluatePrev(Node.Zero); - } - - - get prev () { - return this._prev; - } - - - set prev (value) { - if (value != this._prev) { - this._prev = value; - this.cacheDirty = true; - } - } - - - get si () { - return this.s_note.index; - } - - - get ci () { - return this.c_note.index; - } - - - get root () { - return this.prev.root || this; - } - - - get rootSi () { - return !this.prev.zero ? this.prev.rootSi : this.si; - } - - - get id () { - return `${this.s_note.index},${this.c_note.index}`; - } - - - static cost (prev, skip, self) { - return prev * Config$1.CostStepAttenuation + Math.tanh(skip * Config$1.SkipCost) + Math.tanh(self * 0.5); - } - - - updateCache () { - if (this.cacheDirty) { - this._totalCost = Node$2.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost); - this._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5); - - this.cacheDirty = false; - } - } - - - get totalCost () { - this.updateCache(); - - return this._totalCost; - } - - - get value () { - this.updateCache(); - - return this._value; - } - - - get deep () { - return this.prev.deep + 1; - } - - - get path () { - const path = []; - for (let node = this; !node.zero; node = node.prev) { - path[node.si] = node.ci; - } - - for (let i = 0; i < path.length; ++i) - if (typeof path[i] != "number") - path[i] = -1; - - return path; - } - - - dump () { - return pick(this, ["id", "si", "ci", "rootSi", "value", "deep", "rootSi", "offset", "prior", "selfCost", "totalCost"]); - } - - - evaluatePrev (node) { - const cost = this.evaluatePrevCost(node); - - console.assert(this.si - node.si >= 1, "node index error:", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/); - //if (this.si - node.si < 1) - // debugger; - - const totalCost = Node$2.cost(node.totalCost, this.si - node.si - 1, cost); - - if (!this.prev || totalCost < this.totalCost) { - this.prev = node; - this.selfCost = cost; - - return true; - } - - return false; - } - - - evaluatePrevCost (node) { - let cost = 0; - - if (node.offset != null) { - const bias = this.offset - node.offset; - const costCoeff = node.zero ? Config$1.ZeroOffsetCost : (bias > 0 ? Config$1.LagOffsetCost : Config$1.LeadOffsetCost); - cost += (bias * costCoeff) ** 2; - } - - return cost; - } - - - priorByOffset (offset) { - const distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04); - - return Math.tanh(this.value * Config$1.PriorValueSigmoidFactor) - Math.tanh(distance * Config$1.PriorDistanceSigmoidFactor); - //return Math.log(this.value) * Math.tanh(4 / distance); - //return this.value - distance; - } - - - static zero () { - return { - zero: true, - totalCost: 0, - value: 0, - si: -1, - ci: -1, - deep: 0, - offset: 0, - }; - } -} - - -var node = Node$2; - -const Config = config; -const Node$1 = node; - - - -class Navigator$1 { - constructor (criterion, sample, options = {}) { - this.criterion = criterion; - this.sample = sample; - - this.getCursorOffset = options.getCursorOffset || (() => null); - this.outOfPage = options.outOfPage; - - this.bestNode = null; - this.fineCursor = null; - - this.breakingSI = sample.notes.length - 1; - - this.zeroNode = Node$1.zero(); - this.zeroNode.offset = this.getCursorOffset() || 0; - - this.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold; - } - - - step (index) { - //console.log("step:", this.zeroNode.offset); - const note = this.sample.notes[index]; - - if (note.matches.length > 0) { - //console.log("zeroNode.offset:", index, this.zeroNode.offset); - note.matches.forEach(node => { - node.evaluatePrev(this.zeroNode); - //console.log("node:", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset); - - for (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) { - //const skipCost = Config.SkipCost * (index - 1 - si); - - const prevNote = this.sample.notes[si]; - console.assert(prevNote, "prevNote is null:", si, index, this.sample.notes); - prevNote.matches.forEach(prevNode => { - const bias = node.offset - prevNode.offset; - if (/*prevNode.totalCost + skipCost < node.totalCost - &&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost)) - node.evaluatePrev(prevNode); - }); - } - - node.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset); - - if (node.prior > 0 && this.outOfPage) { - const tick = this.criterion.notes[node.ci].startTick; - if (this.outOfPage(tick)) - node.prior -= 0.7; - } - }); - - note.matches.sort((c1, c2) => c2.prior - c1.prior); - this.cursors = note.matches; - //console.log("navigator cursors:", this.cursors); - - let fineCursor = null; - const nullLength = this.nullSteps(index); - - const cursor = this.cursors[0]; - if (cursor && cursor.totalCost < 1) { - //console.log("nullLength:", nullLength, nullLength * Math.log(cursor.value / 4)); - if (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) { - this.zeroNode.offset = cursor.offset; - - fineCursor = cursor; - - if (!this.bestNode || cursor.value > this.bestNode.value) - this.bestNode = cursor; - } - } - - if (fineCursor) - this.fineCursor = fineCursor; - else { - if (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) { - this.zeroNode.offset += note.deltaSi * Math.tanh(nullLength); - console.assert(!Number.isNaN(this.zeroNode.offset), "zeroNode.offset is NaN.", note.deltaSi, nullLength); - } - } - } - else - this.cursors = []; - } - - - path ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) { - const path = []; - - let offset = null; - - for (let si = toIndex; si >= fromIndex;) { - const note = this.sample.notes[si]; - - if (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) { - //if (note.matches.length) - // console.log("path -1:", si, note.matches[0].prior, note.matches[0].totalCost); - path[si] = -1; - --si; - continue; - } - - // sort nodes by backwards heuristic offset - if (offset != null) { - note.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1)); - note.matches.sort((n1, n2) => n2.backPrior - n1.backPrior); - } - - const node = note.matches[0]; - node.path.forEach((ci, si) => path[si] = ci); - //console.log("node path:", si, node.path); - - offset = node.root.offset; - - si = node.rootSi - 1; - } - - console.assert(path.length == toIndex + 1, "path length error:", path, fromIndex, toIndex + 1, - this.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null); - - return path; - } - - - nullSteps (index) { - return index - (this.fineCursor ? this.fineCursor.si : -1) - 1; - } - - - resetCursor (index, {breaking = true} = {}) { - if (breaking) - this.breakingSI = index; - - const cursorOffset = this.getCursorOffset(); - if (cursorOffset != null) { - //console.log("cursorOffset:", cursorOffset); - - this.zeroNode.offset = cursorOffset; - //this.breaking = this.nullSteps(index) > Config.SkipDeep; - //if (this.breaking) // trivial zero node si resets result in focus path interruption - this.zeroNode.si = index; - this.fineCursor = null; - - console.assert(!Number.isNaN(this.zeroNode.offset), "zeroNode.offset is NaN.", cursorOffset); - //console.log("cursor offset reset:", cursorOffset); - - return true; - } - - return false; - } - - - get relocationTendency () { - const cursor = this.cursors && this.cursors[0]; - if (!cursor) - return null; - - const nullLength = this.nullSteps(cursor.si); - if (nullLength <= 0) - return 0; - - return Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold; - } -} - - -var navigator = Navigator$1; - -const Node = node; -const Navigator = navigator; - - - -const HEART_BEAT = 800; // in ms -const SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24; - - -const normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL); - - -// greater softIndexFactor make 'harder' soft index -const makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) { - index = Number(index); - - const note = notes[index]; - - // make soft index - if (index > 0) { - const lastNote = notes[index - 1]; - - console.assert(note.start != null, "note.start is null", note); - console.assert(lastNote.start != null, "lastNote.start is null", lastNote); - - note.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor); - note.softIndex = lastNote.softIndex + note.deltaSi; - - console.assert(!Number.isNaN(note.deltaSi), "note.deltaSi is NaN.", note.start, lastNote.start); - } - else { - note.softIndex = 0; - note.deltaSi = 0; - } -}; - - -const makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) { - note.matches = []; - - const targetList = criterion.pitchMap[note.pitch]; - if (targetList) { - for (const targetNote of targetList) { - const node = new Node(note, targetNote); - if (zeroNode) - node.evaluatePrev(zeroNode); - - note.matches.push(node); - } - } -}; - - -const genNotationContext = function (notation, {softIndexFactor = 1} = {}) { - for (let i = 0; i < notation.notes.length; ++i) - makeNoteSoftIndex(notation.notes, i, {softIndexFactor}); -}; - - -const runNavigation = async function(criterion, sample, onStep) { - const navigator = new Navigator(criterion, sample); - navigator.resetCursor(-1); - - for (let i = 0; i < sample.notes.length; ++i) { - navigator.step(i); - - const next = await (onStep && onStep(i, navigator)); - if (next === Symbol.for("end")) { - console.log("Navigation interrupted."); - - return; - } - } - - //console.log("Navigation accomplished."); - - return navigator; -}; - - - -var Matcher$1 = { - normalizeInterval, - makeNoteSoftIndex, - makeMatchNodes, - genNotationContext, - runNavigation, - Navigator, - Node, -}; - -const MIDI$1 = MIDI$2; - - - -const trackDeltaToAbs = events => { - let tick = 0; - - events.forEach(event => { - tick += event.deltaTime; - event.tick = tick; - }); -}; - - -const trackAbsToDelta = events => { - let lastTick = 0; - - events.sort((e1, e2) => e1.tick - e2.tick).forEach(event => { - event.deltaTime = event.tick - lastTick; - lastTick = event.tick; - }); -}; - - -const sliceTrack = (track, startTick, endTick) => { - trackDeltaToAbs(track); - - const events = []; - const status = {}; - - track.forEach(event => { - if (event.tick >= startTick && event.tick <= endTick && event.subtype !== "endOfTrack") - events.push({ - ...event, - tick: event.tick - startTick, - }); - else if (event.tick < startTick) { - switch (event.type) { - case "meta": - status[event.subtype] = event; - - break; - } - } - }); - - Object.values(status).forEach(event => events.push({ - ...event, - tick: 0, - })); - - events.push({ - tick: endTick - startTick, - type: "meta", - subtype: "endOfTrack", - }); - - trackAbsToDelta(events); - - return events; -}; - - -const sliceMidi = (midi, startTick, endTick) => ({ - header: midi.header, - tracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)), -}); - - -const TICKS_PER_BEATS = 480; - -const EXCLUDE_MIDI_EVENT_SUBTYPES = [ - "endOfTrack", "trackName", - "noteOn", "noteOff", -]; - - -function encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) { - notation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000; - - const ticksPerBeat = TICKS_PER_BEATS; - const msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat; - - const header = { formatType: 0, ticksPerBeat }; - const track = []; - - if (!Number.isFinite(startTime)) { - if (!notation.notes || !notation.notes[0]) - throw new Error("encodeToMidiData: no start time specificed"); - - startTime = notation.notes[0].start; - } - - track.push({ time: startTime, type: "meta", subtype: "copyrightNotice", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` }); - - const containsTempo = notation.events && notation.events.find(event => event.subtype == "setTempo"); - if (!containsTempo) { - track.push({ time: startTime, type: "meta", subtype: "timeSignature", numerator: 4, denominator: 4, thirtyseconds: 8 }); - track.push({ time: startTime, type: "meta", subtype: "setTempo", microsecondsPerBeat: notation.microsecondsPerBeat }); - } - - //if (notation.correspondences) - // track.push({ time: startTime, type: "meta", subtype: "text", text: "find-corres:" + notation.correspondences.join(",") }); - - let endTime = startTime || 0; - - if (notation.notes) { - for (const note of notation.notes) { - track.push({ - time: note.start, - type: "channel", - subtype: "noteOn", - channel: note.channel || 0, - noteNumber: note.pitch, - velocity: note.velocity, - finger: note.finger, - }); - - endTime = Math.max(endTime, note.start); - - if (Number.isFinite(unclosedNoteDuration)) - note.duration = note.duration || unclosedNoteDuration; - if (note.duration) { - track.push({ - time: note.start + note.duration, - type: "channel", - subtype: "noteOff", - channel: note.channel || 0, - noteNumber: note.pitch, - velocity: 0, - }); - - endTime = Math.max(endTime, note.start + note.duration); - } - } - } - - if (notation.events) { - const events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype)); - for (const event of events) { - track.push({ - time: event.time, - ...event.data, - }); - - endTime = Math.max(endTime, event.time); - } - } - - track.push({ time: endTime + 100, type: "meta", subtype: "endOfTrack" }); - - track.sort(function (e1, e2) { return e1.time - e2.time; }); - - // append finger event after every noteOn event - track.map((event, index) => ({event, index})) - .filter(({event}) => event.subtype == "noteOn" && event.finger != null) - .reverse() - .forEach(({event, index}) => track.splice(index + 1, 0, { - time: event.time, - type: "meta", - subtype: "text", - text: `fingering(${event.finger})`, - })); - - track.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks)); - track.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0))); - - return {header, tracks: [track]}; -} - -function encodeToMIDI(notation, options) { - const data = encodeToMIDIData(notation, options); - return MIDI$1.encodeMidiFile(data); -} - - -var MidiUtils$1 = { - sliceMidi, - encodeToMIDIData, - encodeToMIDI, -}; - -const MIDI = MIDI$2; -const MusicNotation = MusicNotation$1; -const MidiPlayer = MidiPlayer_1; -const Matcher = Matcher$1; -const MidiUtils = MidiUtils$1; - - - -var musicWidgets = { - MIDI, - MusicNotation, - MidiPlayer, - Matcher, - MidiUtils, -}; - -const WHOLE_DURATION_MAGNITUDE = 1920; -const TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4; -const EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division']; -const COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS]; -class MetaNotation { - static fromAbsoluteNotes(notes, measureHeads, data) { - const notation = new MetaNotation(data); - notation.measures = Array(measureHeads.length) - .fill(null) - .map((__, i) => { - const tick = measureHeads[i]; - const duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0; - const mnotes = notes - .filter((note) => note.measure === i + 1) - .map((note) => ({ - tick: note.startTick - tick, - duration: note.endTick - note.startTick, - ...pick__default["default"](note, COMMON_NOTE_FIELDS), - subNotes: [], - })); - // reduce note data size - mnotes.forEach((mn) => ['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => { - if (!mn[field]) - delete mn[field]; - })); - return { - tick, - duration, - notes: mnotes, - }; - }); - notation.idTrackMap = notes.reduce((map, note) => { - if (note.id) - map[note.id] = note.track; - return map; - }, {}); - return notation; - } - static performAbsoluteNotes(abNotes, { withRestTied = false } = {}) { - const notes = abNotes - .filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped) - .map((note) => ({ - measure: note.measure, - channel: note.channel, - track: note.track, - start: note.start, - startTick: note.startTick, - endTick: note.endTick, - pitch: note.pitch, - duration: note.duration, - velocity: note.velocity || 127, - id: note.id, - ids: note.ids, - staffTrack: note.staffTrack, - contextIndex: note.contextIndex, - implicitType: note.implicitType, - chordPosition: note.chordPosition, - })); - const noteMap = notes.reduce((map, note) => { - const key = `${note.channel}|${note.start}|${note.pitch}`; - const priorNote = map[key]; - if (priorNote) - priorNote.ids.push(...note.ids); - else - map[key] = note; - return map; - }, {}); - return Object.values(noteMap); - } - constructor(data) { - this.ripe = false; - if (data) - Object.assign(this, data); - } - /*get ordinaryMeasureIndices (): number[] { - if (this.measureLayout) - return this.measureLayout.serialize(LayoutType.Ordinary); - - return Array(this.measures.length).fill(null).map((_, i) => i + 1); - }*/ - // In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias, - // So store the bias values to correct MIDI time from lilyond. - get trackTickBias() { - const headMeasure = this.measures[0]; - return this.trackNames.reduce((map, name, track) => { - map[name] = 0; - if (headMeasure) { - const note = headMeasure.notes.find((note) => note.track === track); - if (note) - map[name] = Math.min(note.tick, 0); - } - return map; - }, {}); - } - get idSet() { - return this.measures.reduce((set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set), new Set()); - } - toJSON() { - return { - __prototype: 'LilyNotation', - //pitchContextGroup: this.pitchContextGroup, - //measureLayout: this.measureLayout, - measures: this.measures, - idTrackMap: this.idTrackMap, - trackNames: this.trackNames, - ripe: this.ripe, - }; - } - toAbsoluteNotes(measureIndices /*= this.ordinaryMeasureIndices*/) { - let measureTick = 0; - const measureNotes = measureIndices.map((index) => { - const measure = this.measures[index - 1]; - console.assert(!!measure, 'invalid measure index:', index, this.measures.length); - const notes = measure.notes.map((mnote) => { - return { - startTick: measureTick + mnote.tick, - endTick: measureTick + mnote.tick + mnote.duration, - start: measureTick + mnote.tick, - duration: mnote.duration, - measure: index, - ...pick__default["default"](mnote, COMMON_NOTE_FIELDS), - }; - }); - measureTick += measure.duration; - return notes; - }); - return [].concat(...measureNotes); - } - /*getMeasureIndices (type: LayoutType) { - return this.measureLayout.serialize(type); - }*/ - toPerformingNotation(measureIndices /*= this.ordinaryMeasureIndices*/, options = {}) { - //console.debug("toPerformingNotation:", this, measureIndices); - const abNotes = this.toAbsoluteNotes(measureIndices); - const notes = MetaNotation.performAbsoluteNotes(abNotes, options); - //const lastNote = notes[notes.length - 1]; - const endTime = Math.max(...notes.map((note) => note.start + note.duration)); - const endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0); - const notation = new musicWidgets.MusicNotation.Notation({ - ticksPerBeat: TICKS_PER_BEAT, - meta: {}, - tempos: [], - channels: [notes], - endTime, - endTick, - }); - return notation; - } - toPerformingMIDI(measureIndices, { trackList } = {}) { - if (!measureIndices.length) - return null; - // to avoid begin minus tick - const zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || [])); - let measureTick = zeroTick; - const measureEvents = measureIndices.map((index) => { - const measure = this.measures[index - 1]; - console.assert(!!measure, 'invalid measure index:', index, this.measures.length); - const events = measure.events.map((mevent) => ({ - ticks: measureTick + mevent.ticks, - track: mevent.track, - data: { - ...mevent.data, - measure: index, - }, - })); - measureTick += measure.duration; - return events; - }); - const eventPriority = (event) => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0); - const tracks = [].concat(...measureEvents).reduce((tracks, mevent) => { - tracks[mevent.track] = tracks[mevent.track] || []; - tracks[mevent.track].push({ - ticks: mevent.ticks, - ...mevent.data, - }); - return tracks; - }, []); - tracks[0] = tracks[0] || []; - /*tracks[0].push({ - ticks: 0, - type: "meta", - subtype: "text", - text: `${npmPackage.name} ${npmPackage.version}`, - });*/ - // append note events - measureTick = zeroTick; - measureIndices.map((index) => { - const measure = this.measures[index - 1]; - console.assert(!!measure, 'invalid measure index:', index, this.measures.length); - if (!Number.isFinite(measure.duration)) - return; - measure.notes.forEach((note) => { - if (trackList && !trackList[note.track]) - return; - if (note.rest) - return; - const tick = measureTick + note.tick; - const track = (tracks[note.track] = tracks[note.track] || []); - note.subNotes.forEach((subnote) => { - track.push({ - ticks: tick + subnote.startTick, - measure: index, - ids: note.ids, - type: 'channel', - subtype: 'noteOn', - channel: note.channel, - noteNumber: subnote.pitch, - velocity: subnote.velocity, - staffTrack: note.staffTrack, - staff: note.staff, - }); - track.push({ - ticks: tick + subnote.endTick, - measure: index, - ids: note.ids, - type: 'channel', - subtype: 'noteOff', - channel: note.channel, - noteNumber: subnote.pitch, - velocity: 0, - staffTrack: note.staffTrack, - staff: note.staff, - }); - }); - }); - measureTick += measure.duration; - }); - const finalTick = measureTick; - // ensure no empty track - for (let t = 0; t < tracks.length; ++t) - tracks[t] = tracks[t] || []; - // sort & make deltaTime - tracks.forEach((events) => { - events.sort((e1, e2) => eventPriority(e1) - eventPriority(e2)); - let ticks = 0; - events.forEach((event) => { - event.deltaTime = event.ticks - ticks; - if (!Number.isFinite(event.deltaTime)) - event.deltaTime = 0; - else - ticks = event.ticks; - }); - events.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' }); - }); - return { - header: { - formatType: 0, - ticksPerBeat: TICKS_PER_BEAT, - }, - tracks, - zeroTick, - }; - } - toPerformingNotationWithEvents(measureIndices, options = {}) { - if (!measureIndices.length) - return null; - const { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options); - const notation = musicWidgets.MusicNotation.Notation.parseMidi(midi); - assignNotationNoteDataFromEvents(notation); - let tick = zeroTick; - notation.measures = measureIndices.map((index) => { - const startTick = tick; - tick += this.measures[index - 1].duration; - return { - index, - startTick, - endTick: tick, - }; - }); - return notation; - } - // find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat - setTempo(bpm) { - let found = false; - for (const measure of this.measures) { - for (const event of measure.events) { - if (event.data.subtype === 'setTempo') { - event.data.microsecondsPerBeat = 60e6 / bpm; - found = true; - } - } - } - return found; - } -} -const assignNotationNoteDataFromEvents = (midiNotation, fields = ['ids', 'measure', 'staffTrack']) => { - const noteId = (channel, pitch, tick) => `${channel}|${pitch}|${tick}`; - const noteMap = midiNotation.notes.reduce((map, note) => { - map[noteId(note.channel, note.pitch, note.startTick)] = note; - return map; - }, {}); - midiNotation.events.forEach((event) => { - if (event.data.subtype === 'noteOn') { - const id = noteId(event.data.channel, event.data.noteNumber, event.ticks); - const note = noteMap[id]; - console.assert(!!note, 'cannot find note of', id); - if (note) - Object.assign(note, pick__default["default"](event.data, fields)); - } - }); -}; - -var sha256 = {exports: {}}; - -var core = {exports: {}}; - -(function (module, exports) { -(function (root, factory) { - { - // CommonJS - module.exports = factory(); - } -}(this, function () { - - /*globals window, global, require*/ - - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined$1) { - - var crypto; - - // Native crypto from window (Browser) - if (typeof window !== 'undefined' && window.crypto) { - crypto = window.crypto; - } - - // Native crypto in web worker (Browser) - if (typeof self !== 'undefined' && self.crypto) { - crypto = self.crypto; - } - - // Native crypto from worker - if (typeof globalThis !== 'undefined' && globalThis.crypto) { - crypto = globalThis.crypto; - } - - // Native (experimental IE 11) crypto from window (Browser) - if (!crypto && typeof window !== 'undefined' && window.msCrypto) { - crypto = window.msCrypto; - } - - // Native crypto from global (NodeJS) - if (!crypto && typeof global !== 'undefined' && global.crypto) { - crypto = global.crypto; - } - - // Native crypto import via require (NodeJS) - if (!crypto && typeof commonjsRequire === 'function') { - try { - crypto = require('crypto'); - } catch (err) {} - } - - /* - * Cryptographically secure pseudorandom number generator - * - * As Math.random() is cryptographically not safe to use - */ - var cryptoSecureRandomInt = function () { - if (crypto) { - // Use getRandomValues method (Browser) - if (typeof crypto.getRandomValues === 'function') { - try { - return crypto.getRandomValues(new Uint32Array(1))[0]; - } catch (err) {} - } - - // Use randomBytes method (NodeJS) - if (typeof crypto.randomBytes === 'function') { - try { - return crypto.randomBytes(4).readInt32LE(); - } catch (err) {} - } - } - - throw new Error('Native crypto module could not be used to get secure random number.'); - }; - - /* - * Local polyfill of Object.create - - */ - var create = Object.create || (function () { - function F() {} - - return function (obj) { - var subtype; - - F.prototype = obj; - - subtype = new F(); - - F.prototype = null; - - return subtype; - }; - }()); - - /** - * CryptoJS namespace. - */ - var C = {}; - - /** - * Library namespace. - */ - var C_lib = C.lib = {}; - - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - - - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - var subtype = create(this); - - // Augment - if (overrides) { - subtype.mixIn(overrides); - } - - // Create default initializer - if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } - - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; - - // Reference supertype - subtype.$super = this; - - return subtype; - }, - - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); - - return instance; - }, - - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, - - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } - - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, - - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); - - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; - - if (sigBytes != undefined$1) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, - - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, - - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; - - // Clamp excess bits - this.clamp(); - - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var j = 0; j < thatSigBytes; j += 4) { - thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; - } - } - this.sigBytes += thatSigBytes; - - // Chainable - return this; - }, - - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; - - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, - - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); - - return clone; - }, - - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; - - for (var i = 0; i < nBytes; i += 4) { - words.push(cryptoSecureRandomInt()); - } - - return new WordArray.init(words, nBytes); - } - }); - - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; - - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } - - return hexChars.join(''); - }, - - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; - - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } - - return new WordArray.init(words, hexStrLength / 2); - } - }; - - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } - - return latin1Chars.join(''); - }, - - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; - - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } - - return new WordArray.init(words, latin1StrLength); - } - }; - - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, - - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; - - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, - - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } +var SemanticType; +(function (SemanticType) { + // clefs + SemanticType["ClefG"] = "ClefG"; + SemanticType["ClefF"] = "ClefF"; + SemanticType["ClefC"] = "ClefC"; + // noteheads + SemanticType["NoteheadS0"] = "NoteheadS0"; + SemanticType["NoteheadS1"] = "NoteheadS1"; + SemanticType["NoteheadS2"] = "NoteheadS2"; + SemanticType["NoteheadS1stemU"] = "NoteheadS1stemU"; + SemanticType["NoteheadS1stemD"] = "NoteheadS1stemD"; + SemanticType["NoteheadS2stemU"] = "NoteheadS2stemU"; + SemanticType["NoteheadS2stemD"] = "NoteheadS2stemD"; + SemanticType["vline_Stem"] = "vline_Stem"; + // flags + SemanticType["Flag3"] = "Flag3"; + // beams + SemanticType["BeamLeft"] = "BeamLeft"; + SemanticType["BeamContinue"] = "BeamContinue"; + SemanticType["BeamRight"] = "BeamRight"; + // tremolos + SemanticType["TremoloLeft"] = "TremoloLeft"; + SemanticType["TremoloRight"] = "TremoloRight"; + SemanticType["TremoloMiddle"] = "TremoloMiddle"; + // dots (duration) + SemanticType["Dot"] = "Dot"; + // rests + SemanticType["Rest0"] = "Rest0"; + SemanticType["Rest1"] = "Rest1"; + SemanticType["Rest2"] = "Rest2"; + SemanticType["Rest3"] = "Rest3"; + SemanticType["Rest4"] = "Rest4"; + SemanticType["Rest5"] = "Rest5"; + SemanticType["Rest6"] = "Rest6"; + SemanticType["Rest0W"] = "Rest0W"; + SemanticType["RestM1"] = "RestM1"; + // accidentals + SemanticType["AccNatural"] = "AccNatural"; + SemanticType["AccSharp"] = "AccSharp"; + SemanticType["AccDoublesharp"] = "AccDoublesharp"; + SemanticType["AccFlat"] = "AccFlat"; + SemanticType["AccFlatflat"] = "AccFlatflat"; + // volta + SemanticType["vline_VoltaLeft"] = "vline_VoltaLeft"; + SemanticType["vline_VoltaRight"] = "vline_VoltaRight"; + SemanticType["VoltaLeft"] = "VoltaLeft"; + SemanticType["VoltaRight"] = "VoltaRight"; + SemanticType["VoltaAlternativeBegin"] = "VoltaAlternativeBegin"; + //VoltaAlternativeEnd = "VoltaAlternativeEnd", + // vertical bars + SemanticType["BarMeasure"] = "BarMeasure"; + SemanticType["vline_BarMeasure"] = "vline_BarMeasure"; + SemanticType["vline_BarTerminal"] = "vline_BarTerminal"; + SemanticType["vline_BarSegment"] = "vline_BarSegment"; + // slur & tie + SemanticType["SlurBegin"] = "SlurBegin"; + SemanticType["SlurEnd"] = "SlurEnd"; + // time signature + SemanticType["TimesigC44"] = "TimesigC44"; + SemanticType["TimesigC22"] = "TimesigC22"; + SemanticType["TimesigZero"] = "TimesigZero"; + SemanticType["TimesigOne"] = "TimesigOne"; + SemanticType["TimesigTwo"] = "TimesigTwo"; + SemanticType["TimesigThree"] = "TimesigThree"; + SemanticType["TimesigFour"] = "TimesigFour"; + SemanticType["TimesigFive"] = "TimesigFive"; + SemanticType["TimesigSix"] = "TimesigSix"; + SemanticType["TimesigSeven"] = "TimesigSeven"; + SemanticType["TimesigEight"] = "TimesigEight"; + SemanticType["TimesigNine"] = "TimesigNine"; + // octave shifts + SemanticType["OctaveShift8va"] = "OctaveShift8va"; + SemanticType["OctaveShift8vb"] = "OctaveShift8vb"; + SemanticType["OctaveShift8"] = "OctaveShift8"; + SemanticType["OctaveShift0"] = "OctaveShift0"; + // numbers + SemanticType["Zero"] = "Zero"; + SemanticType["One"] = "One"; + SemanticType["Two"] = "Two"; + SemanticType["Three"] = "Three"; + SemanticType["Four"] = "Four"; + SemanticType["Five"] = "Five"; + SemanticType["Six"] = "Six"; + SemanticType["Seven"] = "Seven"; + SemanticType["Eight"] = "Eight"; + SemanticType["Nine"] = "Nine"; + // dynamics + SemanticType["f"] = "f"; + SemanticType["p"] = "p"; + SemanticType["m"] = "m"; + SemanticType["n"] = "n"; + SemanticType["r"] = "r"; + SemanticType["s"] = "s"; + SemanticType["z"] = "z"; + SemanticType["CrescendoBegin"] = "CrescendoBegin"; + SemanticType["CrescendoEnd"] = "CrescendoEnd"; + SemanticType["DecrescendoBegin"] = "DecrescendoBegin"; + SemanticType["DecrescendoEnd"] = "DecrescendoEnd"; + // scripts + SemanticType["ScriptFermata"] = "ScriptFermata"; + SemanticType["ScriptShortFermata"] = "ScriptShortFermata"; + SemanticType["ScriptSforzato"] = "ScriptSforzato"; + SemanticType["ScriptStaccato"] = "ScriptStaccato"; + SemanticType["ScriptStaccatissimo"] = "ScriptStaccatissimo"; + SemanticType["ScriptTurn"] = "ScriptTurn"; + SemanticType["ScriptTrill"] = "ScriptTrill"; + SemanticType["ScriptSegno"] = "ScriptSegno"; + SemanticType["ScriptCoda"] = "ScriptCoda"; + SemanticType["ScriptArpeggio"] = "ScriptArpeggio"; + SemanticType["ScriptPrall"] = "ScriptPrall"; + SemanticType["ScriptMordent"] = "ScriptMordent"; + SemanticType["ScriptMarcato"] = "ScriptMarcato"; + SemanticType["ScriptTenuto"] = "ScriptTenuto"; + SemanticType["ScriptPortato"] = "ScriptPortato"; + // pedal + SemanticType["PedalStar"] = "PedalStar"; + SemanticType["PedalPed"] = "PedalPed"; + // additional annotation + SemanticType["KeyAcc"] = "KeyAcc"; + SemanticType["TempoNotehead"] = "TempoNotehead"; + SemanticType["GraceNotehead"] = "GraceNotehead"; + SemanticType["SignLined"] = "SignLined"; + SemanticType["SignInterval"] = "SignInterval"; + SemanticType["rect_Text"] = "rect_Text"; + SemanticType["rect_Lyric"] = "rect_Lyric"; +})(SemanticType || (SemanticType = {})); +const glyphSemanticMapping = { + 'rests.1': 'Rest1', + 'rests.0o': 'Rest0', + 'rests.1o': 'Rest1', + 'rests.M1': 'RestM1', + 'rests.2': 'Rest2', + 'rests.3': 'Rest3', + 'rests.4': 'Rest4', + 'rests.5': 'Rest5', + 'rests.6': 'Rest6', + 'accidentals.sharp': 'AccSharp', + 'accidentals.doublesharp': 'AccDoublesharp', + 'accidentals.natural': 'AccNatural', + 'accidentals.flat': 'AccFlat', + 'accidentals.flatflat': 'AccFlatflat', + 'dots.dot': 'Dot', + 'scripts.ufermata': 'ScriptFermata', + 'scripts.dfermata': 'ScriptFermata', + 'scripts.ushortfermata': 'ScriptShortFermata', + 'scripts.dshortfermata': 'ScriptShortFermata', + 'scripts.staccato': 'ScriptStaccato', + 'scripts.ustaccatissimo': 'ScriptStaccatissimo', + 'scripts.dstaccatissimo': 'ScriptStaccatissimo', + 'scripts.turn': 'ScriptTurn', + 'scripts.trill': 'ScriptTrill', + 'scripts.segno': 'ScriptSegno', + 'scripts.coda': 'ScriptCoda', + 'scripts.arpeggio': 'ScriptArpeggio', + 'scripts.prall': 'ScriptPrall', + 'scripts.mordent': 'ScriptMordent', + 'scripts.umarcato': 'ScriptMarcato', + 'scripts.dmarcato': 'ScriptMarcato', + 'scripts.uportato': 'ScriptPortato', + 'scripts.dportato': 'ScriptPortato', + 'scripts.tenuto': 'ScriptTenuto', + 'scripts.sforzato': 'ScriptSforzato', + 'clefs.C': 'ClefC', + 'clefs.F': 'ClefF', + 'clefs.G': 'ClefG', + 'clefs.F_change': 'ClefF', + 'clefs.G_change': 'ClefG', + 'timesig.C44': 'TimesigC44', + 'timesig.C22': 'TimesigC22', + 'pedal.*': 'PedalStar', + 'pedal.Ped': 'PedalPed', + 'noteheads.s0': 'NoteheadS0', + 'noteheads.s1': 'NoteheadS1', + 'noteheads.s2': 'NoteheadS2', + f: 'f', + m: 'm', + p: 'p', + r: 'r', + s: 's', + z: 'z', +}; +const semanticPriorities = { + ClefG: 0, + ClefF: 0, + TimesigFour: 0, + TimesigThree: 0, + TimesigTwo: 0, + NoteheadS0: 0, + NoteheadS1: 0, + NoteheadS2: 0, + Dot: 0, + vline_BarMeasure: 0, + vline_Stem: 0, + Flag3: 0, + TimesigC44: 1, + TimesigC22: 1, + TimesigEight: 1, + TimesigSix: 1, + AccNatural: 1, + AccSharp: 1, + AccFlat: 1, + KeyAcc: 1, + Rest0: 1, + Rest1: 1, + Rest2: 1, + Rest3: 1, + Rest4: 1, + OctaveShift8: 1, + OctaveShift0: 1, + AccDoublesharp: 2, + AccFlatflat: 2, + TimesigOne: 2, + TimesigNine: 2, + Rest5: 2, + Rest6: 2, + SlurBegin: 2, + SlurEnd: 2, + VoltaLeft: 2, + VoltaRight: 2, + //VoltaAlternativeBegin: 2, + vline_BarTerminal: 2, + vline_BarSegment: 2, + TempoNotehead: 2, + GraceNotehead: 2, + SignLined: 2, + SignInterval: 2, + BeamLeft: 2, + BeamRight: 2, + BeamContinue: 2, + TremoloLeft: 2, + TremoloRight: 2, + TremoloMiddle: 2, + StemTip: 2, + StemHead: 2, + //Rest0W: 3, + f: 3, + p: 3, + m: 3, + ScriptFermata: 3, + ScriptSforzato: 3, + ScriptStaccato: 3, + ScriptStaccatissimo: 3, + ScriptTurn: 3, + ScriptTrill: 3, + ScriptSegno: 3, + ScriptCoda: 3, + ScriptArpeggio: 3, + ScriptPrall: 3, + ScriptMordent: 3, + ScriptTenuto: 3, + PedalStar: 3, + PedalPed: 3, + TimesigFive: 3, + TimesigSeven: 3, + TimesigZero: 3, + One: 3, + Two: 3, + Three: 3, + Four: 3, + Five: 3, + rect_Text: 3, + rect_Lyric: 3, + CrescendoBegin: 3, + CrescendoEnd: 3, + DecrescendoBegin: 3, + DecrescendoEnd: 3, + RestM1: 4, + ClefC: 4, + ScriptShortFermata: 4, + ScriptMarcato: 4, + ScriptPortato: 4, + s: 4, + r: 4, + z: 4, + Zero: 4, + Six: 4, + Seven: 4, + Eight: 4, + Nine: 4, +}; +const NOTEHEAD_WIDTHS = { + NoteheadS0: 0.913 * 2, + NoteheadS1: 0.632 * 2, + NoteheadS2: 0.599 * 2, +}; +const glyphCenters = { + //"clefs.C": { x: 1.3 }, + 'clefs.F': { x: 1.06 }, + 'clefs.G': { x: 1.3 }, + 'clefs.F_change': { x: 0.87 }, + 'clefs.G_change': { x: 1.07 }, + 'timesig.C44': { x: 0.9 }, + 'timesig.C22': { x: 0.9 }, + zero: { x: 0.7, y: -1 }, + one: { x: 0.7, y: -1 }, + two: { x: 0.7, y: -1 }, + three: { x: 0.7, y: -1 }, + four: { x: 0.7, y: -1 }, + five: { x: 0.7, y: -1 }, + six: { x: 0.7, y: -1 }, + seven: { x: 0.7, y: -1 }, + eight: { x: 0.7, y: -1 }, + nine: { x: 0.7, y: -1 }, + 'accidentals.sharp': { x: 0.55 }, + 'accidentals.doublesharp': { x: 0.5 }, + 'accidentals.natural': { x: 0.3 }, + 'accidentals.flat': { x: 0.3 }, + 'accidentals.flatflat': { x: 0.5 }, + 'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 }, + 'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 }, + 'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 }, + 'rests.0': { x: 0.75, y: 1 }, + 'rests.1': { x: 0.75 }, + 'rests.0o': { x: 0.75, y: 1 }, + 'rests.1o': { x: 0.75 }, + 'rests.M1': { x: 0.75, y: 1 }, + 'rests.2': { x: 0.5 }, + 'rests.3': { x: 0.5 }, + 'rests.4': { x: 0.5 }, + 'rests.5': { x: 0.5 }, + 'rests.6': { x: 0.5 }, + f: { x: 0.6, y: -0.5 }, + m: { x: 0.9, y: -0.5 }, + p: { x: 0.5, y: -0.5 }, + r: { x: 0.5, y: -0.5 }, + s: { x: 0.5, y: -0.5 }, + z: { x: 0.5, y: -0.5 }, + 'scripts.trill': { y: -0.5 }, + 'scripts.segno': { x: 0, y: 0 }, + 'scripts.coda': { x: 0, y: 0 }, + 'scripts.arpeggio': { x: 0.5, y: -0.5 }, + 'pedal.*': { x: 0.78, y: -0.78 }, + 'pedal.Ped': { x: 1.6, y: -0.7 }, +}; +const ONE_D_SEMANTICS = [ + 'OctaveShift8va', + 'OctaveShift8vb', + 'OctaveShift8', + 'OctaveShift0', + 'vline_VoltaLeft', + 'vline_VoltaRight', + 'VoltaAlternativeBegin', + 'vline_BarMeasure', + 'vline_BarTerminal', + 'vline_BarSegment', +]; +const SYSTEM_SEMANTIC_TYPES = [ + SemanticType.BarMeasure, + SemanticType.vline_BarMeasure, + SemanticType.vline_BarTerminal, + SemanticType.vline_BarSegment, + SemanticType.vline_VoltaLeft, + SemanticType.vline_VoltaRight, + SemanticType.VoltaAlternativeBegin, +]; +const st = SemanticType; +const CONFLICTION_GROUPS = [ + [st.NoteheadS0, st.NoteheadS1, st.NoteheadS2], + [st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo], + [ + st.TimesigZero, + st.TimesigOne, + st.TimesigTwo, + st.TimesigThree, + st.TimesigFour, + st.TimesigFive, + st.TimesigSix, + st.TimesigSeven, + st.TimesigEight, + st.TimesigNine, + ], + [st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1], + [st.SignInterval, st.SignLined], + [st.BeamLeft, st.BeamContinue, st.BeamRight], +]; +const STAMP_SEMANTICS = [ + st.ClefG, + st.ClefF, + st.ClefC, + st.NoteheadS0, + st.NoteheadS1, + st.NoteheadS2, + st.Dot, + st.Rest0, + st.Rest1, + st.Rest2, + st.Rest3, + st.Rest4, + st.Rest5, + st.Rest6, + st.RestM1, + st.AccNatural, + st.AccSharp, + st.AccDoublesharp, + st.AccFlat, + st.AccFlatflat, + st.TimesigC44, + st.TimesigC22, + st.TimesigZero, + st.TimesigOne, + st.TimesigTwo, + st.TimesigThree, + st.TimesigFour, + st.TimesigFive, + st.TimesigSix, + st.TimesigSeven, + st.TimesigEight, + st.TimesigNine, + st.One, + st.Two, + st.Three, + st.Four, + st.Five, + st.OctaveShift8, + //st.OctaveShift15, + st.OctaveShift0, + st.f, + st.p, + st.m, + st.n, + st.r, + st.s, + st.z, + st.ScriptFermata, + st.ScriptShortFermata, + st.ScriptSforzato, + st.ScriptStaccato, + st.ScriptStaccatissimo, + st.ScriptTurn, + st.ScriptTrill, + st.ScriptSegno, + st.ScriptCoda, + st.ScriptArpeggio, + st.ScriptPrall, + st.ScriptMordent, + st.ScriptMarcato, + st.ScriptTenuto, + st.ScriptPortato, + st.PedalStar, + st.PedalPed, +]; +// [cx, cy, width, height] +const STAMP_RECTS = { + ClefG: [-0.0625, -1.125, 3.6, 8.6], + ClefF: [0.25, 0.5625, 3.6, 3.8], + ClefC: [0.25, 0, 3.25, 4.5], + NoteheadS0: [0.0625, 0, 2.55, 1.4], + NoteheadS1: [0.0625, 0, 1.8, 1.4], + NoteheadS2: [0.0625, -0.0625, 1.65, 1.35], + Dot: [0.25, 0, 0.6, 0.6], + Rest0: [0, -0.75, 3.25, 0.9], + Rest1: [0, -0.25, 3.25, 0.9], + Rest2: [-0.0625, -0.1875, 1.6, 3.375], + Rest3: [0, 0.0625, 1.2, 2.25], + Rest4: [0.0625, 0.5625, 1.65, 3.375], + Rest5: [0.0625, 0.0625, 1.95, 4.375], + Rest6: [0.0625, 0.5625, 1.95, 5.375], + RestM1: [-0.4375, -1.5, 0.75, 1.2], + AccNatural: [0, 0, 0.9, 3.5], + AccSharp: [0, 0, 1.5, 3.5], + AccDoublesharp: [0, 0, 1.5, 1.5], + AccFlat: [0, -0.5625, 1.2, 3.125], + AccFlatflat: [0.1875, -0.5625, 1.95, 3.125], + TimesigC44: [-0.0625, 0, 2.25, 2.3], + TimesigC22: [-0.0625, 0, 2.25, 3.2], + TimesigZero: [0, 0, 1.8, 2.2], + TimesigOne: [-0.125, 0, 1.5, 2.2], + TimesigTwo: [0, 0, 2.2, 2.2], + TimesigThree: [-0.0625, 0, 1.9, 2.4], + TimesigFour: [0.0625, 0, 1.95, 2.2], + TimesigFive: [0, 0, 1.8, 2.3], + TimesigSix: [0, 0, 2.0, 2.4], + TimesigSeven: [0, 0, 1.8, 2.2], + TimesigEight: [0, 0, 1.9, 2.2], + TimesigNine: [0, 0, 1.9, 2.2], + One: [-0.0625, 0, 0.75, 1.6], + Two: [0, 0, 1.2, 1.6], + Three: [0, 0, 1.2, 1.6], + Four: [0, 0, 1.2, 1.6], + Five: [0, 0, 1.2, 1.6], + OctaveShift8: [2.125, -0.1875, 4.75, 3.6], + OctaveShift0: [-0.4, 0, 1.8, 4.2], + f: [0.0625, -0.125, 2.55, 3], + p: [-0.0625, 0.25, 2.55, 2.1], + m: [-0.125, -0.0625, 2.4, 1.35], + n: [-0.3125, -0.0625, 1.95, 1.35], + r: [0, -0.125, 1.5, 1.5], + s: [0, -0.0625, 1.2, 1.35], + z: [0.0625, 0, 1.35, 1.5], + ScriptFermata: [0, 0, 3.25, 3.9], + ScriptShortFermata: [0, 0, 2.4, 4.95], + ScriptSforzato: [-0.0625, 0, 2.5, 1.2], + ScriptStaccato: [0, -0.0625, 0.6, 0.45], + ScriptStaccatissimo: [0, 0, 1.2, 2.6], + ScriptTurn: [0, 0, 2.7, 1.5], + ScriptTrill: [-0.125, -0.5, 3, 2.7], + ScriptSegno: [0, 0, 2.4, 3.5], + ScriptCoda: [0, 0, 2.7, 3.25], + ScriptArpeggio: [-0.0625, 0, 1.05, 1.8], + ScriptPrall: [0, 0, 2.4, 1.2], + ScriptMordent: [0, 0, 2.4, 1.5], + ScriptMarcato: [0, 0, 1.2, 2.475], + ScriptTenuto: [0, -0.0625, 1.5, 0.15], + ScriptPortato: [0, 0, 1.5, 1.65], + PedalStar: [0, 0, 3.2, 3.2], + PedalPed: [0, -0.25, 4.7, 2.4], +}; +const hashSemanticPoint = (systemIndex, staffIndex, point) => { + const x = Math.round(point.x * 10); + const y = Math.round(point.y * 10); + const source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`; + const hash = sha1__default["default"].array(source).slice(12); // clip to 12 bytes + const id = globalThis.btoa(String.fromCharCode(...hash)).substring(0, 11); + point.id = id; + return id; +}; +const hashPageSemanticPoint = (pageName, point) => { + const x = Math.round(point.x); + const y = Math.round(point.y); + const source = `p-${pageName}|${point.semantic}|${x}|${y}`; + const hash = sha1__default["default"].array(source).slice(12); // clip to 12 bytes + const id = globalThis.btoa(String.fromCharCode(...hash)).substring(0, 11); + point.id = id; + return id; +}; - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, +const POINT_CONFLICTION_DISTANCE = 0.4; +const roundNumber = (x, precision, min = -Infinity) => Math.max(Math.round(x / precision) * precision, min); +const distance2D = (p1, p2) => { + const dx = p1.x - p2.x; + const dy = p1.y - p2.y; + return Math.sqrt(dx * dx + dy * dy); +}; +const trans23 = (point, matrix) => ({ + x: matrix[0] * point.x + matrix[2] * point.y + matrix[4], + y: matrix[1] * point.x + matrix[3] * point.y + matrix[5], +}); +const gcd = (a, b) => { + if (!(Number.isInteger(a) && Number.isInteger(b))) { + console.error('non-integer gcd:', a, b); + return 1; + } + return b === 0 ? a : gcd(b, a % b); +}; +const frac = (numerator, denominator) => ({ numerator, denominator }); +const reducedFraction = (n, d) => { + n = Math.round(n); + d = Math.round(d); + const g = n !== 0 ? gcd(n, d) : d; + return frac(n / g, d / g); +}; +const printFraction = (f) => `${f.numerator}/${f.denominator}`; +const fractionMul = (value, fraction) => (fraction ? (value * fraction.numerator) / fraction.denominator : value); +const segmentPoints = (points, axis) => { + const sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]); + let seg = null; + let lastP = null; + return sorted.reduce((segments, p, i) => { + if (!lastP) { + lastP = p; + seg = [p]; + } + else { + if (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) + seg.push(p); + else { + if (seg.length > 1) + segments.push(seg); + lastP = p; + seg = [p]; + } + } + if (seg.length > 1 && i === sorted.length - 1) + segments.push(seg); + return segments; + }, []); +}; +const filterWeekPoints = (points) => { + //console.log("filterWeekPoints:", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`)); + //console.table(points.map(p => ({ ...p }))); + if (points.length <= 1) + return []; + let rests = points.slice(1); + const group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic)); + if (!group) + return filterWeekPoints(rests); + const weeks = rests.filter((p) => group.includes(p.semantic)); + rests = rests.filter((p) => !group.includes(p.semantic)); + return [...weeks, ...filterWeekPoints(rests)]; +}; +const solveOverlapping = (points) => { + const pset = new Set(points); + const xClusters = segmentPoints(points, 'x'); + const clusters = [].concat(...xClusters.map((c) => segmentPoints(c, 'y'))); + clusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence)); + clusters.forEach((ps) => { + filterWeekPoints(ps).forEach((p) => pset.delete(p)); + }); + return Array.from(pset); +}; +const GROUP_N_TO_PITCH$1 = [0, 2, 4, 5, 7, 9, 11]; +const MIDDLE_C$1 = 60; +const mod7$1 = (x) => { + let y = x % 7; + while (y < 0) + y += 7; + return y; +}; +const noteToPitch = ({ note, alter }) => { + const group = Math.floor(note / 7); + const gn = mod7$1(note); + return MIDDLE_C$1 + group * 12 + GROUP_N_TO_PITCH$1[gn] + alter; +}; +const argmax$1 = (data) => { + const max = Math.max(...data); + return data.indexOf(max); +}; - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - var processedWords; +class DummyLogger { + debug(..._) { } + group(..._) { } + groupCollapsed(..._) { } + groupEnd() { } + info(..._) { } + warn(..._) { } + assert(..._) { } +} - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; +const EOM = -1; // end event id of measure +//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23; +const GREAT_NUMBER = 1920; +const DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13; +const floatToFrac = (x) => { + const n = Math.round(x * GREAT_NUMBER); + return reducedFraction(n, GREAT_NUMBER); +}; +const floatToTimeWarp = (x) => { + if (x === 1) + return null; + return floatToFrac(x); +}; +var ActionType; +(function (ActionType) { + ActionType[ActionType["PLACE"] = 0] = "PLACE"; + ActionType[ActionType["VERTICAL"] = 1] = "VERTICAL"; + ActionType[ActionType["HORIZONTAL"] = 2] = "HORIZONTAL"; +})(ActionType || (ActionType = {})); +class Action { + constructor(data) { + Object.assign(this, data); + } + static P(e) { + return new Action({ + type: ActionType.PLACE, + e1: e, + }); + } + static V(e1, e2, order = 1) { + return new Action({ + type: ActionType.VERTICAL, + e1: order > 0 ? e1 : e2, + e2: order > 0 ? e2 : e1, + }); + } + static H(e1, e2) { + return new Action({ + type: ActionType.HORIZONTAL, + e1, + e2, + }); + } + get id() { + switch (this.type) { + case ActionType.PLACE: + return this.e1.toString(); + case ActionType.VERTICAL: + return `${this.e1}|${this.e2}`; + case ActionType.HORIZONTAL: + return `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`; + } + } + get events() { + return [this.e1, this.e2].filter(Number.isFinite); + } +} +class StageMatrix { + static fromNode(node, status) { + const matrix = Array(node.stages.length) + .fill(null) + .map(() => Array(node.stages.length) + .fill(null) + .map(() => new Set())); + node.actions + .filter((action) => action.type === ActionType.HORIZONTAL) + .forEach((action) => { + const stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1)); + const stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2)); + console.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action); + matrix[stage1][stage2].add(action.e1); + }); + matrix[0][node.stages.length - 1].add(0); // the entire measure edge + const stagedEvents = node.stagedEvents; + const endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i)); + const endHP = Math.max(0, Math.max(...endHs) - 0.01); + const hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL); + const pendingHeads = Object.keys(status.eventMap) + .map(Number) + .filter((eid) => !hActions.find((action) => action.e2 === eid)); + // edges to end stage + node.stages.forEach((stage) => { + stage.events.forEach((eid) => { + if (eid > 0) { + const act = hActions.find((action) => action.e1 === eid); + if (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) { + if (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) + matrix[stage.index][node.stages.length - 1].add(eid); + } + } + }); + }); + return new StageMatrix({ matrix }); + } + constructor(data) { + Object.assign(this, data); + } + pathOf(x, y, target, ei = 0) { + if (this.matrix[x][y].size) { + const eid = [...this.matrix[x][y]][ei]; + if (y === target) + return [eid]; + for (let yy = y + 1; yy <= target; ++yy) { + const sub = this.pathOf(y, yy, target); + if (sub) + return [eid, ...sub]; + } + } + return null; + } + findDoublePath(s1, s2) { + const paths = []; + for (let t = s2; t >= s1 + 1; --t) { + for (let ei = 0; ei < this.matrix[s1][t].size; ++ei) { + const path = this.pathOf(s1, t, s2, ei); + if (path) { + paths.push(path); + if (paths.length === 2) + return [paths[0], paths[1]]; + } + } + } + return null; + } + reducePath(path) { + this.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id)))); + } + toEquations(eventCount) { + const equations = []; + for (let d = 1; d < this.matrix.length; d++) { + for (let s1 = 0; s1 < this.matrix.length - d; s1++) { + const s2 = s1 + d; + while (true) { + // find closed loop from s1 to s2 + const paths = this.findDoublePath(s1, s2); + if (paths) { + const [path1, path2] = paths; + const equation = Array(eventCount).fill(0); + path1.forEach((eid) => (equation[eid] = 1)); + path2.forEach((eid) => (equation[eid] = -1)); + equations.push(equation); + this.reducePath(path1.length > path2.length ? path1 : path2); + } + else + break; + } + } + } + return equations; + } +} +class PathNode { + constructor(data) { + Object.assign(this, data); + console.assert(this.logger, 'logger is null:', data); + } + get actions() { + const last = this.parent ? this.parent.actions : []; + return this.action ? [...last, this.action] : last; + } + get id() { + const actionIds = this.actions.map((action) => action.id).sort(); + return actionIds.join(' '); + } + get stagedEvents() { + const set = new Set(); + if (this.stages) + this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid))); + return set; + } + like(ids) { + const actionIds = ids.split(' ').sort(); + return actionIds.join(' ') === this.id; + } + constructStages(status) { + this.stages = [{ events: [EOM] }]; + for (const action of this.actions) { + switch (action.type) { + case ActionType.PLACE: + this.stages.unshift({ events: [action.e1] }); + break; + case ActionType.VERTICAL: + { + const stage1 = this.stages.find((stage) => stage.events.includes(action.e1)); + const stage2 = this.stages.find((stage) => stage.events.includes(action.e2)); + console.assert(stage1 || stage2, 'invalid V action:', this.stages, action); + if (stage1 && stage2) { + stage1.events.push(...stage2.events); + stage2.events = null; + this.stages = this.stages.filter((stage) => stage.events); + } + else if (!stage1) + stage2.events.unshift(action.e1); + else if (!stage2) + stage1.events.push(action.e2); + } + break; + case ActionType.HORIZONTAL: + { + const stage1 = this.stages.find((stage) => stage.events.includes(action.e1)); + const stage2 = this.stages.find((stage) => stage.events.includes(action.e2)); + console.assert(stage1 || stage2, 'invalid H action:', this.stages, action); + const newStage = (eid) => { + console.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap); + const x = status.eventMap[eid].x; + const stage = this.stages.find((s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)); + if (stage) + stage.events.push(eid); + else { + const newStage = { events: [eid] }; + const si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x); + this.stages.splice(si, 0, newStage); + } + }; + if (!stage1) + newStage(action.e1); + if (!stage2) + newStage(action.e2); + /*if (this.stages.some((s, si) => si < this.stages.length - 2 + && s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x)))) + debugger;*/ + } + break; + } + } + this.stages.forEach((stage, i) => (stage.index = i)); + } + constructConstraints(status) { + const eventCount = Object.keys(status.eventMap).length; + const stageMatrix = StageMatrix.fromNode(this, status); + const equations = stageMatrix.toEquations(eventCount); + const factors = Array(eventCount) + .fill(null) + .map((_, id) => status.eventMap[id].duration); + this.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i])); + } + inbalancesConstraints(status) { + console.assert(this.constraints, 'constraints not constructed.'); + const eventCount = Object.keys(status.eventMap).length; + const ones = Array(eventCount).fill(true); + const fixed = Array(eventCount).fill(false); + const inbalances = []; + for (const constraint of this.constraints) { + const sum = constraint.reduce((sum, it) => sum + it, 0); + if (sum !== 0) { + const c = sum < 0 ? constraint.map((it) => -it) : constraint; + if (c[0] > 0) + continue; // entire measure edge usually is larger than others, no effect + inbalances.push(c); + // set ones for tight items + c.forEach((it, i) => { + fixed[i] = fixed[i] || it < 0; + if (it) + ones[i] = it < 0 || fixed[i]; + }); + } + } + // pick out influenced equations + this.constraints.forEach((constraint) => { + const sum = constraint.reduce((sum, it) => sum + it, 0); + if (sum === 0 && !constraint[0]) { + if (constraint.some((it, i) => it && !ones[i])) { + constraint.forEach((it, i) => it && (ones[i] = false)); + inbalances.push(constraint); + } + } + }); + return { ones, inbalances }; + } + solveEquations({ ones, inbalances }) { + if (!inbalances.length) + return ones.map(() => 1); + const xis = ones + .map((fixed, i) => ({ fixed, i })) + .filter(({ fixed }) => !fixed) + .map(({ i }) => i) + .filter((i) => inbalances.some((items) => items[i] !== 0)); + if (!xis.length) + return ones.map(() => 1); + const factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i])); + const equationMap = new Map(); + let conflicted = false; + const lines = inbalances + .map((items) => { + const line = items.filter((_, i) => xis.includes(i)); + const bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0); + return { line, bias }; + // remove duplicated equations + }) + .filter(({ line, bias }) => { + if (line.every((it) => it === 0)) + return false; + const id = line.join(','); + if (equationMap.has(id)) { + conflicted = equationMap.get(id) !== bias; + return false; + } + equationMap.set(id, bias); + return true; + }); + if (conflicted) + return null; + const squareLines = lines.slice(0, xis.length); + const restLines = lines.slice(xis.length); + if (squareLines.length < xis.length) { + const candidateLines = []; + for (let i1 = 0; i1 < xis.length - 1; ++i1) { + const i2 = i1 + 1; + const line = { + line: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)), + bias: 0, + prior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER, + }; + if (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) + line.prior -= 10; + if (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) + line.prior += 1; + candidateLines.push(line); + } + candidateLines.sort((c1, c2) => c1.prior - c2.prior); + squareLines.push(...candidateLines.slice(0, xis.length - squareLines.length)); + } + //console.assert(squareLines.length, "squareLines is empty.", lines, xis, equationMap, inbalances); + const matrix = squareLines.map(({ line }) => line); + const bias = squareLines.map(({ bias }) => bias); + const invert = matrixInverse(matrix); + if (!invert) { + this.logger.warn('null invert:', matrix); + //debugger; + return null; + } + const solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0)); + //console.log("solution:", matrix, invert, solution); + if (restLines.length) { + if (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) { + //console.debug("rest lines not satisfied:", restLines, solution); + return null; + } + } + const result = ones.map(() => 1); + xis.forEach((xi, i) => (result[xi] = solution[i])); + return result; + } + optimallySolve(status) { + const { ones, inbalances } = this.inbalancesConstraints(status); + //if (this.like("2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11")) + // debugger; + const shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01))); + const shrinkMap = shrinknesses.reduce((map, shrinkness, id) => { + if (shrinkness >= 0) { + map[shrinkness] = map[shrinkness] || []; + map[shrinkness].push(id); + } + return map; + }, {}); + const groups = Object.entries(shrinkMap) + .sort((p1, p2) => Number(p2[0]) - Number(p1[0])) + .map((pair) => pair[1]); + //console.log("groups:", groups, shrinknesses); + for (let released = 1; released < groups.length; ++released) { + const releasedIds = [].concat(...groups.slice(0, released)); + const fixed = ones.map((_, id) => !releasedIds.includes(id)); + const warps = this.solveEquations({ ones: fixed, inbalances }); + if (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) + return warps; + } + return this.solveEquations({ ones, inbalances }); + } + isConflicted(status) { + const { ones, inbalances } = this.inbalancesConstraints(status); + //if (this.like("2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7")) + // debugger; + for (const c of inbalances) { + // sum with low warps + const lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0); + if (lowSum >= 0) { + // mark events' broken tendency + c.forEach((it, i) => { + if (it) + status.eventTendencies[i] += it > 0 ? 1 : -1; + }); + return true; + } + } + if (!inbalances.length) + return false; + const timeWarps = this.solveEquations({ ones, inbalances }); + if (!timeWarps) + return true; + return !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1); + } + getSolution(status) { + const actionKey = (action) => status.eventMap[action.e2] + ? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06 + : status.eventMap[action.e1].x + 1e4; + const hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2)); + const hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {}); + const startEs = new Set([...Object.keys(hmap)].map(Number)); + hacts.forEach((act) => startEs.delete(act.e2)); + this.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid)); + let voices = [...startEs].map((se) => { + const voice = [se]; + let x = se; + while (hmap[x]) { + x = hmap[x]; + if (x < 0 || voice.includes(x)) + break; + voice.push(x); + } + return voice; + }); + const events = Object.values(status.eventMap) + .filter((e) => e.id > 0) + .map((e) => ({ + id: e.id, + tick: null, + endTick: null, + tickGroup: null, + timeWarp: null, + })); + const eventMap = events + .filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id))) + .reduce((map, e) => ({ ...map, [e.id]: e }), {}); + this.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si))); + this.stages[0].tick = 0; + this.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0)); + // solve time warps + const timeWarps = this.optimallySolve(status); + events.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id]))); + //if (this.like("1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10")) + // debugger; + // solve stage ticks + const estages = this.stages.slice(0, this.stages.length - 1); + const solveStages = () => { + if (estages.every((stage) => Number.isFinite(stage.tick))) + return false; + let changed = false; + // forward + hacts.forEach((act) => { + const stage1 = this.stages.find((stage) => stage.events.includes(act.e1)); + const stage2 = this.stages.find((stage) => stage.events.includes(act.e2)); + if (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) { + stage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp); + stage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick)); + changed = true; + } + }); + // backward + [...hacts].reverse().forEach((act) => { + const stage1 = this.stages.find((stage) => stage.events.includes(act.e1)); + const stage2 = this.stages.find((stage) => stage.events.includes(act.e2)); + if (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) { + stage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp); + stage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick)); + changed = true; + } + }); + return changed; + }; + while (solveStages()) + ; + console.assert(estages.every((stage) => Number.isFinite(stage.tick)), 'stage ticks not all solved:', this.stages, this.id); + events + .filter((event) => Number.isFinite(event.tick)) + .forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp))); + // clip out of bound events + const measureDuration = status.eventMap[0].duration; + voices.forEach((voice) => { + const outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration); + if (outEI >= 0) { + const es = voice.splice(outEI, voice.length - outEI); + es.forEach((eid) => { + eventMap[eid].tick = null; + eventMap[eid].endTick = null; + }); + } + }); + voices = voices.filter((voice) => voice.length); + const duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite)); + //console.log("getSolution:", this); + this.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps); + return { + voices, + events, + duration, + actions: this.actions.map((action) => action.id).join(' '), + }; + } + deduce(status, quota) { + if (!this.stages) + this.constructStages(status); + //console.log("deduce:", status); + // increase access counting + const access = status.actionAccessing.get(this.id) || { times: 0 }; + ++access.times; + status.actionAccessing.set(this.id, access); + this.constructConstraints(status); + //console.log("constraints:", this.id, this.stages, this.constraints); + if (this.isConflicted(status)) { + access.closed = true; + this.logger.info(this.action.id, '\u274c'); + return null; + } + //const newStatus = status; + this.logger.group(this.action && this.action.id); + if (quota.credits > 0) { + --quota.credits; + if (!this.children) + this.expand(status); + this.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed); + if (this.children.length) { + const p = (node) => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1); + this.children.sort((n1, n2) => p(n2) - p(n1)); + for (const child of this.children) { + const solution = child.deduce(status, quota); + if (solution) { + this.logger.groupEnd(); + return solution; + } + if (quota.credits <= 0) + break; + } + } + //else + // console.debug("got the leaf:", this, status); + } + else + this.logger.debug('quota exhausted.'); + this.logger.groupEnd(); + access.closed = true; + return this.getSolution(status); + } + expand(status) { + //this.action.events.forEach(eid => status.pendingEvents.delete(eid)); + this.constructStages(status); + const { eventMap, matrixV, matrixH } = status; + const stagedEvents = this.stagedEvents; + const branches = []; + const appendBranch = (branch) => { + if (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) { + const stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1)); + const stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2)); + if (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) + return; + if (stage1 && stage2) { + if (branch.action.type === ActionType.VERTICAL) { + if (stage2.index - stage1.index > 1) + return; + if (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) + return; + } + else if (branch.action.type === ActionType.HORIZONTAL) { + if (stage1.index > stage2.index) + return; + } + } + if (branch.action.type === ActionType.HORIZONTAL && + this.actions.some((a) => a.type === ActionType.HORIZONTAL && + (a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1)))) + return; + // exclude 2 too far away events by vertical + if (branch.action.type === ActionType.VERTICAL) { + if (stage1) { + branch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e])); + if (branch.possibility <= 0) + return; + } + if (stage2) { + branch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1])); + if (branch.possibility <= 0) + return; + } + } + branches.push(branch); + } + }; + for (const eid of stagedEvents) { + if (eid < 0) + continue; + matrixV[eid].forEach((p, id) => { + if (p > 0 && eid !== id) + appendBranch({ action: Action.V(id, eid), possibility: p }); + }); + matrixV.forEach((ps, id) => { + const p = ps[eid]; + if (p > 0) + appendBranch({ action: Action.V(eid, id), possibility: p }); + }); + matrixH[eid].forEach((p, id) => { + if (p > 0) + appendBranch({ action: Action.H(id, eid), possibility: p }); + }); + matrixH.forEach((ps, id) => { + id = id >= Object.keys(eventMap).length ? -1 : id; + const p = ps[eid]; + if (p > 0) + appendBranch({ action: Action.H(eid, id), possibility: p }); + }); + } + // If branches not contains extending actions, clear it. + // Because pure inner vertical action may be harmful + if (!branches.some((branch) => [ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) || + !stagedEvents.has(branch.action.e1) || + !stagedEvents.has(branch.action.e2))) { + this.children = []; + return; + } + //console.table(branches.map(b => [b.action.id, b.possibility])); + //console.log("branches:", branches.map(b => b.action.id).join(", "), "\n", this.actions.map(a => a.id).join(", ")); + this.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch })); + } +} +class Solver { + constructor(env, { quota = 1000, logger = new DummyLogger() } = {}) { + this.quota = quota; + this.logger = logger; + const event0 = { + id: 0, + x: 0, + confidence: 1, + shrinkness: env.measureShrinkness, + duration: env.expectedDuration, + lowWarp: 0, + }; + this.events = [ + event0, + ...env.events.map((e) => ({ + id: e.id, + x: e.x, + confidence: e.confidence, + shrinkness: e.shrinkness, + staff: e.staff, + duration: e.duration, + lowWarp: 0.5, + })), + ]; + this.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {}); + this.matrixH = env.matrixH; + this.matrixV = env.matrixV; + this.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x)); + this.actionAccessing = new Map(); + } + solve() { + // construct path root + this.pathRoot = new PathNode({ + logger: this.logger, + action: null, + }); + this.pathRoot.children = this.events.slice(1).map((event) => new PathNode({ + logger: this.logger, + parent: this.pathRoot, + action: Action.P(event.id), + possibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0), + })); + let bestSolution = null; + this.logger.groupCollapsed('solve'); + const eventTendencies = Array(this.events.length).fill(0); + const quota = { credits: this.quota, times: 0 }; + while (quota.credits > 0) { + ++quota.times; + const status = { + eventMap: this.eventMap, + matrixH: this.matrixH, + matrixV: this.matrixV, + actionAccessing: this.actionAccessing, + eventTendencies, + }; + const solution = this.pathRoot.deduce(status, quota); + solution.credits = this.quota - quota.credits; + solution.times = quota.times; + this.evaluateSolution(solution); + this.logger.debug('loss:', solution.loss); + bestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution; + if (!bestSolution.loss) + break; + // check if searching tree traversed + if (this.actionAccessing.get('').closed) + break; + } + this.logger.groupEnd(); + this.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution); + this.logger.debug('cost:', this.quota - quota.credits); + this.logger.debug('eventTendencies:', eventTendencies.map((t) => t / quota.times)); + return bestSolution; + } + evaluateSolution(solution) { + solution.loss = 0; + const eventMap = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {}); + /*// minus tick + const minuses = solution.events.filter((e) => e.tick < 0).length; + solution.loss += minuses * 1000;*/ + // minus tick rates penalty + const events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]); + const sevents = events.reduce((map, event) => { + map[event.staff] = map[event.staff] || []; + map[event.staff].push(event); + return map; + }, {}); + Object.values(sevents).forEach((es) => { + const ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1); + ses.forEach((e1, i) => { + const e2 = es[i + 1]; + if (e2.tick < e1.tick) + solution.loss += 1000; + }); + }); + const times = new Map(); + solution.events.forEach((event) => { + if (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id))) + solution.loss += 100 * eventMap[event.id].confidence; + if (event.timeWarp) { + const { numerator, denominator } = event.timeWarp; + const shrinkness = eventMap[event.id].shrinkness; + times.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness)); + times.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness)); + } + }); + // partial measure penalty + const partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration); + times.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness)); + times.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness)); + for (const [n, weight] of times.entries()) { + if (n > 1) + solution.loss += Math.log(n) * weight; + } + let spaceTime = 0; + let staffAlters = 0; + solution.voices.forEach((voice) => { + console.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap)); + const start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start + const end = eventMap[voice[voice.length - 1]].endTick; + spaceTime += Math.max(0, start + solution.duration - end); + // staff alternation penalty + let staff = null; + voice.forEach((id) => { + const event = eventMap[id]; + if (event.staff !== staff) { + if (staff !== null) + ++staffAlters; + staff = event.staff; + } + }); + }); + solution.loss += (spaceTime * 10) / DURATION_MULTIPLIER; + solution.loss += 5 ** staffAlters - 1; + // tick twist + const eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x); + const tickTwists = eventsXOrder.slice(1).map((e2, i) => { + const e1 = eventsXOrder[i]; + const dx = e2.x - e1.x; + const dt = e2.tick - e1.tick; + if (!dt) + return dx / this.xSpan; + const rate = Math.atan2(dt / solution.duration, dx / this.xSpan); + return ((rate * 4) / Math.PI - 1) ** 2; + }); + const tickTwist = Math.max(...tickTwists, 0); + solution.loss += tickTwist ** 2; + console.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters); + if (solution.loss < 0) + solution.loss = Infinity; + } +} - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } +var EventElementType; +(function (EventElementType) { + EventElementType[EventElementType["PAD"] = 0] = "PAD"; + EventElementType[EventElementType["BOS"] = 1] = "BOS"; + EventElementType[EventElementType["EOS"] = 2] = "EOS"; + EventElementType[EventElementType["CHORD"] = 3] = "CHORD"; + EventElementType[EventElementType["REST"] = 4] = "REST"; +})(EventElementType || (EventElementType = {})); +class EventCluster extends SimpleClass { + constructor(data) { + super(); + super.assign(data); + } + get regular() { + return (this.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) && + this.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) && + this.elements + .slice(1) + .every((elem, ei) => elem.fake || + this.elements[ei].fake || + elem.grace || + this.elements[ei].grace || + elem.fullMeasure || + this.elements[ei].fullMeasure || + elem.tick <= this.elements[ei].tick || + elem.x > this.elements[ei].x)); + } + get grant() { + return this.annotation && this.annotation.grant; + } + get feature() { + return { + index: this.index, + elements: this.elements, + }; + } + get estimatedDuration() { + const endElem = this.elements.find((elem) => elem.type === EventElementType.EOS); + const tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick; + return Number.isFinite(tick) ? tick : this.duration; + } + assignPrediction(prediction) { + console.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index); + this.matrixH = prediction.matrixH; + prediction.elements.forEach((pe) => { + const { index, ...predisposition } = pe; + const elem = this.elements.find((elem) => elem.index === index); + console.assert(elem, 'element not found:', index); + if (elem) + elem.predisposition = predisposition; + }); + } +} +EventCluster.className = 'EventCluster'; +EventCluster.blackKeys = ['id']; +class EventClusterSet extends SimpleClass { + constructor(data) { + super(); + super.assign(data); + } + trimIrregular() { + let ir = 0; + this.clusters = this.clusters.filter((cluster) => { + const regular = cluster.regular; + if (!regular) { + console.debug('irregular cluster:', cluster); + ++ir; + } + return regular; + }); + if (ir) + console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`); + else + console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`); + return ir; + } +} +EventClusterSet.className = 'EventClusterSet'; - // Count words ready - var nWordsReady = nBlocksReady * blockSize; +class PatchMeasure extends SimpleClass { + constructor(data) { + super(); + Object.assign(this, data); + } + get staffN() { + return Math.floor(Math.log2(this.staffMask)) + 1; + } + get basics() { + return Array(this.staffN).fill(this.basic); + } + get duration() { + return Math.max(0, ...(this.voices || []).map((ids) => { + const events = ids.map((id) => this.events.find((e) => e.id === id)); + return events.reduce((duration, event) => duration + event.duration, 0); + })); + } +} +PatchMeasure.className = 'PatchMeasure'; - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); +var TokenType; +(function (TokenType) { + // clefs + TokenType["ClefG"] = "clefs-G"; + TokenType["ClefF"] = "clefs-F"; + TokenType["ClefC"] = "clefs-C"; + // time signature + TokenType["TimesigC44"] = "timesig-C44"; + TokenType["TimesigC22"] = "timesig-C22"; + TokenType["TimesigZero"] = "zero|timesig0"; + TokenType["TimesigOne"] = "one|timesig1"; + TokenType["TimesigTwo"] = "two|timesig2"; + TokenType["TimesigThree"] = "three|timesig3"; + TokenType["TimesigFour"] = "four|timesig4"; + TokenType["TimesigFive"] = "five|timesig5"; + TokenType["TimesigSix"] = "six|timesig6"; + TokenType["TimesigSeven"] = "seven|timesig7"; + TokenType["TimesigEight"] = "eight|timesig8"; + TokenType["TimesigNine"] = "nine|timesig9"; + // octave shifts + TokenType["OctaveShift8va"] = "octave-a"; + TokenType["OctaveShift8vb"] = "octave-b"; + TokenType["OctaveShift0"] = "octave-0"; + // numbers + TokenType["Zero"] = "zero|n0"; + TokenType["One"] = "one|n1"; + TokenType["Two"] = "two|n2"; + TokenType["Three"] = "three|n3"; + TokenType["Four"] = "four|n4"; + TokenType["Five"] = "five|n5"; + TokenType["Six"] = "six|n6"; + TokenType["Seven"] = "seven|n7"; + TokenType["Eight"] = "eight|n8"; + TokenType["Nine"] = "nine|n9"; + // accidentals + TokenType["AccNatural"] = "accidentals-natural"; + TokenType["AccSharp"] = "accidentals-sharp"; + TokenType["AccDoublesharp"] = "accidentals-doublesharp"; + TokenType["AccFlat"] = "accidentals-flat"; + TokenType["AccFlatflat"] = "accidentals-flatflat"; + TokenType["KeyNatural"] = "accidentals-natural|key-natural"; + TokenType["KeySharp"] = "accidentals-sharp|key-sharp"; + TokenType["KeyFlat"] = "accidentals-flat|key-flat"; + // noteheads + TokenType["NoteheadS0"] = "noteheads-s0"; + TokenType["NoteheadS1"] = "noteheads-s1"; + TokenType["NoteheadS2"] = "noteheads-s2"; + TokenType["NoteheadS1stemU"] = "noteheads-s1|noteheads-s1-u"; + TokenType["NoteheadS1stemD"] = "noteheads-s1|noteheads-s1-d"; + TokenType["NoteheadS2stemU"] = "noteheads-s2|noteheads-s2-u"; + TokenType["NoteheadS2stemD"] = "noteheads-s2|noteheads-s2-d"; + // rests + TokenType["Rest0"] = "rests-0o"; + TokenType["Rest1"] = "rests-1o"; + TokenType["Rest2"] = "rests-2"; + TokenType["Rest3"] = "rests-3"; + TokenType["Rest4"] = "rests-4"; + TokenType["Rest5"] = "rests-5"; + TokenType["Rest6"] = "rests-6"; + TokenType["Rest0W"] = "rests-0"; + TokenType["RestM1"] = "rests-M1"; + // flags + TokenType["Flag3"] = "flags-u3"; + TokenType["Flag4"] = "flags-u4"; + TokenType["Flag5"] = "flags-u5"; + TokenType["Flag6"] = "flags-u6"; + TokenType["Flag7"] = "flags-u7"; + TokenType["Flag8"] = "flags-u8"; + // beams + TokenType["BeamLeft"] = "|beam-left"; + TokenType["BeamRight"] = "|beam-right"; + TokenType["BeamContinue"] = "|beam-continue"; + // tremolos + TokenType["TremoloLeft"] = "|tremolo-left"; + TokenType["TremoloRight"] = "|tremolo-right"; + TokenType["TremoloMiddle"] = "|tremolo-middle"; + // slur & tie + TokenType["SlurBegin"] = "|slur-begin"; + TokenType["SlurEnd"] = "|slur-end"; + TokenType["TieBegin"] = "|tie-begin"; + TokenType["TieEnd"] = "|tie-end"; + // volta + TokenType["VoltaLeft"] = "|volta-left"; + TokenType["VoltaRight"] = "|volta-right"; + TokenType["VoltaAlternativeBegin"] = "|volta-alter-begin"; + //VoltaAlternativeEnd = "|volta-alter-end", + // vertical bars + //BarMeasure = "|bar-measure", + TokenType["BarTerminal"] = "|bar-terminal"; + TokenType["BarSegment"] = "|bar-segment"; + // dots (duration) + TokenType["Dot"] = "|dot"; + TokenType["DotDot"] = "|dotdot"; + // dynamics + TokenType["f"] = "f"; + TokenType["p"] = "p"; + TokenType["m"] = "m"; + TokenType["r"] = "r"; + TokenType["s"] = "s"; + TokenType["z"] = "z"; + // + TokenType["WedgeCrescendo"] = "|wedge-crescendo"; + TokenType["WedgeDiminuendo"] = "|wedge-diminuendo"; + TokenType["WedgeClose"] = "|wedge-close"; + TokenType["CrescendoBegin"] = "|wedge-crescendo"; + TokenType["DecrescendoBegin"] = "|wedge-diminuendo"; + TokenType["CrescendoEnd"] = "|wedge-close"; + TokenType["DecrescendoEnd"] = "|wedge-close"; + // scripts + TokenType["ScriptFermata"] = "scripts-ufermata"; + TokenType["ScriptShortFermata"] = "scripts-ushortfermata"; + TokenType["ScriptSforzato"] = "scripts-sforzato"; + TokenType["ScriptStaccato"] = "scripts-staccato"; + TokenType["ScriptStaccatissimo"] = "scripts-ustaccatissimo"; + TokenType["ScriptTurn"] = "scripts-turn"; + TokenType["ScriptTrill"] = "scripts-trill"; + TokenType["ScriptSegno"] = "scripts-segno"; + TokenType["ScriptCoda"] = "scripts-coda"; + TokenType["ScriptArpeggio"] = "scripts-arpeggio"; + TokenType["ScriptPrall"] = "scripts-prall"; + TokenType["ScriptMordent"] = "scripts-mordent"; + TokenType["ScriptMarcato"] = "scripts-umarcato"; + TokenType["ScriptTenuto"] = "scripts-tenuto"; + TokenType["ScriptPortato"] = "scripts-uportato"; + // pedal + TokenType["PedalStar"] = "pedal-star"; + TokenType["PedalPed"] = "pedal-Ped"; + TokenType["Text"] = "|text"; + TokenType["GraceNotehead"] = "|grace-notehead"; +})(TokenType || (TokenType = {})); +// alias +const tt = TokenType; +const TokenTypes = Object.values(TokenType); +const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t)); +const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t)); +const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t)); +const TokenTimesigsN = TokenTypes.filter((t) => /timesig\d/.test(t)); +const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t)); +const TokenNumbers = TokenTypes.filter((t) => /n\d/.test(t)); +const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t)); +const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t)); +const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2]; +const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t)); +const TokenRests = TokenTypes.filter((t) => /rests-/.test(t)); +const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t)); +const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t)); +const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t)); +const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t)); +const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t)); +const TokenDots = [tt.Dot, tt.DotDot]; +const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd]; +const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t)); +const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t)); +const TokenAccessories = [ + ...TokenNumbers, + ...TokenDynamics, + ...TokenWedges, + ...TokenPedals, + ...TokenArcs, + tt.ScriptFermata, + tt.ScriptShortFermata, + tt.ScriptSforzato, + tt.ScriptStaccato, + tt.ScriptStaccatissimo, + tt.ScriptTurn, + tt.ScriptTrill, + tt.ScriptPrall, + tt.ScriptMordent, + tt.ScriptMarcato, + tt.ScriptTenuto, + tt.ScriptPortato, +]; +const TokenDirectionless = [...TokenPedals]; +const TokenGlyphs = [ + ...TokenClefs, + ...TokenTimesigs, + ...TokenNumbers, + ...TokenAccidentals, + tt.NoteheadS0, + tt.NoteheadS1, + tt.NoteheadS2, + ...TokenRests, + ...TokenDynamics, + ...TokenScripts, + ...TokenPedals, + ...TokenDots, +]; +const TOKEN_Y_ROUND = {}; +TokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1)); +TokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1)); +TokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); +TokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); +TokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); +TokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5)); +const TOKEN_Y_FIXED = {}; +TokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0)); +TokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0)); +class Token { + constructor(data) { + Object.assign(this, data); + } + get typeId() { + return this.type.split('|').reverse()[0]; + } + get isPredicted() { + return Number.isFinite(this.confidence); + } + get isNotehead() { + return TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0; + } + get isContexted() { + return (TokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)); + } + get isAccessory() { + return TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type); + } + get division() { + switch (this.type) { + case tt.NoteheadS0: + return 0; + case tt.NoteheadS1stemU: + case tt.NoteheadS1stemD: + return 1; + case tt.NoteheadS2stemU: + case tt.NoteheadS2stemD: + return 2; + case tt.Flag3: + return 3; + case tt.Flag4: + return 4; + case tt.Flag5: + return 5; + case tt.Flag6: + return 6; + case tt.Flag7: + return 7; + case tt.Flag8: + return 8; + case tt.RestM1: + return -1; + case tt.Rest0: + return 0; + case tt.Rest1: + return 1; + case tt.Rest2: + return 2; + case tt.Rest3: + return 3; + case tt.Rest4: + return 4; + case tt.Rest5: + return 5; + case tt.Rest6: + return 6; + // TODO: + //case tt.Rest0W: + // return 0; + } + return null; + } + get dots() { + switch (this.type) { + case tt.Dot: + return 1; + case tt.DotDot: + return 2; + } + return null; + } + get direction() { + switch (this.type) { + case tt.NoteheadS1stemU: + case tt.NoteheadS2stemU: + return 'u'; + case tt.NoteheadS1stemD: + case tt.NoteheadS2stemD: + return 'd'; + } + return null; + } + get width() { + switch (this.type) { + case tt.NoteheadS0: + return NOTEHEAD_WIDTHS.NoteheadS0; + case tt.NoteheadS1stemU: + case tt.NoteheadS1stemD: + return NOTEHEAD_WIDTHS.NoteheadS1; + case tt.NoteheadS2stemU: + case tt.NoteheadS2stemD: + return NOTEHEAD_WIDTHS.NoteheadS2; + } + } + get left() { + switch (this.type) { + case tt.NoteheadS0: + return this.x - this.width / 2; + case tt.NoteheadS1stemU: + case tt.NoteheadS2stemU: + return this.x - this.width; + case tt.NoteheadS1stemD: + case tt.NoteheadS2stemD: + return this.x; + } + return this.x; + } + get right() { + switch (this.type) { + case tt.NoteheadS0: + return this.x + this.width / 2; + case tt.NoteheadS1stemU: + case tt.NoteheadS2stemU: + return this.x; + case tt.NoteheadS1stemD: + case tt.NoteheadS2stemD: + return this.x + this.width; + } + return this.x; + } + get voiceIndices() { + if (!this.voice || this.voice < 0) + return []; + return Array(Math.floor(Math.log2(this.voice)) + 1) + .fill(null) + .reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []); + } +} +Token.className = 'Token'; +class TextToken extends Token { + constructor(data) { + super(data); + Object.assign(this, data); + } + get width() { + return this.width_; + } + set width(value) { + this.width_ = value; + } +} - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } +const WHOLE_DURATION = 128 * 3 * 5; +const WHOLE_EXP2 = WHOLE_DURATION / 15; +var AccessoryDirection; +(function (AccessoryDirection) { + AccessoryDirection["Up"] = "^"; + AccessoryDirection["Down"] = "_"; + AccessoryDirection["Middle"] = "-"; +})(AccessoryDirection || (AccessoryDirection = {})); +var GraceType; +(function (GraceType) { + GraceType["Grace"] = "grace"; + GraceType["AfterGrace"] = "afterGrace"; + GraceType["Acciaccatura"] = "acciaccatura"; + GraceType["Appoggiatura"] = "appoggiatura"; + GraceType["SlashedGrace"] = "slashedGrace"; +})(GraceType || (GraceType = {})); +var StemBeam; +(function (StemBeam) { + StemBeam["Open"] = "Open"; + StemBeam["Close"] = "Close"; + StemBeam["Continue"] = "Continue"; +})(StemBeam || (StemBeam = {})); +var TremoloLink; +(function (TremoloLink) { + TremoloLink["Pitcher"] = "Pitcher"; + TremoloLink["Catcher"] = "Catcher"; + TremoloLink["Pierced"] = "Pierced"; +})(TremoloLink || (TremoloLink = {})); +var GlissandoStyle; +(function (GlissandoStyle) { + GlissandoStyle["Normal"] = "normal"; + GlissandoStyle["DashedLine"] = "dashed-line"; + GlissandoStyle["DottedLine"] = "dotted-line"; + GlissandoStyle["Zigzag"] = "zigzag"; + GlissandoStyle["Trill"] = "trill"; +})(GlissandoStyle || (GlissandoStyle = {})); +var ArpeggioStyle; +(function (ArpeggioStyle) { + ArpeggioStyle["Normal"] = "Normal"; + ArpeggioStyle["Bracket"] = "Bracket"; + ArpeggioStyle["Parenthesis"] = "Parenthesis"; + ArpeggioStyle["ParenthesisDashed"] = "ParenthesisDashed"; + ArpeggioStyle["ArrowDown"] = "ArrowDown"; +})(ArpeggioStyle || (ArpeggioStyle = {})); +class Term extends SimpleClass { +} +const SCALE_NAMES = 'CDEFGAB'; +class EventTerm extends Term { + static space({ tick, duration }) { + const term = new EventTerm({ + rest: 's', + tick, + accessories: [], + }); + term.duration = Math.round(duration); + return term; + } + constructor(data) { + super(); + super.assign(data); + Object.assign(this, data); + if (Number.isFinite(data.left) && Number.isFinite(data.right)) + this.x = (this.left + this.right) / 2; + if (!Number.isFinite(this.pivotX)) + this.pivotX = this.x; + //console.assert(Number.isFinite(this.x), "EventTerm: invalid x,", data); + } + get alignedTick() { + return this.grace ? this.tick + this.duration : this.tick; + } + get mainDuration() { + return WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots); + } + get duration() { + let value = this.mainDuration; + if (this.multiplier) + value *= this.multiplier.numerator / this.multiplier.denominator; + if (this.timeWarp) + value *= this.timeWarp.numerator / this.timeWarp.denominator; + return this.grace ? value / 8 : value; + } + set duration(value) { + console.assert(Number.isFinite(value), 'invalid duration value:', value); + const divider = gcd(value, WHOLE_EXP2); + const division = Math.log2(WHOLE_EXP2 / divider); + const multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION); + this.division = division; + this.dots = 0; + if (multiplier.numerator !== multiplier.denominator) + this.multiplier = multiplier; + else + this.multiplier = undefined; + } + get prior() { + return this.tick; + } + get times() { + if (!this.timeWarp) + return null; + return `${this.timeWarp.numerator}/${this.timeWarp.denominator}`; + } + get fullMeasureRest() { + return this.rest === 'R'; + } + get tipX() { + return this.tip ? this.tip.x : this.x; + } + get tipY() { + return this.tip ? this.tip.y : this.ys ? this.ys[0] : 0; + } + get tremoloCatcher() { + return this.tremoloLink === TremoloLink.Catcher; + } + get scaleChord() { + return this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join(''); + } + get zeroHolder() { + return !!this.grace || this.tremoloCatcher; + } +} +EventTerm.className = 'EventTerm'; +var ContextType; +(function (ContextType) { + ContextType[ContextType["Clef"] = 0] = "Clef"; + ContextType[ContextType["KeyAcc"] = 1] = "KeyAcc"; + ContextType[ContextType["Acc"] = 2] = "Acc"; + ContextType[ContextType["OctaveShift"] = 3] = "OctaveShift"; + ContextType[ContextType["TimeSignatureC"] = 4] = "TimeSignatureC"; + ContextType[ContextType["TimeSignatureN"] = 5] = "TimeSignatureN"; +})(ContextType || (ContextType = {})); +class ContextedTerm extends Term { + constructor(data) { + super(); + Object.assign(this, data); + } + get type() { + if (TokenClefs.includes(this.tokenType)) + return ContextType.Clef; + if (/\|key-/.test(this.tokenType)) + return ContextType.KeyAcc; + if (/accidentals-/.test(this.tokenType)) + return ContextType.Acc; + if (TokenOctshifts.includes(this.tokenType)) + return ContextType.OctaveShift; + if (TokenTimesigsC.includes(this.tokenType)) + return ContextType.TimeSignatureC; + if (TokenTimesigsN.includes(this.tokenType)) + return ContextType.TimeSignatureN; + return null; + } + get staffLevel() { + return [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type); + } + get prior() { + return this.tick - 0.1; + } + get clef() { + switch (this.tokenType) { + case TokenType.ClefG: + return -this.y - 2; + case TokenType.ClefF: + return -this.y + 2; + case TokenType.ClefC: + return -this.y; + } + return null; + } + get alter() { + switch (this.tokenType) { + case TokenType.AccNatural: + case TokenType.KeyNatural: + return 0; + case TokenType.AccSharp: + case TokenType.KeySharp: + return 1; + case TokenType.AccFlat: + case TokenType.KeyFlat: + return -1; + case TokenType.AccDoublesharp: + return 2; + case TokenType.AccFlatflat: + return -2; + } + return null; + } + get octaveShift() { + switch (this.tokenType) { + case TokenType.OctaveShift8va: + return -1; + case TokenType.OctaveShift0: + return 0; + case TokenType.OctaveShift8vb: + return 1; + } + return null; + } + get number() { + switch (this.tokenType) { + case TokenType.TimesigZero: + return 0; + case TokenType.TimesigOne: + return 1; + case TokenType.TimesigTwo: + return 2; + case TokenType.TimesigThree: + return 3; + case TokenType.TimesigFour: + return 4; + case TokenType.TimesigFive: + return 5; + case TokenType.TimesigSix: + return 6; + case TokenType.TimesigSeven: + return 7; + case TokenType.TimesigEight: + return 8; + case TokenType.TimesigNine: + return 9; + } + return null; + } +} +ContextedTerm.className = 'ContextedTerm'; +//class BreakTerm extends Term { +//}; +class MarkTerm extends Term { + get prior() { + return this.tick + 0.01; + } +} +MarkTerm.className = 'MarkTerm'; +const MUSIC_NOTES = Array(7) + .fill(0) + .map((_, i) => String.fromCodePoint(0x1d15d + i)); +class TempoTerm extends MarkTerm { + static fromNumeralText(text) { + if (/.+=.*\d+/.test(text)) { + const [symbol, value] = text.split('='); + let division = MUSIC_NOTES.findIndex((n) => symbol.includes(n)); + division = division >= 0 ? division : 2; + let duration = (2 ** division).toString(); + if (symbol.includes('.')) + duration += '.'; + return new TempoTerm({ tick: 0, duration, beats: value }); + } + return null; + } + constructor(data) { + super(); + Object.assign(this, data); + } + get prior() { + return this.tick - 0.01; + } + // a whole note equal to 1920 + get durationMagnitude() { + const [_, den, dot] = this.duration.match(/^(\d+)(\.)?$/); + const magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1); + return magnitude; + } + // beats per minute, suppose 1 beat = 480 ticks + get bpm() { + const [number] = this.beats.match(/\d+/) || [90]; + const beats = Number(number); + return (beats * this.durationMagnitude * 4) / WHOLE_DURATION; + } + isValid(range = [10, 400]) { + const bpm = this.bpm; + return Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1]; + } +} +TempoTerm.className = 'TempoTerm'; +class GlyphTerm extends MarkTerm { + constructor(data) { + super(); + Object.assign(this, data); + } +} +GlyphTerm.className = 'GlyphTerm'; +class TextTerm extends MarkTerm { + constructor(data) { + super(); + Object.assign(this, data); + } +} +TextTerm.className = 'TextTerm'; +class LyricTerm extends MarkTerm { + constructor(data) { + super(); + Object.assign(this, data); + } +} +LyricTerm.className = 'LyricTerm'; +class CommandTerm extends MarkTerm { + constructor(data) { + super(); + Object.assign(this, data); + } +} +CommandTerm.className = 'CommandTerm'; +class ChordmodeTerm extends Term { + constructor(data) { + super(); + Object.assign(this, data); + } + get prior() { + return this.tick; + } + get duration() { + const value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots); + if (this.multiplier) + return (value * this.multiplier.numerator) / this.multiplier.denominator; + return value; + } +} +ChordmodeTerm.className = 'ChordmodeTerm'; - // Remove processed words - processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } +var SimplePolicy; +(function (SimplePolicy) { + const constructXMap = (measure) => { + const xMap = new Map(); + // mark full measure rests + measure.rows.forEach((row) => { + if (row.events.length === 1) { + const event = row.events[0]; + if (event.rest && event.division === 0) + event.rest = 'R'; + } + }); + measure.events.forEach((event) => { + const x = Math.round(event.pivotX * 10) / 10; + let key = 0; + if (event.fullMeasureRest) + key = Math.min(x, ...xMap.keys()); + else { + key = + [...xMap.keys()].find((k) => { + // check if the event is aligned with the current chord + const es = xMap.get(k); + const left = Math.min(...es.map((e) => e.left)); + const right = Math.max(...es.map((e) => e.right)); + const overlaySize = Math.min(right, event.right) - Math.max(left, event.left); + return overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62; + }) || x; + } + event.roundX = key; + const es = xMap.get(key) || []; + xMap.set(key, es); + es.push(event); + }); + return xMap; + }; + SimplePolicy.computeMeasureTicks = (measure) => { + const xMap = constructXMap(measure); + let tick = 0; + const ts = new Set([tick]); + const eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]); + for (const [x, events] of eventGroups) { + events.forEach((event) => { + if (event.predisposition) { + event.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest; + event.grace = event.predisposition.grace ? GraceType.Grace : null; + event.division = argmax$1(event.predisposition.divisionVector); + event.dots = argmax$1(event.predisposition.dotsVector); + if (event.predisposition.timeWarped > 0.5) + event.timeWarp = frac(2, 3); + } + if (event.fullMeasureRest) + event.tick = 0; + else { + if (event.zeroHolder) + tick -= event.duration; + if (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) + event.tick = event.predisposition.tick; + else + event.tick = tick; + ts.add(event.tick + event.duration); + } + //console.log("append tick:", event.tick + event.duration, event); + }); + ts.delete(tick); + //column.xToTick[x] = tick; + if (ts.size) + tick = Math.min(...ts); + } + if (Number.isInteger(measure.estimatedDuration)) + measure.duration = measure.estimatedDuration; + else + measure.duration = Math.max(...ts, 0); + }; + SimplePolicy.computeMeasureVoices = (measure) => { + measure.voices = []; + for (const row of measure.rows) { + const events = row.events.filter((event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)); + const eventSet = new Set(events); + while (eventSet.size) { + let tick = 0; + const voice = []; + const pushEvent = (e) => { + voice.push(e.id); + if (!e.zeroHolder) + tick += e.duration; + eventSet.delete(e); + }; + const e0 = events.find((e) => eventSet.has(e)); + if (e0.alignedTick > 0) { + //voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick }); + tick = e0.alignedTick; + } + pushEvent(e0); + while (true) { + // TODO: consider slur pair + const e = events.find((e) => eventSet.has(e) && e.alignedTick === tick); + if (!e) + break; + pushEvent(e); + } + //if (tick < measure.duration) + // voice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick }); + measure.voices.push(voice); + } + } + }; +})(SimplePolicy || (SimplePolicy = {})); +const solveGraceEvents = (measure) => { + const graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/); + if (!graceEvents.length) + return; + const tickMap = measure.tickMap; + const staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => { + events.forEach((event) => { + if (!event.grace) { + smap[event.staff] = smap[event.staff] || {}; + const oldEvent = smap[event.staff][tick]; + smap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent; + } + }); + return smap; + }, {}); + const staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => { + map[staff] = Object.entries(emap) + .map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] })) + .sort((p1, p2) => p1.event.x - p2.event.x); + map[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar + let tick = 0; + map[staff].forEach((position) => { + if (position.tick > tick) { + position.preTick = tick; + tick = position.tick; + } + }); + return map; + }, {}); + // append grace events into positions + graceEvents.forEach((event) => { + const staff = staffPositions[event.staff]; + if (staff) { + const position = staff.find((p) => p.event.x > event.x); + if (position) + position.graces.push(event); + event.roundX = event.x; + //if (position.tick >= measure.duration) + // event.grace = GraceType.AfterGrace; + } + }); + Object.values(staffPositions).forEach((staff) => staff.forEach((position) => { + if (position.graces.length) { + position.event.graceIds = position.graces.map((e) => e.id); + const totalDuration = position.graces.reduce((t, e) => t + e.duration, 0); + const duration = Math.min(totalDuration, position.tick - position.preTick); + const warp = duration / totalDuration; + let tick = position.tick; + [...position.graces].reverse().forEach((event) => { + event.tick = Math.round(tick - event.duration * warp); + tick = event.tick; + }); + } + })); +}; +const solveTremoloPairs = (measure) => { + const catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace); + const pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace); + catchers.forEach((catcher) => { + let candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x); + if (!candidates.length) + candidates = measure.events.filter((event) => Number.isFinite(event.tick) && + !event.grace && + !event.rest && + event.division === catcher.division && + event.dots === catcher.dots && + event.x < catcher.x); + candidates.sort((c1, c2) => c2.x - c1.x); + if (candidates.length) { + const pitcher = candidates[0]; + pitcher.catcherId = catcher.id; + const tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3); + pitcher.tremolo = tremolo; + catcher.tremolo = tremolo; + if (!catcher.tick) + catcher.tick = pitcher.tick + pitcher.duration / 2; + const pi = pitchers.indexOf(pitcher); + if (pi >= 0) + pitchers.splice(pi, 1); + } + }); +}; +var EquationPolicy; +(function (EquationPolicy) { + const DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13; + const CHORDS_SEAM_SIGMA = 0.6; + const NEIGHBOR_CHORDS_SIGMA = 1.6; + const Y_DECAY_SIGMA = 16; + const STAFF_DECAY_FACTOR = 2; + const STEM_DIRECTION_DECAY = 0.9; + const ILL_BEAMS_PENALTY = 0.2; + const INVERT_SQRT2 = 0.7071067811865475; + const MATRIX_H_WEIGHT = 3; + const FINE_BEAMS = [ + [null, null], + [null, StemBeam.Open], + [StemBeam.Open, StemBeam.Continue], + [StemBeam.Open, StemBeam.Close], + [StemBeam.Continue, StemBeam.Continue], + [StemBeam.Continue, StemBeam.Close], + [StemBeam.Close, null], + [StemBeam.Close, StemBeam.Open], + ].map((bb) => bb.join('-')); + const solveStaffGroup = (staffGroup, options) => { + if (!staffGroup.events.length) { + return { + events: [], + voices: [], + duration: 0, + }; + } + const solver = new Solver(staffGroup, options); + return solver.solve(); + }; + EquationPolicy.estiamteMeasure = (measure) => { + const allEvents = measure.events + .filter((event) => !event.zeroHolder) + .map((event) => ({ + id: event.id, + staff: event.staff, + x: event.x, + tickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x, + tipX: event.tipX, + y: event.tipY + event.staff * 100, + duration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION, + division: event.division, + dots: event.dots, + stemDirection: event.stemDirection, + beam: event.beam, + rest: event.rest, + // the possibility of full measure rest + pR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0, + fakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0, + shrinkness: event.predisposition ? event.predisposition.timeWarped : null, + })); + let expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator; + if (Number.isFinite(measure.estimatedDuration)) + expectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4)); + const staffGroupMap = measure.staffGroups.reduce((map, staves, group) => { + staves.forEach((staff) => (map[staff] = group)); + return map; + }, {}); + const ids = [0, ...allEvents.map((e) => e.id)]; // compact ids + const ievents = allEvents.map((e) => ({ + ...e, + id: ids.indexOf(e.id), + x: e.x - measure.startX, + confidence: (1 - e.pR) * (1 - e.fakeP), + shrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4), + staffGroup: staffGroupMap[e.staff], + })); + // estimate topology matrices + const matrixH = Array(ids.length + 1) + .fill(null) + .map(() => Array(ids.length).fill(0)); + const matrixV = Array(ids.length) + .fill(null) + .map(() => Array(ids.length).fill(0)); + //const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2); + const hp = (dx) => erf__default["default"](dx / NEIGHBOR_CHORDS_SIGMA) * erf__default["default"](NEIGHBOR_CHORDS_SIGMA / dx); + for (const e1 of ievents) { + for (const e2 of ievents) { + matrixV[e1.id][e2.id] = + e1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf__default["default"](((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0; + if (e1.staffGroup !== e2.staffGroup) + matrixH[e1.id][e2.id] = 0; + // prohibit voice crossing staff groups + else if (e1.x <= e2.x) + matrixH[e1.id][e2.id] = 0; + else { + const staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR); + const yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1; + const dx = e1.x - e2.x; + const dtx = e1.tipX - e2.tipX; + matrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT); + } + // weaken full measure rest connections + const nR = (1 - e1.pR) * (1 - e2.pR); + matrixV[e1.id][e2.id] *= nR; + matrixH[e1.id][e2.id] *= nR; + if (matrixV[e1.id][e2.id] < 1e-2) + matrixV[e1.id][e2.id] = 0; + // weaken inconsistent stem directions + if (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) + matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY; + // ill beams penalty + if (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) + matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY; + } + // H possibility of e1 and end of measure + matrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT); + } + return { + ids, + events: ievents, + expectedDuration, + measureShrinkness: 0, + endX: measure.position.right, + matrixH, + matrixV, + }; + }; + EquationPolicy.regulateMeasure = async (measure, { solver = null, ...options }) => { + const env = EquationPolicy.estiamteMeasure(measure); + const { ids, matrixH, matrixV } = env; + // copy matrices values from measure topology data + if (measure.matrixH) { + console.assert(measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1], 'matrix shape mismatch:', ids.length, `${measure.matrixH.length}x${measure.matrixH[0].length}`, `${matrixH.length}x${matrixH[0].length}`); + for (let i = 0; i < ids.length + 1; i++) { + const ii = i < ids.length ? ids[i] : measure.matrixH.length - 1; + for (let j = 1; j < ids.length; j++) + matrixH[i][j] = measure.matrixH[ii][ids[j]]; + } + } + if (measure.matrixV) { + matrixV.forEach((row, i) => row.forEach((_, j) => { + const mp = measure.matrixV[ids[i]][ids[j]]; + if (Number.isFinite(mp)) + matrixV[i][j] = mp; + })); + } + if (Number.isFinite(measure.estimatedDuration)) + env.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3); + if (options.logger) + options.logger.info('--- MEASURE', measure.measureIndex, '---', env); + const solution = solver ? await solver(env, options) : solveStaffGroup(env, options); + const resultEvents = solution.events.map((e) => ({ + ...e, + id: env.ids[e.id], // decode compact ids + })); + resultEvents.forEach((e) => { + const event = measure.events.find((e0) => e0.id === e.id); + event.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null; + event.tickGroup = e.tickGroup; + event.timeWarp = e.timeWarp; + }); + measure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER); + measure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id])); + measure.solutionStat = { + loss: solution.loss, + solverCredits: solution.credits, + solverTimes: solution.times, + }; + // full measure rests + measure.events.forEach((event) => { + const result = resultEvents.find((e) => e.id === event.id); + if (!result) + return; + else if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) { + event.tick = 0; + event.tickGroup = 0; + event.rest = 'R'; + event.duration = measure.duration; + measure.voices.push([event.id]); + } + else if (event.rest === 'R') { + event.tick = 0; + event.tickGroup = 0; + event.duration = measure.duration; + measure.voices.push([event.id]); + } + }); + }; + EquationPolicy.regulateMeasureWithRectification = async (measure, rectification, { solver = null, ...options }) => { + const allEvents = measure.events + .filter((event) => !event.zeroHolder) + .map((event) => { + const re = rectification.events.find((e) => e && e.id === event.id); + const division = Number.isFinite(re?.division) ? re.division : event.division; + const dots = Number.isFinite(re?.dots) ? re.dots : event.dots; + const duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots); + return { + id: event.id, + staff: event.staff, + x: event.x, + tickEstimated: event.predisposition?.tick, + y: event.tipY + event.staff * 100, + duration, + // the possibility of full measure rest + pR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0, + fakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0, + shrinkness: event.predisposition?.timeWarped || 0, + }; + }); + let expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator; + if (Number.isFinite(measure.estimatedDuration)) + expectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4)); + const staffGroupMap = measure.staffGroups.reduce((map, staves, group) => { + staves.forEach((staff) => (map[staff] = group)); + return map; + }, {}); + const ids = [0, ...allEvents.map((e) => e.id)]; // compact ids + const ievents = allEvents.map((e) => ({ + ...e, + id: ids.indexOf(e.id), + x: e.x - measure.startX, + confidence: (1 - e.pR) * (1 - e.fakeP), + shrinkness: e.shrinkness, + staffGroup: staffGroupMap[e.staff], + })); + // estimate topology matrices + const matrixH = Array(ids.length + 1) + .fill(null) + .map(() => Array(ids.length).fill(0)); + const matrixV = Array(ids.length) + .fill(null) + .map(() => Array(ids.length).fill(0)); + for (const e1 of ievents) { + for (const e2 of ievents) { + matrixV[e1.id][e2.id] = + e1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf__default["default"](((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0; + // weaken full measure rest connections + const nR = (1 - e1.pR) * (1 - e2.pR); + matrixV[e1.id][e2.id] *= nR; + if (matrixV[e1.id][e2.id] < 1e-2) + matrixV[e1.id][e2.id] = 0; + } + } + // copy matrices values from measure topology data + console.assert(measure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1], 'matrix shape mismatch:', ids.length, `${measure.matrixH.length}x${measure.matrixH[0].length}`, `${matrixH.length}x${matrixH[0].length}`); + for (let i = 0; i < ids.length + 1; i++) { + const ii = i < ids.length ? ids[i] : measure.matrixH.length - 1; + for (let j = 1; j < ids.length; j++) + matrixH[i][j] = measure.matrixH[ii][ids[j]]; + } + let measureShrinkness = 0; + if (Number.isFinite(measure.estimatedDuration)) + measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3); + const env = { + ids, + events: ievents, + expectedDuration, + measureShrinkness, + endX: measure.position.right, + matrixH, + matrixV, + }; + const solution = solver ? await solver(env, options) : solveStaffGroup(env, options); + const priority = -solution.loss; + const events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => { + const re = rectification.events.find((e) => e && e.id === id); + const tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick; + return { + id, + tick: tickN, + tickGroup, + timeWarp, + division: re?.division, + dots: re?.dots, + }; + }); + const duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER); + return { + events, + voices: solution.voices, + duration, + priority, + }; + }; +})(EquationPolicy || (EquationPolicy = {})); +class SpartitoMeasure extends SimpleClass { + static reorderEvents(events, staffYsFull) { + const HALF_NOTEHEAD = 0.7; + const ys = []; + const es = events.map((e) => ({ + id: e.id, + staff: e.staff, + x: e.x / HALF_NOTEHEAD, + rx: 0, + ry: staffYsFull[e.staff] + e.tipY, + tipY: e.tipY, + prior: 0, + })); + es.sort((e1, e2) => e1.x - e2.x); + es.slice(1).forEach((e, i) => { + const dx = Math.min(Math.round(e.x - es[i].x), 2); + e.rx = es[i].rx + dx; + }); + es.forEach((e) => { + e.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01; + if (!ys.includes(e.ry)) + ys.push(e.ry); + }); + es.sort((e1, e2) => e1.prior - e2.prior); + ys.sort((y1, y2) => y1 - y2); + let yi = 0; + const yis = ys.map((y, i) => { + if (!i || ys[i] - ys[i - 1] < 0.5) + return yi; + ++yi; + return yi; + }); + const result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] })); + result.forEach((e, i) => (e.id = i + 1)); + return result; + } + constructor(data) { + super(); + super.assign(data); + if (!this.originalRegulationHash && !this.regulated) + this.originalRegulationHash = this.regulationHash; + this.barTypes = this.barTypes || {}; + // Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON) + // to set endEvent and roundX needed for playback cursor positioning. + if (this.regulated && this.position) + this.postRegulate(); + } + get timeSignature() { + return this.basics && this.basics[0].timeSignature; + } + get keySignature() { + return this.basics && this.basics[0].keySignature; + } + get timeSignatureChanged() { + return this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)); + } + get doubtfulTimesig() { + return this.basics && this.basics[0].doubtfulTimesig; + } + get regulated() { + return !!this.voices; + } + get validRegulated() { + if (!this.voices) + return false; + return this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick)); + } + get rows() { + return this.contexts.map((contexts, si) => { + const events = this.events.filter((e) => e.staff === si); + return { + events, + contexts, + }; + }); + } + get eventStartX() { + return this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX; + } + get startX() { + return this.position.left; + } + get width() { + return this.position.right - this.position.left; + } + get tickMap() { + return this.events + .concat([this.endEvent]) + .filter(Boolean) + .reduce((map, event) => { + if (Number.isFinite(event.tick)) { + if (!map.has(event.tick)) + map.set(event.tick, []); + map.get(event.tick).push(event); + } + return map; + }, new Map()); + } + get tickToX() { + return [...this.tickMap.entries()].reduce((map, [tick, events]) => { + events = events.filter((e) => !e.fullMeasureRest && !e.grace); + if (events.length) { + const x = Math.min(...events.map((e) => e.x)); + map[tick] = x; + } + return map; + }, {}); + } + get tickRates() { + const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest); + events.sort((e1, e2) => e1.x - e2.x); + return events.slice(0, events.length - 1).map((e1, i) => { + const e2 = events[i + 1]; + return (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3); + }); + } + get tickRatesInStaves() { + const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace); + const sevents = events.reduce((map, event) => { + map[event.staff] = map[event.staff] || []; + map[event.staff].push(event); + return map; + }, {}); + const rates = Object.values(sevents).map((es) => es + .sort((e1, e2) => e1.x - e2.x) + .slice(0, es.length - 1) + .map((e1, i) => { + const e2 = es[i + 1]; + return (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3); + })); + return [].concat(...rates); + } + get tickRatesInGroups() { + const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest); + const gevents = events.reduce((map, event) => { + const groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff)); + map[groupIndex] = map[groupIndex] || []; + map[groupIndex].push(event); + return map; + }, {}); + const rates = Object.values(gevents).map((es) => es + .sort((e1, e2) => e1.x - e2.x) + .slice(0, es.length - 1) + .map((e1, i) => { + const e2 = es[i + 1]; + return (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3); + })); + return [].concat(...rates); + } + get tickTwist() { + if (!this.duration || !this.staffGroups) + return undefined; + const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)); // ignore rest0 + const gevents = events.reduce((map, event) => { + const groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff)); + map[groupIndex] = map[groupIndex] || []; + map[groupIndex].push(event); + return map; + }, {}); + const twists = Object.values(gevents).map((es) => { + const eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX); + const xSpan = this.position.right - eventsXOrder[0].x; + const tickTwists = eventsXOrder.slice(1).map((e2, i) => { + const e1 = eventsXOrder[i]; + const dx = e2.pivotX - e1.pivotX; + const dt = e2.tick - e1.tick; + if (!dt) + return dx / xSpan; + const rate = Math.atan2(dt / this.duration, dx / xSpan); + return ((rate * 4) / Math.PI - 1) ** 2; + }); + return Math.max(0, ...tickTwists); + }); + return Math.max(0, ...twists); + } + get eventMap() { + return this.events.reduce((map, event) => { + map[event.id] = event; + return map; + }, {}); + } + get empty() { + return !this.events?.length || !this.voices?.length; + } + get hasIllEvent() { + const voicedEventIds = this.voices.flat(1); + const eventMap = this.eventMap; + return (this.regulated && + voicedEventIds.some((id) => { + const event = eventMap[id]; + return !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest; + })); + } + get brief() { + const timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`; + const eventBrieves = this.events.map((e) => [ + e.staff, + e.intX, + Math.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0), + e.fullMeasureRest ? 0 : e.division, + e.fullMeasureRest ? 0 : e.dots, + e.rest ? 'r' : '', + e.grace || '', + e.stemDirection, + e.beam || '', + ].join('|')); + return [timesig, ...eventBrieves].join('\n'); + } + get regulationHash() { + return sha1__default["default"](this.brief); + } + // prefer use originalRegulationHash + get regulationHash0() { + return this.originalRegulationHash || this.regulationHash; + } + get regulationHashes() { + return Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean))); + } + get featureWords() { + if (!this.regulated || !this.voices || !this.voices.length) + return null; + const invalid = this.tickRatesInStaves.some((rate) => rate < 0); + const mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest); + const ys = mainEvents + .map((event) => event.ys) + .flat(1) + .map((y) => `Y${-y * 2}`); + const uys = Array.from(new Set(ys)); + if (this.keySignature) + uys.push(`K${this.keySignature}`); + const voices = this.voices + .map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest)) + .filter((voice) => voice.length); + const melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-')); + const rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join('')); + if (this.timeSignature) + rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`); + return [uys, melodies, rhythm]; + } + get barType() { + if (this.voltaEnd) + return 'VoltaRight'; + const typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]); + if (typeEntris[0] && typeEntris[0][1] >= 1) + return typeEntris[0][0]; + return null; + } + get partialDuration() { + if (!Number.isFinite(this.duration)) + return false; + const signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature); + return this.duration < signatureDuration; + } + postRegulate() { + this.endEvent = new EventTerm({ tick: this.duration, x: this.position.right }); + this.updateRoundX(); + solveGraceEvents(this); + solveTremoloPairs(this); + this.updateContextTick(); + } + updateRoundX() { + const tickToX = this.tickToX; + if (tickToX) + this.events.forEach((event) => { + const x = tickToX[event.tick]; + if (Number.isFinite(x)) + event.roundX = x; + }); + } + updateContextTick() { + if (!this.staffGroups) + return; + const contexts = this.contexts.flat(1); + this.staffGroups.flat(1).forEach((staffIndex) => { + const terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)]; + terms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left + let tick = this.duration; + terms.forEach((term) => { + if (term instanceof EventTerm) { + if (!term.fullMeasureRest && !term.zeroHolder) + tick = term.tick; + } + else if (term instanceof ContextedTerm) + term.tick = tick; + }); + }); + } + asSolution(ref = undefined) { + if (!this.regulated) + return null; + //let timeSignature = undefined; + //if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature; + return { + //timeSignature, + events: this.events.map((e) => { + const se = { + id: e.id, + tick: e.tick, + tickGroup: e.tickGroup, + timeWarp: e.timeWarp, + }; + if (ref) { + const refEvent = ref.events.find((re) => re.id === e.id); + if (refEvent) { + if (e.division !== refEvent.division) + se.division = e.division; + if (e.dots !== refEvent.dots) + se.dots = e.dots; + if (e.grace !== refEvent.grace) + se.grace = !!e.grace; + if (e.beam !== refEvent.beam) + se.beam = e.beam; + if (e.fullMeasureRest !== refEvent.fullMeasureRest) + se.fullMeasure = e.fullMeasureRest; + } + } + return se; + }), + voices: this.voices, + duration: this.duration, + priority: -this.solutionStat?.loss, + }; + } + applySolution(solution) { + if (solution.timeSignature) { + this.basics.forEach((basic) => { + basic.timeSignature = solution.timeSignature; + basic.doubtfulTimesig = false; + }); + } + this.voices = solution.voices; + this.duration = solution.duration; + this.events.forEach((event) => { + event.timeWarp = null; + event.tick = null; + event.tickGroup = null; + const se = solution.events?.find((e) => e.id === event.id); + if (se) { + event.tick = se.tick; + event.timeWarp = se.timeWarp; + event.tickGroup = se.tickGroup; + if (Number.isFinite(se.division)) + event.division = se.division; + if (Number.isFinite(se.dots)) + event.dots = se.dots; + if (se.beam !== undefined) + event.beam = se.beam; + if (se.grace !== undefined) + event.grace = se.grace ? GraceType.Grace : undefined; + if (se.fullMeasure) + event.rest = 'R'; + } + }); + if (Number.isFinite(solution.priority)) + this.solutionStat = { loss: -solution.priority }; + this.postRegulate(); + } + cleanupRegulation() { + this.voices = null; + this.duration = null; + this.events.forEach((event) => { + event.tick = null; + event.tickGroup = null; + event.timeWarp = null; + }); + } + regulateTest() { + this.duration = 0; + this.voices = this.rows.map((row) => row.events.map((e) => e.id)); + this.voices.forEach((ids) => { + let tick = 0; + const events = ids.map((id) => this.events.find((e) => e.id === id)); + events.forEach((e, index) => { + e.tickGroup = index; + e.tick = tick; + tick += e.duration; + }); + this.duration = Math.max(this.duration, tick); + }); + } + regulateSimple() { + SimplePolicy.computeMeasureTicks(this); + SimplePolicy.computeMeasureVoices(this); + } + async regulateEquations(options) { + await EquationPolicy.regulateMeasure(this, options); + } + // compute event.tick, event.tickGroup, event.timeWarp, voices, duration + async regulate({ policy = 'advanced', ...options } = {}) { + switch (policy) { + case 'test': + this.regulateTest(); + break; + case 'equations': + case 'advanced': + await this.regulateEquations(options); + break; + case 'simple': + default: + this.regulateSimple(); + } + this.postRegulate(); + } + createPatch() { + return new PatchMeasure({ + measureIndex: this.measureIndex, + staffMask: this.staffMask, + basic: this.basics[0], + //points: [], + events: this.events, + contexts: this.contexts, + marks: this.marks, + voices: this.voices, + }); + } + createClusters() { + const trueEventIds = this.voices && new Set(this.voices.flat(1)); + return this.staffGroups + .filter((idx) => idx.length) + .map((staffIndices) => { + const staffY0 = this.position.staffYs[0]; + const staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0; + const events = this.events.filter((event) => staffIndices.includes(event.staff)); + if (!events.length) + return null; + const elements = events.map((event) => ({ + index: event.id, + voice: (this.voices || []).findIndex((voice) => voice.includes(event.id)), + type: event.rest ? EventElementType.REST : EventElementType.CHORD, + staff: staffIndices.indexOf(event.staff), + x: event.tipX, + pivotX: event.pivotX, + y1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]), + y2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY), + headY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1], + feature: event.feature, + division: event.division, + dots: event.dots, + beam: event.beam || null, + stemDirection: event.stemDirection, + grace: !!event.grace, + tremoloCatcher: event.tremoloCatcher, + timeWarped: !!event.timeWarp, + fullMeasure: event.fullMeasureRest, + tick: event.tick || 0, + fake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake + })); + if (!elements.some((elem) => !elem.fake)) + return null; + const signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature); + // BOS & EOS + elements.unshift({ + index: 0, + type: EventElementType.BOS, + staff: null, + division: null, + beam: null, + dots: null, + stemDirection: null, + grace: false, + tremoloCatcher: false, + fullMeasure: false, + x: this.position.left, + pivotX: this.position.left, + y1: 0, + y2: 0, + headY: 0, + feature: null, + timeWarped: this.duration < signatureDuration, + tick: 0, + fake: false, + }); + elements.push({ + index: -1, + type: EventElementType.EOS, + staff: null, + division: null, + beam: null, + dots: null, + stemDirection: null, + grace: false, + tremoloCatcher: false, + fullMeasure: false, + x: this.position.right, + pivotX: this.position.right, + y1: 0, + y2: 0, + headY: 0, + feature: null, + timeWarped: false, + tick: this.duration, + fake: false, + }); + let matrixH = null; + if (this.voices) { + matrixH = elements.map(() => elements.map(() => 0)); + this.voices.forEach((voice) => { + let tar = 0; + voice.forEach((id) => { + const src = elements.findIndex((e) => e.index === id); + if (src > 0 && tar >= 0) + matrixH[src][tar] = 1; + tar = src; + }); + if (tar >= 0) + matrixH[elements.length - 1][tar] = 1; + }); + } + const annotation = { ...this.solutionStat, patched: this.patched }; + const backgroundImages = this.backgroundImages && + this.backgroundImages.map(({ url, position }) => ({ + url, + position: { + ...position, + y: position.y - staffY0, + }, + })); + return new EventCluster({ + index: this.measureIndex, + duration: this.duration, + signatureDuration, + staffY0, + elements, + matrixH, + annotation, + backgroundImages, + }); + }) + .filter(Boolean); + } + applyClusters(clusters) { + const id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1; + this.matrixH = Array(id_max + 1) + .fill(null) + .map(() => Array(id_max).fill(0)); + clusters.forEach((cluster) => { + const ids = cluster.elements.map((e) => e.index); + console.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length); + for (let is = 1; is < ids.length; ++is) { + for (let it = 0; it < ids.length - 1; ++it) { + const srcId = ids[is] < 0 ? id_max : ids[is]; + const tarId = ids[it]; + this.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it]; + } + } + // event predisposition + cluster.elements.forEach((elem) => { + const event = this.events.find((event) => event.id === elem.index); + if (event) { + event.predisposition = elem.predisposition; + if (event.predisposition.grace !== undefined) + event.grace = event.predisposition.grace ? GraceType.Grace : null; + } + }); + }); + // estimated measure duration + this.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length; + } +} +SpartitoMeasure.className = 'SpartitoMeasure'; +SpartitoMeasure.blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit']; - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, +class EditableEvent extends EventTerm { + constructor(data) { + super(data); + } + get agent() { + return new Proxy(this, { + get(target, key) { + const self = target; + switch (key) { + case 'id': + case 'tick': + case 'duration': + case 'rest': + case 'division': + case 'dots': + case 'stemDirection': + case 'beam': + case 'tremolo': + case 'tremoloLink': + case 'arpeggioStyle': { + const value = self[key]; + return value === undefined ? null : value; + } + case 'tying': + case 'tied': + case 'glissando': { + const value = self[key]; + return value === undefined ? false : value; + } + case 'grace': + return !!self.grace; + case 'timeWarp': + return self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null; + case 'multiplier': + return self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null; + case 'pitches': + return self.pitches; + } + return undefined; + }, + set: (target, key, value) => { + const self = target; + switch (key) { + case 'tick': + case 'duration': + case 'rest': + case 'division': + case 'dots': + case 'stemDirection': + case 'tying': + case 'tied': + case 'beam': + case 'tremolo': + case 'tremoloLink': + case 'glissando': + case 'arpeggioStyle': + self[key] = value; + return true; + case 'grace': + self.grace = value ? GraceType.Grace : null; + return true; + case 'timeWarp': + self.timeWarp = null; + if (value && typeof value === 'string') { + const captures = value.match(/^(\d+)\/(\d+)/); + if (captures) { + self.timeWarp = { + numerator: parseInt(captures[1]), + denominator: parseInt(captures[2]), + }; + } + } + return true; + case 'multiplier': + self.multiplier = null; + if (value && typeof value === 'string') { + const captures = value.match(/^(\d+)\/(\d+)/); + if (captures) { + self.multiplier = { + numerator: parseInt(captures[1]), + denominator: parseInt(captures[2]), + }; + } + } + return true; + case 'id': + case 'pitches': + return true; + } + return false; + }, + ownKeys: () => [ + 'id', + 'duration', + 'rest', + 'division', + 'dots', + 'stemDirection', + 'tying', + 'tied', + 'beam', + 'timeWarp', + 'multiplier', + 'tremolo', + 'tremoloLink', + 'glissando', + 'arpeggioStyle', + 'tick', + 'grace', + 'pitches', + ], + getOwnPropertyDescriptor() { + return { enumerable: true, configurable: true }; + }, + }); + } +} +class EditableMeasure extends SpartitoMeasure { + constructor(data) { + super(data); + this.events = null; + this.events = data.events; + if (this.events?.some((event) => !(event instanceof EditableEvent))) + this.events = this.events.map((event) => new EditableEvent(event)); + if (this.voices) + this.syncVoiceToEvents(); + } + syncVoiceToEvents() { + this.events.forEach((event) => (event.voice = -1)); + this.voices.forEach((voice, voiceIndex) => { + voice.forEach((id) => { + const event = this.events.find((event) => event.id === id); + if (event) + event.voice = voiceIndex; + else + console.warn('no event with id:', id, this.events.length); + }); + }); + } + syncVoiceFromEvents() { + const voices = []; + this.events.forEach((event) => { + if (event?.voice >= 0) { + voices[event.voice] = voices[event.voice] || []; + voices[event.voice].push(event); + } + }); + voices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick)); + this.voices = voices.map((voice) => voice.map((event) => event.id)); + } + get agent() { + return new Proxy(this, { + get: (target, key) => { + const self = target; + switch (key) { + case 'measureIndex': + case 'duration': + return self[key]; + case 'voices': + return self.voices?.map((voice) => voice.join(',')) || null; + case 'timeSignature': + case 'keySignature': + case 'doubtfulTimesig': + return self.basics[0][key]; + //case 'events': + // return self.events.map(eventUIAgent); + case 'toJSON': + return () => ({ + measureIndex: self.measureIndex, + voices: self.voices, + duration: self.duration, + timeSignature: self.basics[0].timeSignature, + keySignature: self.basics[0].keySignature, + }); + } + return undefined; + }, + set: (target, key, value) => { + //console.log('set:', key, value); + const self = target; + switch (key) { + case 'timeSignature': + case 'keySignature': + case 'doubtfulTimesig': + self.basics[0][key] = value; + self.basics = self.basics.map(() => self.basics[0]); + return true; + case 'duration': + self.duration = value; + return true; + case 'measureIndex': + case 'voices': + return true; + } + return false; + }, + ownKeys: () => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'], + getOwnPropertyDescriptor() { + return { enumerable: true, configurable: true }; + }, + }); + } + makeMIDI(bpm = 120) { + if (!this.regulated) + return null; + const microsecondsPerBeat = 60e6 / bpm; + const header = { formatType: 0, ticksPerBeat: 480 }; + const tracks = this.voices.map((ids, vi) => { + const events = ids + .map((id) => { + const event = this.events.find((event) => event.id === id); + if (event) { + const subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : []; + return [...subEvents, event]; + } + return []; + }) + .flat(1); + const startTime = 0; + const midiEvents = events + .filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration)) + .map((event) => event.pitches.map((pitch) => [ + { + id: event.id, + time: event.tick, + type: 'channel', + subtype: 'noteOn', + channel: event.staff, + noteNumber: noteToPitch(pitch), + velocity: 96, + }, + { + id: event.id, + time: event.tick + event.duration, + type: 'channel', + subtype: 'noteOff', + channel: event.staff, + noteNumber: noteToPitch(pitch), + }, + ])) + .flat(2); + midiEvents.sort(function (e1, e2) { + return e1.time - e2.time; + }); + if (vi === 0) { + midiEvents.unshift({ + time: startTime, + type: 'meta', + subtype: 'timeSignature', + numerator: this.timeSignature.numerator, + denominator: this.timeSignature.denominator, + thirtyseconds: 8, + }, { time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }); + } + midiEvents.forEach((event) => { + event.ticks = Math.round(event.time - startTime); + }); + midiEvents.forEach((event, i) => { + event.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0); + }); + midiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' }); + return midiEvents; + }); + return { + header, + tracks, + }; + } +} +EditableMeasure.className = 'EditableMeasure'; +EditableMeasure.blackKeys = []; - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); +var PageLayoutMethod; +(function (PageLayoutMethod) { + PageLayoutMethod["ByLines"] = "ByLines"; + PageLayoutMethod["ByBlocks"] = "ByBlocks"; +})(PageLayoutMethod || (PageLayoutMethod = {})); +var TextType; +(function (TextType) { + TextType["Title"] = "Title"; + TextType["Author"] = "Author"; + TextType["TempoText"] = "TempoText"; + TextType["TempoNumeral"] = "TempoNumeral"; + TextType["TextualMark"] = "TextualMark"; + TextType["Lyric"] = "Lyric"; + TextType["Instrument"] = "Instrument"; + TextType["MeasureNumber"] = "MeasureNumber"; + TextType["Times"] = "Times"; + TextType["Alternation1"] = "Alternation1"; + TextType["Alternation2"] = "Alternation2"; + TextType["Chord"] = "Chord"; + TextType["PageMargin"] = "PageMargin"; + TextType["Other"] = "Other"; +})(TextType || (TextType = {})); - return clone; - }, +const BEAM_STATUS = { + [StemBeam.Open]: 1, + [StemBeam.Continue]: 0, + [StemBeam.Close]: -1, +}; +const evaluateMeasure = (measure) => { + if (!measure.regulated) + return undefined; + const eventMap = measure.eventMap; + const events = measure.events.length; + const validEvents = measure.voices.flat(1).length; + const warpedEvents = measure.events.filter((e) => e.timeWarp).length; + const warps = new Set(measure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp.numerator}/${e.timeWarp.denominator}`)); + const irregularWarps = new Set(warps); + irregularWarps.delete('2/3'); + const fractionalWarp = measure.voices.some((voice) => { + const events = voice.map((id) => eventMap[id]); + if (!events.some((e) => e.timeWarp)) + return false; + let denominator = 0; + let tickSum = 0; + let eventN = 0; + return events.some((event, i) => { + const d = event.timeWarp ? event.timeWarp.denominator : 0; + if (d !== denominator) { + if (denominator > 0 && (tickSum % denominator || eventN < 2)) + return true; + tickSum = 0; + eventN = 0; + } + denominator = d; + tickSum += event.duration; + ++eventN; + if (i === events.length - 1) { + if (denominator > 0 && (tickSum % denominator || eventN < 2)) + return true; + } + return false; + }); + }); + const tickOverlapped = measure.voices.some((voice) => { + const events = voice.map((id) => eventMap[id]); + let tick = 0; + return events.some((event) => { + if (event.grace) + return false; + if (event.tick < tick) + return true; + tick = event.tick + event.duration; + return false; + }); + }); + const fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration)); + const complicatedTimewarp = fractionalTimes.size > 1; + const literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature); + const sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration; + const inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]); + // Guard: detect corrupted event data in voices (e.g. missing division, NaN tick) + const corruptedVoiceEvent = inVoiceEvents.some((event) => !event || + !Number.isFinite(event.tick) || + !Number.isFinite(event.division) || + event.division < 0 || + !Number.isFinite(event.duration) || + event.duration <= 0); + const overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false); + const overDuration = measure.duration > literalDuration; + const graceInVoice = inVoiceEvents.some((event) => event.grace); + const graceN = measure.events.filter((e) => e.grace).length; + const graceDominant = graceN >= inVoiceEvents.length; + const irregularTick = inVoiceEvents.some((event) => { + let t = event.tick * 2 ** (event.division + 2); + if (event.timeWarp) + t *= event.timeWarp.denominator; + if (!Number.isFinite(t)) + return true; + const fragment = gcd(Math.round(t), WHOLE_DURATION); + //if (fragment < WHOLE_DURATION) + // console.log("irregularTick:", event.tick, fragment); + return fragment < WHOLE_DURATION; + }); + const beamStatus = measure.voices.map((voice) => voice.reduce(({ status, broken }, ei, evi) => { + const event = eventMap[ei]; + if (event.beam) { + // allow an open beam at beginning of a voice + if (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) + status = 1; + status += BEAM_STATUS[event.beam]; + broken = broken || !(status >= 0 && status <= 1); + } + else if (!event.rest) + broken = broken || status !== 0; + return { status, broken }; + }, { status: 0, broken: false })); + const beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1) + let spaceTime = 0; + let surplusTime = 0; + measure.voices.forEach((voice) => { + const eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0); + spaceTime += Math.max(0, measure.duration - eventDuration); + surplusTime += Math.max(0, eventDuration - measure.duration); + }); + spaceTime /= WHOLE_DURATION; + const nullEvents = measure.events.filter((e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)).length; + const fakeEvents = measure.events.filter((event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)).length; + const { voiceRugged } = measure.voices.flat(1).reduce((result, ei) => { + if (!result.voiceRugged) { + if (result.es.has(ei)) + return { voiceRugged: true, es: result.es }; + } + result.es.add(ei); + return result; + }, { voiceRugged: false, es: new Set() }); + const tickTwist = measure.tickTwist || 0; + const error = corruptedVoiceEvent || + tickTwist >= 1 || + tickOverlapped || + voiceRugged || + measure.tickRatesInStaves.some((rate) => rate < 0) || + nullEvents > 2 || + !measure.timeSignature || + overranged || + measure.duration > sigDuration || + measure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5); + const perfect = !error && + !overDuration && + tickTwist < 0.2 && + !fractionalWarp && + !irregularWarps.size && + !irregularTick && + !spaceTime && + !surplusTime && + !!measure.voices.length && + !beamBroken && + !graceInVoice && + !graceDominant && + (measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75)); + const fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice; + let expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2); + if (Number.isFinite(measure.estimatedDuration)) + expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration)); + const durationRate = measure.duration / expectDuration; + let qualityScore = 0; + if (measure.patched && !corruptedVoiceEvent) + qualityScore = 1; + else if (!error) { + const spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1); + let expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2); + if (Number.isFinite(measure.estimatedDuration)) + expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration)); + const durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0; + const warpsLoss = Math.tanh(irregularWarps.size); + qualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2); + } + return { + events, + validEvents, + voiceRugged, + nullEvents, + fakeEvents, + warpedEvents, + complicatedTimewarp, + spaceTime, + surplusTime, + durationRate, + beamBroken, + fractionalWarp, + irregularWarpsN: irregularWarps.size, + irregularTick, + tickTwist, + tickOverlapped, + graceInVoice, + graceN, + graceDominant, + perfect, + fine, + error, + qualityScore, + }; +}; - _minBufferSize: 0 - }); +var LayoutType; +(function (LayoutType) { + LayoutType["Ordinary"] = "ordinary"; + LayoutType["Full"] = "full"; + LayoutType["Conservative"] = "conservative"; + LayoutType["Once"] = "once"; +})(LayoutType || (LayoutType = {})); +const spreadMeasureSeq = (seq, type = LayoutType.Ordinary) => [].concat(...seq.map((layout) => layout.serialize(type))); +const seqToCode = (seq, { withBrackets = false } = {}) => { + //const code = seq.map(layout => layout.code).join(", "); + let code = ''; + let inRange = false; + for (let i = 0; i < seq.length; ++i) { + const middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout; + if (middle) { + if (!inRange) { + code += '..'; + inRange = true; + } + } + else { + if (i > 0 && !inRange) + code += ', '; + inRange = false; + code += seq[i].code; + } + } + return withBrackets ? `[${code}]` : code; +}; +class SingleMLayout extends SimpleClass { + static from(measure) { + const layout = new SingleMLayout(); + layout.measure = measure; + return layout; + } + constructor(data = undefined) { + super(); + this.assign(data); + } + serialize() { + return [this.measure]; + } + get seq() { + return [this]; + } + get code() { + return this.measure.toString(); + } +} +SingleMLayout.className = 'SingleMLayout'; +class BlockMLayout extends SimpleClass { + static trimSeq(seq) { + const seq2 = []; + for (const layout of seq) { + if (layout instanceof BlockMLayout) { + for (const sub of layout.seq) + seq2.push(sub); + } + else + seq2.push(layout); + } + // reduce duplicated or backwards single measures + const seq3 = []; + let measure = null; + for (const layout of seq2) { + if (layout instanceof SingleMLayout) { + if (layout.measure > measure) { + seq3.push(layout); + measure = layout.measure; + } + } + else + seq3.push(layout); + } + return seq3; + } + static fromSeq(seq) { + const layout = new BlockMLayout(); + layout.seq = BlockMLayout.trimSeq(seq); + return layout; + } + constructor(data = undefined) { + super(); + this.assign(data); + } + serialize(type) { + return spreadMeasureSeq(this.seq, type); + } + get code() { + return seqToCode(this.seq, { withBrackets: true }); + } +} +BlockMLayout.className = 'BlockMLayout'; +class VoltaMLayout extends SimpleClass { + constructor(data = undefined) { + super(); + this.assign(data); + } + serialize(type) { + const bodySeq = spreadMeasureSeq(this.body); + if (this.alternates) { + const alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq)); + const lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1]; + switch (type) { + case LayoutType.Ordinary: + return bodySeq.concat(...alternateSeqs); + case LayoutType.Conservative: + case LayoutType.Full: { + const priorSeq = [].concat(...Array(this.times - 1) + .fill(null) + .map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])); + return [...priorSeq, ...bodySeq, ...lastAlternateSeq]; + } + case LayoutType.Once: + return [...bodySeq, ...lastAlternateSeq]; + } + } + else { + switch (type) { + case LayoutType.Ordinary: + case LayoutType.Conservative: + case LayoutType.Once: + return bodySeq; + case LayoutType.Full: + return [].concat(...Array(this.times) + .fill(null) + .map(() => bodySeq)); + } + } + console.warn('the current case not handled:', type, this); + } + get seq() { + const alternates = this.alternates ? this.alternates[this.alternates.length - 1] : []; + return [...this.body, ...alternates]; + } + get code() { + const body = seqToCode(this.body, { withBrackets: true }); + let code = `${this.times}*${body}`; + if (this.alternates) + code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}'; + return code; + } +} +VoltaMLayout.className = 'VoltaMLayout'; +class ABAMLayout extends SimpleClass { + constructor(data = undefined) { + super(); + this.assign(data); + } + serialize(type) { + const seqA = this.main.serialize(type); + const seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once); + const seqB = spreadMeasureSeq(this.rest, type); + switch (type) { + case LayoutType.Ordinary: // A B + return [...seqA, ...seqB]; + case LayoutType.Once: // B A' + return [...seqB, ...seqA_]; + case LayoutType.Conservative: // A B A' + case LayoutType.Full: // A B A' + return [...seqA, ...seqB, ...seqA_]; + default: + console.warn('the current case not handled:', type, this); + } + } + get seq() { + return [this.main, ...this.rest]; + } + get code() { + return '<' + this.main.code + ', ' + seqToCode(this.rest) + '>'; + } +} +ABAMLayout.className = 'ABAMLayout'; - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), +var measureLayout = /*#__PURE__*/Object.freeze({ + __proto__: null, + get LayoutType () { return LayoutType; }, + SingleMLayout: SingleMLayout, + BlockMLayout: BlockMLayout, + VoltaMLayout: VoltaMLayout, + ABAMLayout: ABAMLayout +}); - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); +// @ts-nocheck +/* parser generated by jison 0.4.18 */ +/* + Returns a Parser object of the following structure: - // Set initial values - this.reset(); - }, + Parser: { + yy: {} + } - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); + Parser.prototype: { + yy: {}, + trace: function(), + symbols_: {associative list: name ==> number}, + terminals_: {associative list: number ==> name}, + productions_: [...], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), + table: [...], + defaultActions: {...}, + parseError: function(str, hash), + parse: function(input), - // Perform concrete-hasher logic - this._doReset(); - }, + lexer: { + EOF: 1, + parseError: function(str, hash), + setInput: function(input), + input: function(), + unput: function(str), + more: function(), + less: function(n), + pastInput: function(), + upcomingInput: function(), + showPosition: function(), + test_match: function(regex_match_array, rule_index), + next: function(), + lex: function(), + begin: function(condition), + popState: function(), + _currentRules: function(), + topState: function(), + pushState: function(condition), - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); + options: { + ranges: boolean (optional: true ==> token location info will include a .range[] member) + flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) + backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) + }, - // Update the hash - this._process(); + performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), + rules: [...], + conditions: {associative list: name ==> set}, + } + } - // Chainable - return this; - }, - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } + token location info (@$, _$, etc.): { + first_line: n, + last_line: n, + first_column: n, + last_column: n, + range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) + } - // Perform concrete-hasher logic - var hash = this._doFinalize(); - return hash; - }, + the parseError function receives a 'hash' object with these members for lexer and parser errors: { + text: (matched text) + token: (the produced terminal token, if any) + line: (yylineno) + } + while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { + loc: (yylloc) + expected: (string describing the set of expected tokens) + recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) + } +*/ +var parser$1 = (function () { + var o = function (k, v, o, l) { + for (o = o || {}, l = k.length; l--; o[k[l]] = v) + ; + return o; + }, $V0 = [1, 13], $V1 = [1, 16], $V2 = [1, 15], $V3 = [1, 26], $V4 = [1, 29], $V5 = [1, 28], $V6 = [1, 30], $V7 = [5, 13, 22, 27, 29], $V8 = [2, 15], $V9 = [1, 32], $Va = [5, 14, 21, 22, 27, 28, 29]; + var parser = { + trace: function trace() { }, + yy: {}, + symbols_: { + error: 2, + start_symbol: 3, + measure_layout: 4, + EOF: 5, + index_wise_measure_layout: 6, + 'i:': 7, + 's:': 8, + segment_wise_measure_layout: 9, + iw_sequence: 10, + iw_item: 11, + range: 12, + ',': 13, + UNSIGNED: 14, + '..': 15, + single: 16, + iw_block_item: 17, + iw_volta: 18, + iw_aba: 19, + iw_block: 20, + '[': 21, + ']': 22, + '*': 23, + iw_optional_alternates: 24, + iw_alternates: 25, + '{': 26, + '}': 27, + '<': 28, + '>': 29, + sw_sequence: 30, + sw_item: 31, + segment: 32, + sw_block_item: 33, + sw_volta: 34, + sw_aba: 35, + sw_block: 36, + sw_optional_alternates: 37, + sw_alternates: 38, + $accept: 0, + $end: 1, + }, + terminals_: { + 2: 'error', + 5: 'EOF', + 7: 'i:', + 8: 's:', + 13: ',', + 14: 'UNSIGNED', + 15: '..', + 21: '[', + 22: ']', + 23: '*', + 26: '{', + 27: '}', + 28: '<', + 29: '>', + }, + productions_: [ + 0, + [3, 2], + [4, 1], + [4, 2], + [4, 2], + [6, 1], + [10, 1], + [10, 1], + [10, 3], + [10, 3], + [12, 3], + [11, 1], + [11, 1], + [11, 1], + [11, 1], + [16, 1], + [17, 1], + [20, 3], + [18, 4], + [24, 0], + [24, 1], + [25, 3], + [19, 5], + [9, 1], + [30, 1], + [30, 2], + [31, 1], + [31, 1], + [31, 1], + [31, 1], + [32, 1], + [33, 1], + [36, 3], + [34, 4], + [37, 0], + [37, 1], + [38, 3], + [35, 4], + ], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + /* this == yyval */ + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + this.$ = root(null, $$[$0]); + break; + case 3: + this.$ = root('index-wise', $$[$0]); + break; + case 4: + this.$ = root('segment-wise', serialize($$[$0])); + break; + case 5: + case 23: + if ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') + this.$ = $$[$0][0]; + else + this.$ = blockLayout($$[$0]); + break; + case 6: + case 24: + this.$ = [$$[$0]]; + break; + case 7: + case 11: + case 12: + case 13: + case 14: + case 20: + case 27: + case 28: + case 29: + case 35: + this.$ = $$[$0]; + break; + case 8: + this.$ = [...$$[$0 - 2], $$[$0]]; + break; + case 9: + this.$ = [...$$[$0 - 2], ...$$[$0]]; + break; + case 10: + this.$ = range($$[$0 - 2], $$[$0]); + break; + case 15: + this.$ = singleLayout($$[$0]); + break; + case 16: + case 31: + this.$ = blockLayout($$[$0]); + break; + case 17: + case 32: + this.$ = $$[$0 - 1]; + break; + case 18: + case 33: + this.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]); + break; + case 19: + case 34: + this.$ = null; + break; + case 21: + case 36: + this.$ = alternates($$[$0 - 1]); + break; + case 22: + this.$ = abaBlock($$[$0 - 3], $$[$0 - 1]); + break; + case 25: + this.$ = [...$$[$0 - 1], $$[$0]]; + break; + case 26: + this.$ = blockLayout([$$[$0]]); + break; + case 30: + this.$ = segment($$[$0]); + break; + case 37: + this.$ = abaBlock($$[$0 - 2], $$[$0 - 1]); + break; + } + }, + table: [ + { 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, + { 1: [3] }, + { 5: [1, 17] }, + { 5: [2, 2] }, + { 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, + { 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + { 5: [2, 5], 13: $V6 }, + o($V7, [2, 6]), + o($V7, [2, 7]), + o($V7, [2, 11]), + o($V7, [2, 12]), + o($V7, [2, 13]), + o($V7, [2, 14]), + o($V7, $V8, { 15: [1, 31], 23: $V9 }), + o($V7, [2, 16]), + { 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, + { 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, + { 1: [2, 1] }, + { 5: [2, 3] }, + { 5: [2, 4] }, + { 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + o($Va, [2, 24]), + o($Va, [2, 26]), + o($Va, [2, 27]), + o($Va, [2, 28]), + o($Va, [2, 29]), + o($Va, [2, 30], { 23: [1, 37] }), + o($Va, [2, 31]), + { 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + { 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + { 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, + { 14: [1, 42] }, + { 20: 43, 21: $V1 }, + { 13: [1, 44] }, + { 13: $V8, 23: $V9 }, + { 13: $V6, 22: [1, 45] }, + o($Va, [2, 25]), + { 21: $V4, 36: 46 }, + { 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + { 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + o($V7, [2, 8]), + o($V7, [2, 9]), + o($V7, [2, 10]), + o($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }), + { 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, + o([5, 13, 22, 26, 27, 29], [2, 17]), + o($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }), + { 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + o([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]), + o($V7, [2, 18]), + o($V7, [2, 20]), + { 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 }, + { 13: $V6, 29: [1, 58] }, + o($Va, [2, 33]), + o($Va, [2, 35]), + { 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + o($Va, [2, 37]), + { 13: $V6, 27: [1, 60] }, + o($V7, [2, 22]), + { 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 }, + o($V7, [2, 21]), + o($Va, [2, 36]), + ], + defaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } + else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer; + sharedState.yy.parser = this; + if (typeof lexer.yylloc == 'undefined') { + lexer.yylloc = {}; + } + var yyloc = lexer.yylloc; + lstack.push(yyloc); + var ranges = lexer.options && lexer.options.ranges; + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError; + } + else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + var lex = function () { + var token; + token = lexer.lex() || EOF; + if (typeof token !== 'number') { + token = self.symbols_[token] || token; + } + return token; + }; + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } + else { + if (symbol === null || typeof symbol == 'undefined') { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = ''; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer.showPosition) { + errStr = + 'Parse error on line ' + + (yylineno + 1) + + ':\n' + + lexer.showPosition() + + '\nExpecting ' + + expected.join(', ') + + ", got '" + + (this.terminals_[symbol] || symbol) + + "'"; + } + else { + errStr = + 'Parse error on line ' + + (yylineno + 1) + + ': Unexpected ' + + (symbol == EOF ? 'end of input' : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: lexer.yylineno, + loc: yyloc, + expected: expected, + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer.yytext); + lstack.push(lexer.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer.yyleng; + yytext = lexer.yytext; + yylineno = lexer.yylineno; + yyloc = lexer.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column, + }; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); + if (typeof r !== 'undefined') { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + }, + }; + const root = (type, data) => ({ __prototype: 'MesaureLayout', type, data }); + const singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) }); + const blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq }); + const voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates }); + const abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest }); + const segment = (n) => ({ segment: true, length: Number(n) }); + const alternates = (items) => items.map((item) => { + if (item.__prototype === 'BlockMLayout') + return item.seq; + return [item]; + }); + const range = (start, end) => { + start = Number(start); + end = Number(end); + if (!(end >= start)) + throw new Error(`invalid measure range: ${start}..${end}`); + return Array(end + 1 - start) + .fill(0) + .map((_, i) => singleLayout(start + i)); + }; + const serializeSeq = (item, options) => { + if (item.segment) { + const index = options.index; + options.index += item.length; + return Array(item.length) + .fill(0) + .map((_, i) => singleLayout(index + i)); + } + return [serialize(item, options)]; + }; + const serialize = (item, options = { index: 1 }) => { + const speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options))); + switch (item.__prototype) { + case 'BlockMLayout': + item.seq = speard(item.seq); + break; + case 'VoltaMLayout': + item.body = speard(item.body); + item.alternates = item.alternates && item.alternates.map(speard); + break; + case 'ABAMLayout': + item.main = serialize(item.main, options); + item.rest = speard(item.rest); + break; + } + return item; + }; + /* generated by jison-lex 0.3.4 */ + var lexer = (function () { + var lexer = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } + else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function (input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0, + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } + else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len, + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function () { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } + else { + return this.parseError('Lexical error on line ' + + (this.yylineno + 1) + + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + + this.showPosition(), { + text: '', + token: null, + line: this.yylineno, + }); + } + return this; + }, + // retain first n characters of the match + less: function (n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ''); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ''); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join('-'); + return pre + this.upcomingInput() + '\n' + c + '^'; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function (match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + // save context + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column, + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done, + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length, + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, (this.offset += this.yyleng)]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } + else if (this._backtrack) { + // recover context + for (var k in backup) { + this[k] = backup[k]; + } + return false; // rule action called reject() implying the next rule should be tested instead. + } + return false; + }, + // return next match in input + next: function () { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } + else if (this._backtrack) { + match = false; + continue; // rule action called reject() implying a rule MISmatch. + } + else { + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + } + else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + if (this._input === '') { + return this.EOF; + } + else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno, + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } + else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } + else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } + else { + return this.conditions['INITIAL'].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } + else { + return 'INITIAL'; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + return yy_.yytext; + case 2: + return 14; + case 3: + return yy_.yytext; + case 4: + return yy_.yytext; + case 5: + return 5; + } + }, + rules: [/^(?:\s+)/, /^(?:([*,\[\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\.\.)/, /^(?:$)/], + conditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } }, + }; + return lexer; + })(); + parser.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser; + parser.Parser = Parser; + return new Parser(); +})(); +parser$1.Parser; +var parse$1 = function () { + return parser$1.parse.apply(parser$1, arguments); +}; +var grammar$1 = { parser: parser$1, Parser: parser$1.Parser, parse: parse$1 }; - blockSize: 512/32, +const parseCode$1 = (code) => { + const raw = grammar$1.parse(code); + if (raw?.data) + return recoverJSON(raw.data, measureLayout); + return null; +}; - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, +var StaffGroupType; +(function (StaffGroupType) { + StaffGroupType[StaffGroupType["Default"] = 0] = "Default"; + StaffGroupType[StaffGroupType["Brace"] = 1] = "Brace"; + StaffGroupType[StaffGroupType["Bracket"] = 2] = "Bracket"; + StaffGroupType[StaffGroupType["Square"] = 3] = "Square"; +})(StaffGroupType || (StaffGroupType = {})); +var StaffConjunctionType; +(function (StaffConjunctionType) { + StaffConjunctionType[StaffConjunctionType["Blank"] = 0] = "Blank"; + StaffConjunctionType[StaffConjunctionType["Dashed"] = 1] = "Dashed"; + StaffConjunctionType[StaffConjunctionType["Solid"] = 2] = "Solid"; +})(StaffConjunctionType || (StaffConjunctionType = {})); +const singleGroup = (id) => ({ type: StaffGroupType.Default, staff: id }); +const BOUNDS_TO_GROUPTYPE = { + '{': StaffGroupType.Brace, + '}': StaffGroupType.Brace, + '<': StaffGroupType.Bracket, + '>': StaffGroupType.Bracket, + '[': StaffGroupType.Square, + ']': StaffGroupType.Square, +}; +const OPEN_BOUNDS = '{<['; +const CLOSE_BOUNDS = '}>]'; +const CONJUNCTIONS_MAP = { + ',': StaffConjunctionType.Blank, + '-': StaffConjunctionType.Solid, + '.': StaffConjunctionType.Dashed, +}; +const bracketCode = (type, partial = false) => { + if (type === StaffGroupType.Default) + return (inner) => inner; + if (partial) { + switch (type) { + case StaffGroupType.Brace: + return (inner) => `{${inner}`; + case StaffGroupType.Bracket: + return (inner) => `<${inner}`; + case StaffGroupType.Square: + return (inner) => `[${inner}`; + default: + return (inner) => inner; + } + } + switch (type) { + case StaffGroupType.Brace: + return (inner) => `{${inner}}`; + case StaffGroupType.Bracket: + return (inner) => `<${inner}>`; + case StaffGroupType.Square: + return (inner) => `[${inner}]`; + default: + return (inner) => inner; + } +}; +const randomB64 = () => { + const code = btoa(Math.random().toString().substr(2)).replace(/=/g, ''); + return code.split('').reverse().slice(0, 6).join(''); +}; +const makeUniqueName = (set, index, prefix) => { + let name = prefix; + if (!name) + name = index.toString(); + else if (set.has(name)) + name += '_' + index.toString(); + while (set.has(name)) + name += '_' + randomB64(); + return name; +}; +const makeGroupsFromRaw = (parent, seq) => { + let remains = seq; + while (remains.length) { + const word = remains.shift(); + const bound = BOUNDS_TO_GROUPTYPE[word]; + if (bound) { + if (CLOSE_BOUNDS.includes(word) && bound === parent.type) + break; + if (OPEN_BOUNDS.includes(word)) { + const group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 }; + remains = makeGroupsFromRaw(group, remains); + parent.subs = parent.subs || []; + parent.subs.push(group); + } + } + else { + parent.subs = parent.subs || []; + parent.subs.push(singleGroup(word)); + } + } + while (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) { + const sub = parent.subs[0]; + parent.type = sub.type; + parent.subs = sub.subs; + parent.staff = sub.staff; + parent.level = sub.level; + } + while (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) { + const sub = parent.subs[0]; + parent.subs = sub.subs; + parent.staff = sub.staff; + } + parent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff); + return remains; +}; +const groupHead = (group) => { + if (group.staff) + return group.staff; + else if (group.subs) + return groupHead(group.subs[0]); +}; +const groupTail = (group) => { + if (group.staff) + return group.staff; + else if (group.subs) + return groupTail(group.subs[group.subs.length - 1]); +}; +const groupKey = (group) => { + if (group.staff) + return group.staff; + else if (group.subs) + return `${groupHead(group)}-${groupTail(group)}`; +}; +const groupDict = (group, dict) => { + dict[groupKey(group)] = group; + if (group.subs) + group.subs.forEach((sub) => groupDict(sub, dict)); +}; +class StaffLayout { + constructor(raw) { + // make unique ids + const ids = new Set(); + raw.forEach((item, i) => { + item.id = makeUniqueName(ids, i + 1, item.id); + ids.add(item.id); + }); + this.staffIds = raw.map((item) => item.id); + this.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank)); + // make groups + const seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds])); + this.group = { type: StaffGroupType.Default }; + makeGroupsFromRaw(this.group, seq); + const dict = {}; + groupDict(this.group, dict); + this.groups = Object.entries(dict).map(([key, group]) => { + let ids = key.split('-'); + if (ids.length === 1) + ids = [ids[0], ids[0]]; + const range = ids.map((id) => this.staffIds.indexOf(id)); + return { + group, + range, + key, + }; + }); + this.maskCache = new Map(); + } + get stavesCount() { + if (!this.staffIds) + return null; + return this.staffIds.length; + } + get partGroups() { + const grands = this.groups.filter((g) => g.group.grand); + const parts = this.groups.filter((g) => { + if (g.group.grand) + return true; + if (g.range[0] === g.range[1]) { + const index = g.range[0]; + return !grands.some((g) => g.range[0] <= index && g.range[1] >= index); + } + return false; + }); + return parts; + } + get standaloneGroups() { + const groups = []; + const collect = (group) => { + if (group.grand) + groups.push(group.subs.map((sub) => sub.staff)); + else if (group.staff) + groups.push([group.staff]); + else if (group.subs) + group.subs.forEach((sub) => collect(sub)); + }; + collect(this.group); + return groups; + } + conjunctionBetween(upStaff, downStaff) { + if (downStaff <= upStaff) + return null; + let con = StaffConjunctionType.Solid; + for (let i = upStaff; i < downStaff; i++) + con = Math.min(con, this.conjunctions[i]); + return con; + } + static makeMaskLayout(layout, mask) { + const staffIds = layout.staffIds.filter((_, i) => mask & (1 << i)); + if (staffIds.length === layout.staffIds.length) { + return { + staffIds: layout.staffIds, + conjunctions: layout.conjunctions, + groups: layout.groups, + }; + } + const groups = layout.groups + .map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g })) + .filter(({ ids }) => ids.length) + .map(({ ids, ...g }) => ({ + key: g.key, + group: g.group, + range: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])], + })); + const conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => { + const nextId = staffIds[i + 1]; + return layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId)); + }); + return { + staffIds, + conjunctions, + groups, + }; + } + mask(mask) { + if (!this.maskCache.get(mask)) + this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask)); + return this.maskCache.get(mask); + } + // {,} * 1,1 => {,} + // {,} * 1,x => { + // {,} * 0,x => + // {,} * 0,1 => {} + partialMaskCode(bits, withIds = false) { + const staffStatus = this.staffIds + .map((_, i) => (i < bits.length ? bits[i] : null)) + .reduce((status, x, i) => { + status[this.staffIds[i]] = x; + return status; + }, {}); + const joinGroup = (group) => { + if (group.staff) + return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null]; + const subs = group.subs.map((sub) => joinGroup(sub)); + const subStr = subs + .map((pair) => pair[0]) + .filter(Boolean) + .join(','); + const partial = subs.some(([_, partial]) => partial); + const code = subStr ? bracketCode(group.type, partial)(subStr) : null; + return [code, partial]; + }; + let [code] = joinGroup(this.group); + code = code || ''; + if (!withIds) + code = code.replace(/[_\w]+/g, ''); + return code; + } +} - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); +// @ts-nocheck +/* parser generated by jison 0.4.18 */ +/* + Returns a Parser object of the following structure: - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; + Parser: { + yy: {} + } - return C; - }(Math)); + Parser.prototype: { + yy: {}, + trace: function(), + symbols_: {associative list: name ==> number}, + terminals_: {associative list: number ==> name}, + productions_: [...], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), + table: [...], + defaultActions: {...}, + parseError: function(str, hash), + parse: function(input), + lexer: { + EOF: 1, + parseError: function(str, hash), + setInput: function(input), + input: function(), + unput: function(str), + more: function(), + less: function(n), + pastInput: function(), + upcomingInput: function(), + showPosition: function(), + test_match: function(regex_match_array, rule_index), + next: function(), + lex: function(), + begin: function(condition), + popState: function(), + _currentRules: function(), + topState: function(), + pushState: function(condition), - return CryptoJS; + options: { + ranges: boolean (optional: true ==> token location info will include a .range[] member) + flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) + backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) + }, -})); -}(core)); + performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), + rules: [...], + conditions: {associative list: name ==> set}, + } + } -(function (module, exports) { -(function (root, factory) { - { - // CommonJS - module.exports = factory(core.exports); - } -}(this, function (CryptoJS) { - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; + token location info (@$, _$, etc.): { + first_line: n, + last_line: n, + first_column: n, + last_column: n, + range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) + } - // Initialization and round constants tables - var H = []; - var K = []; - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } + the parseError function receives a 'hash' object with these members for lexer and parser errors: { + text: (matched text) + token: (the produced terminal token, if any) + line: (yylineno) + } + while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { + loc: (yylloc) + expected: (string describing the set of expected tokens) + recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) + } +*/ +var parser = (function () { + var o = function (k, v, o, l) { + for (o = o || {}, l = k.length; l--; o[k[l]] = v) + ; + return o; + }, $V0 = [1, 15], $V1 = [1, 16], $V2 = [1, 17], $V3 = [1, 11], $V4 = [1, 12], $V5 = [1, 13], $V6 = [1, 24], $V7 = [1, 25], $V8 = [1, 26], $V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24], $Va = [15, 16, 17, 21, 22, 23, 24], $Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24], $Vc = [5, 11, 12, 13, 21, 22, 23, 24]; + var parser = { + trace: function trace() { }, + yy: {}, + symbols_: { + error: 2, + start_symbol: 3, + staff_layout: 4, + EOF: 5, + seq: 6, + seq_id: 7, + seq_br: 8, + seq_con: 9, + bound_left: 10, + '<': 11, + '[': 12, + '{': 13, + bound_right: 14, + '>': 15, + ']': 16, + '}': 17, + bound_lefts: 18, + bound_rights: 19, + conjunction: 20, + '-': 21, + ',': 22, + '.': 23, + ID: 24, + seq_bl: 25, + $accept: 0, + $end: 1, + }, + terminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' }, + productions_: [ + 0, + [3, 2], + [4, 1], + [6, 0], + [6, 1], + [6, 1], + [6, 1], + [10, 1], + [10, 1], + [10, 1], + [14, 1], + [14, 1], + [14, 1], + [18, 1], + [18, 2], + [19, 1], + [19, 2], + [20, 1], + [20, 1], + [20, 1], + [7, 1], + [7, 2], + [7, 2], + [7, 2], + [7, 2], + [25, 1], + [25, 2], + [25, 2], + [25, 2], + [8, 2], + [8, 2], + [8, 2], + [9, 1], + [9, 2], + [9, 2], + [9, 2], + [9, 2], + ], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { + /* this == yyval */ + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + case 2: + $$[$0].next(); + this.$ = $$[$0].toJSON(); + break; + case 3: + this.$ = new Seq(); + break; + case 13: + case 15: + this.$ = [$$[$0]]; + break; + case 14: + case 16: + this.$ = [...$$[$0 - 1], $$[$0]]; + break; + case 20: + this.$ = new Seq(); + this.$.tip.i($$[$0]); + break; + case 21: + case 23: + $$[$0 - 1].next(); + $$[$0 - 1].tip.i($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 22: + case 24: + $$[$0 - 1].tip.i($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 25: + this.$ = new Seq(); + this.$.tip.bl($$[$0]); + break; + case 26: + case 27: + $$[$0 - 1].next(); + $$[$0 - 1].tip.bl($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 28: + $$[$0 - 1].tip.bl($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 29: + case 30: + case 31: + $$[$0 - 1].tip.br($$[$0]); + this.$ = $$[$0 - 1]; + break; + case 32: + this.$ = new Seq(); + this.$.tip.con($$[$0]); + this.$.next(); + break; + case 33: + case 34: + case 35: + case 36: + $$[$0 - 1].tip.con($$[$0]); + $$[$0 - 1].next(); + this.$ = $$[$0 - 1]; + break; + } + }, + table: [ + { 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 }, + { 1: [3] }, + { 5: [1, 18] }, + { 5: [2, 2] }, + { 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] }, + { 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] }, + { 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] }, + o($V9, [2, 20]), + { 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] }, + o($V9, [2, 32]), + o($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), + o($V9, [2, 17]), + o($V9, [2, 18]), + o($V9, [2, 19]), + o($Vb, [2, 13]), + o($Vb, [2, 7]), + o($Vb, [2, 8]), + o($Vb, [2, 9]), + { 1: [2, 1] }, + o($V9, [2, 21]), + o($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }), + o($V9, [2, 33]), + o($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), + o($V9, [2, 15]), + o($V9, [2, 10]), + o($V9, [2, 11]), + o($V9, [2, 12]), + o($V9, [2, 23]), + o($V9, [2, 35]), + o($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), + o($V9, [2, 24]), + o($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }), + o($V9, [2, 36]), + o($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }), + o($V9, [2, 22]), + o($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }), + o($V9, [2, 34]), + o($Vb, [2, 14]), + o($V9, [2, 16]), + ], + defaultActions: { 3: [2, 2], 18: [2, 1] }, + parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } + else { + var error = new Error(str); + error.hash = hash; + throw error; + } + }, + parse: function parse(input) { + var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1; + var args = lstack.slice.call(arguments, 1); + var lexer = Object.create(this.lexer); + var sharedState = { yy: {} }; + for (var k in this.yy) { + if (Object.prototype.hasOwnProperty.call(this.yy, k)) { + sharedState.yy[k] = this.yy[k]; + } + } + lexer.setInput(input, sharedState.yy); + sharedState.yy.lexer = lexer; + sharedState.yy.parser = this; + if (typeof lexer.yylloc == 'undefined') { + lexer.yylloc = {}; + } + var yyloc = lexer.yylloc; + lstack.push(yyloc); + var ranges = lexer.options && lexer.options.ranges; + if (typeof sharedState.yy.parseError === 'function') { + this.parseError = sharedState.yy.parseError; + } + else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + var lex = function () { + var token; + token = lexer.lex() || EOF; + if (typeof token !== 'number') { + token = self.symbols_[token] || token; + } + return token; + }; + var symbol, state, action, r, yyval = {}, p, len, newState, expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } + else { + if (symbol === null || typeof symbol == 'undefined') { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = ''; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'" + this.terminals_[p] + "'"); + } + } + if (lexer.showPosition) { + errStr = + 'Parse error on line ' + + (yylineno + 1) + + ':\n' + + lexer.showPosition() + + '\nExpecting ' + + expected.join(', ') + + ", got '" + + (this.terminals_[symbol] || symbol) + + "'"; + } + else { + errStr = + 'Parse error on line ' + + (yylineno + 1) + + ': Unexpected ' + + (symbol == EOF ? 'end of input' : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: lexer.yylineno, + loc: yyloc, + expected: expected, + }); + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(lexer.yytext); + lstack.push(lexer.yylloc); + stack.push(action[1]); + symbol = null; + { + yyleng = lexer.yyleng; + yytext = lexer.yytext; + yylineno = lexer.yylineno; + yyloc = lexer.yylloc; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { + first_line: lstack[lstack.length - (len || 1)].first_line, + last_line: lstack[lstack.length - 1].last_line, + first_column: lstack[lstack.length - (len || 1)].first_column, + last_column: lstack[lstack.length - 1].last_column, + }; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args)); + if (typeof r !== 'undefined') { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + }, + }; + class Item { + constructor() { + this.id = null; + this.leftBounds = []; + this.rightBounds = []; + this.conjunction = null; + } + i(id) { + this.id = id; + return this; + } + bl(leftBounds) { + this.leftBounds = leftBounds; + return this; + } + br(rightBounds) { + this.rightBounds = rightBounds; + return this; + } + con(conjunction) { + this.conjunction = conjunction; + return this; + } + } + class Seq { + constructor() { + this.body = []; + this.tip = new Item(); + } + next() { + this.body.push(this.tip); + this.tip = new Item(); + return this; + } + toJSON() { + return this.body; + } + } + /* generated by jison-lex 0.3.4 */ + var lexer = (function () { + var lexer = { + EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } + else { + throw new Error(str); + } + }, + // resets the lexer, sets new input + setInput: function (input, yy) { + this.yy = yy || this.yy || {}; + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0, + }; + if (this.options.ranges) { + this.yylloc.range = [0, 0]; + } + this.offset = 0; + return this; + }, + // consumes and returns one char from the input + input: function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } + else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + this._input = this._input.slice(1); + return ch; + }, + // unshifts one char (or a string) into the input + unput: function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines + ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length + : this.yylloc.first_column - len, + }; + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + // When called from action, caches matched text and appends it on next action + more: function () { + this._more = true; + return this; + }, + // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. + reject: function () { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } + else { + return this.parseError('Lexical error on line ' + + (this.yylineno + 1) + + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + + this.showPosition(), { + text: '', + token: null, + line: this.yylineno, + }); + } + return this; + }, + // retain first n characters of the match + less: function (n) { + this.unput(this.match.slice(n)); + }, + // displays already matched input, i.e. for error messages + pastInput: function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ''); + }, + // displays upcoming input, i.e. for error messages + upcomingInput: function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ''); + }, + // displays the character position where the lexing error occurred, i.e. for error messages + showPosition: function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join('-'); + return pre + this.upcomingInput() + '\n' + c + '^'; + }, + // test the lexed token: return FALSE when not a match, otherwise return token + test_match: function (match, indexed_rule) { + var token, lines, backup; + if (this.options.backtrack_lexer) { + // save context + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column, + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done, + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines + ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length + : this.yylloc.last_column + match[0].length, + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, (this.offset += this.yyleng)]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } + else if (this._backtrack) { + // recover context + for (var k in backup) { + this[k] = backup[k]; + } + return false; // rule action called reject() implying the next rule should be tested instead. + } + return false; + }, + // return next match in input + next: function () { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + var token, match, tempMatch, index; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } + else if (this._backtrack) { + match = false; + continue; // rule action called reject() implying a rule MISmatch. + } + else { + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + } + else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + if (this._input === '') { + return this.EOF; + } + else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: '', + token: null, + line: this.yylineno, + }); + } + }, + // return next match that has a token + lex: function lex() { + var r = this.next(); + if (r) { + return r; + } + else { + return this.lex(); + } + }, + // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + // pop the previously active lexer condition state off the condition stack + popState: function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } + else { + return this.conditionStack[0]; + } + }, + // produce the lexer rule set which is active for the currently active lexer condition state + _currentRules: function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } + else { + return this.conditions['INITIAL'].rules; + } + }, + // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available + topState: function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } + else { + return 'INITIAL'; + } + }, + // alias for begin(condition) + pushState: function pushState(condition) { + this.begin(condition); + }, + // return the number of states currently on the stack + stateStackSize: function stateStackSize() { + return this.conditionStack.length; + }, + options: {}, + performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + switch ($avoiding_name_collisions) { + case 0: + break; + case 1: + return yy_.yytext; + case 2: + return 24; + case 3: + return 5; + } + }, + rules: [/^(?:\s+)/, /^(?:([-,.\[\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/], + conditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } }, + }; + return lexer; + })(); + parser.lexer = lexer; + function Parser() { + this.yy = {}; + } + Parser.prototype = parser; + parser.Parser = Parser; + return new Parser(); +})(); +parser.Parser; +var parse = function () { + return parser.parse.apply(parser, arguments); +}; +var grammar = { parser: parser, Parser: parser.Parser, parse: parse }; - return true; - } +const parseCode = (code) => { + const raw = grammar.parse(code); + return new StaffLayout(raw); +}; - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } +//import { staffSvg } from "@kelvinnxu/lotus"; +class SemanticGraph extends SimpleClass { + constructor(data) { + super(); + super.assign(data); + } + /*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph { + const tokens = [].concat(...staff.measures.map(measure => measure.tokens)); - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + const voltaRightXs = []; - nPrime++; - } + const points = []; + tokens.forEach(token => { + const def = hashTable[token.hash]; - n++; - } - }()); + if (token.glyph) { + const glyph = token.glyph as string; + let semantic = null; - // Reusable object - var W = []; + const isKey = /^\\key/.test(token.source) || token.is("KEY"); + let { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 }; + if (token.scale2) { + cx *= token.scale2.x; + cy *= token.scale2.y; + } - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, + let x = token.x + cx; + const y = token.y + cy; - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; + switch (glyph) { + case "rests.0": + if (/^R/.test(token.source)) + semantic = "Rest0W"; + else + semantic = "Rest0"; - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; + break; + case "accidentals.flat": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); + break; + case "accidentals.natural": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); + break; + case "accidentals.sharp": + semantic = glyphSemanticMapping[glyph]; + if (isKey) { + points.push({ + semantic: SemanticType.KeyAcc, + x, + y, + }); + } - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } + break; + case "dots.dot": + if (token.is("VOLTA")) { + x += 0.24; // dot glyph center X offset + if (token.is("LEFT")) + semantic = SemanticType.VoltaLeft; + else if (token.is("RIGHT")) { + voltaRightXs.push(x); + semantic = SemanticType.VoltaRight; + } + } + else + semantic = "Dot"; - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); + break; + case "zero": + case "one": + case "two": + case "three": + case "four": + case "five": + case "six": + case "seven": + case "eight": + case "nine": { + const upper = glyph[0].toUpperCase() + glyph.substr(1); + semantic = token.is("TIME_SIG") ? "Timesig" + upper : upper; + } - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + break; + default: + semantic = glyphSemanticMapping[glyph]; + } - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; + if (semantic) { + points.push({ + semantic, + x, + y, + }); + } - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } + if (token.is("TEMPO_NOTEHEAD")) { + points.push({ + semantic: SemanticType.TempoNotehead, + x, + y, + }); + } - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, + // grace noteheads + if (token.is("NOTEHEAD") && Number.isFinite(token.scale) && token.scale < 0.75) { + points.push({ + semantic: SemanticType.GraceNotehead, + x, + y, + }); + } + } - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; + // semantic from token symbol + let semantic = null; + const cx = 0; + let cy = 0; + if (token.is("OCTAVE")) { + if (token.is("_8")) { + semantic = SemanticType.OctaveShift8; + cy = token.is("B") ? -0.7512 : -0.7256; + } + else if (token.is("CLOSE")) { + semantic = SemanticType.OctaveShift0; + cy = 0; + } + } + else if (/^flags/.test(token.glyph)) { + let direction = 0; + if (/\.u\d/.test(token.glyph)) + direction = 1; + if (/\.d\d/.test(token.glyph)) + direction = -1; + if (direction) { + const [n] = token.glyph.match(/\d+/); + const flagCount = Number(n) - 2; + //console.log("flags:", token.glyph, flagCount); + for (let i = 0; i < flagCount; ++i) { + const y = token.y + (i + 0.5) * direction; + points.push({ + semantic: SemanticType.Flag3, + x: token.x, + y, + }); + //console.log("flags.1:", token.x, y); + } + } + } + else if (token.is("SLUR")) { + const d = def && def.d; + if (d) { + const numbers = d.match(/-?[\d.]+/g).map(Number); + //console.log("slur:", numbers); + const x1 = token.x + numbers[0]; + const y1 = token.y + numbers[1]; + const x2 = token.x + numbers[6]; + const y2 = token.y + numbers[7]; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; + points.push({ + semantic: SemanticType.SlurBegin, + x: x1, + y: y1, + }); + points.push({ + semantic: SemanticType.SlurEnd, + x: x2, + y: y2, + }); + } + } + else if (token.is("NOTE_STEM")) { + points.push({ + semantic: SemanticType.vline_Stem, + x: token.x + def.width / 2, + y: token.y, + extension: { + y1: token.y, + y2: token.y + token.height, + }, + }); + } + else if (token.is("TEXT") || token.is("CHORD_TEXT")) { + if (/\S/.test(token.text)) { + // NOTE: text rect computation is delayed to sheet rendering + points.push({ + semantic: SemanticType.rect_Text, + x: token.x, + y: token.y, + extension: { + index: token.index, + text: token.text, + }, + }); + } + } - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; + if (semantic) { + points.push({ + semantic, + x: token.x + cx, + y: token.y + cy, + }); + } + }); - // Hash final blocks - this._process(); + // beams + const stems = tokens.filter(token => token.is("NOTE_STEM")).map(stem => ({ + x: stem.x + stem.width / 2, + y1: stem.y, + y2: stem.y + stem.height, + })); + const beams = tokens.filter(token => token.is("NOTETAIL") && token.is("JOINT")) + .map(beam => { + const def = hashTable[beam.hash]; + const points = def && def.points; + if (points) { + const floats = points.split(" ").map(Number); + const x1 = beam.x + floats[4]; + const x2 = beam.x + floats[0]; + const y1 = beam.y + (floats[5] + floats[7]) / 2; + const y2 = beam.y + (floats[1] + floats[3]) / 2; + const k = (y2 - y1) / (x2 - x1); - // Return final computed hash - return this._hash; - }, + return { x1, x2, y1, y2, k, capital: beam.is("CAPITAL_BEAM") }; + } - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); + return null; + }).filter(Boolean); + //console.log("beams:", beams); + beams.forEach(beam => { + const innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2); + //console.log("innerStems:", beam, innerStems); - return clone; - } - }); + let lines = 0; + innerStems.forEach(stem => { + const beamY = beam.y1 + (stem.x - beam.x1) * beam.k; + //console.log("beamY:", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2))); + if (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) { + points.push({ + semantic: SemanticType.Flag3, + x: stem.x, + y: beamY, + }); - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); + ++lines; - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); + // beam semantics + if (beam.capital) { + let semantic = SemanticType.BeamContinue; + if (Math.abs(stem.x - beam.x1) < 0.2) + semantic = SemanticType.BeamLeft; + else if (Math.abs(stem.x - beam.x2) < 0.2) + semantic = SemanticType.BeamRight; + points.push({ + semantic, + x: stem.x, + y: beamY, + }); + } + } + }); + if (!lines) + console.warn("empty beam:", beam, innerStems, stems); + //else if (lines < 2) + // console.debug("single beam:", beam, innerStems, stems); + }); - return CryptoJS.SHA256; + // wedges (crescendo & decrescendo) + const crescendos = tokens.filter(token => token.is("WEDGE CRESCENDO TOP")); + const crescendoBottoms = tokens.filter(token => token.is("WEDGE CRESCENDO BOTTOM")); + const decrescendos = tokens.filter(token => token.is("WEDGE DECRESCENDO TOP")); + const decrescendoBottoms = tokens.filter(token => token.is("WEDGE DECRESCENDO BOTTOM")); + crescendos.forEach(line => { + const partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06); -})); -}(sha256)); + if (partner) { + points.push({ + semantic: SemanticType.CrescendoBegin, + x: line.x, + y: line.y, + }); + } + //else + // console.log("unpaired crescendo:", line, crescendoBottoms); + points.push({ + semantic: SemanticType.CrescendoEnd, + x: line.x + line.target.x, + y: line.y + line.target.y, + }); + }); + decrescendos.forEach(line => { + const partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06); -var _SHA256 = sha256.exports; + points.push({ + semantic: SemanticType.DecrescendoBegin, + x: line.x, + y: line.y, + }); + if (partner) { + points.push({ + semantic: SemanticType.DecrescendoEnd, + x: line.x + line.target.x, + y: line.y + line.target.y, + }); + } + //else + // console.log("unpaired decrescendo:", line, decrescendoBottoms); + }); -const SHA256 = (source) => { - const { words, sigBytes } = _SHA256(source); - const uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x)); - const word_len = sigBytes / words.length; - return new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff); -}; -const HASH_LEN = 256; -class HashVector { - static fromHash(hash) { - const fields = []; - for (const byte of hash) { - for (let b = 0; b < 8; ++b) - fields.push((byte >> b) & 1 ? 1 : -1); - } - return new HashVector(fields); - } - static fromString(source) { - const hash = SHA256(source); - return HashVector.fromHash(hash); - } - static fromWords(words) { - const vs = words.map((word) => HashVector.fromString(word)); - return vs.reduce((sum, v) => sum.add(v), HashVector.zero); - } - static concat(...vectors) { - const fields = vectors.map((v) => v.fields).flat(1); - return new HashVector(fields); - } - constructor(fields = null) { - this.fields = fields || Array(HASH_LEN).fill(0); - } - get length() { - return this.fields.length; - } - toHash() { - return Uint8Array.from(Array(this.length / 8) - .fill(0) - .map((_, i) => { - const bits = this.fields.slice(i * 8, (i + 1) * 8); - return bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0); - })); - } - add(vec) { - this.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i])); - return this; - } - scale(factor) { - this.fields = this.fields.map((value) => value * factor); - return this; - } - sub(crop) { - const fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop); - return new HashVector(fields); - } - static get zero() { - return new HashVector(); - } -} -const odds = (byte) => { - let result = 0; - for (let b = byte; b > 0; b >>= 1) { - if (b % 2) - ++result; - } - return result; -}; -const ODDS = Array(2 ** 8) - .fill(0) - .map((_, i) => odds(i)); -ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {}); -const countOnes = (hash) => hash.reduce((sum, byte) => sum + ODDS[byte], 0); -const xorHashes = (hash1, hash2) => hash1.map((byte, i) => byte ^ hash2[i]); -const cosHashes = (hash1, hash2) => { - const len = hash1.length * 8; - const xor = xorHashes(hash1, hash2); - const ones = countOnes(xor); - return (len - ones * 2) / len; -}; -const i2hex = (i) => ('0' + i.toString(16)).slice(-2); -const hashToHex = (hash) => Array.from(hash).map(i2hex).join(''); -const hashToBigInt = (hash) => { - // __NOT_FOR_BROWSER_ - return Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n); - /* - // _NOT_FOR_BROWSER__ - throw new Error('BigInt not supported'); - //*/ -}; + // TODO: volta alternative -var Sylvester = {}; + // measure bars + const measureSeparators = staff.tokens.filter(token => token.is("MEASURE_SEPARATOR")); + const singleBars = []; + const groupBars = []; -Sylvester.Matrix = function () {}; + for (let i = 0; i < measureSeparators.length; ++i) { + const bar = measureSeparators[i]; + const nextBar = measureSeparators[i + 1]; + const inteval = nextBar ? nextBar.x - bar.x : Infinity; -Sylvester.Matrix.create = function (elements) { - var M = new Sylvester.Matrix(); - return M.setElements(elements) -}; + if (inteval < 1) { + groupBars.push([bar, nextBar]); + ++i; + } + else + singleBars.push(bar); + }; + //console.log("bars:", singleBars, groupBars); -Sylvester.Matrix.I = function (n) { - var els = [], - i = n, - j; - while (i--) { - j = n; - els[i] = []; - while (j--) { - els[i][j] = i === j ? 1 : 0; - } - } - return Sylvester.Matrix.create(els) -}; + singleBars.forEach(bar => { + points.push({ + semantic: SemanticType.vline_BarMeasure, + x: bar.x + bar.sw / 2, + y: 0, + extension: { + y1: -2, + y2: 2, + }, + }); + }); -Sylvester.Matrix.prototype = { - dup: function () { - return Sylvester.Matrix.create(this.elements) - }, + groupBars.forEach(group => { + let x = (group[0].x + group[1].x) / 2; + const bold0 = group[0].is("BOLD"); + const bold1 = group[1].is("BOLD"); - isSquare: function () { - var cols = this.elements.length === 0 ? 0 : this.elements[0].length; - return this.elements.length === cols - }, + let semantic = null; + if (!bold0 && bold1) { + x = group[0].x; - toRightTriangular: function () { - if (this.elements.length === 0) return Sylvester.Matrix.create([]) - var M = this.dup(), - els; - var n = this.elements.length, - i, - j, - np = this.elements[0].length, - p; - for (i = 0; i < n; i++) { - if (M.elements[i][i] === 0) { - for (j = i + 1; j < n; j++) { - if (M.elements[j][i] !== 0) { - els = []; - for (p = 0; p < np; p++) { - els.push(M.elements[i][p] + M.elements[j][p]); + if (!voltaRightXs.some(vx => x - vx < 2)) + semantic = SemanticType.vline_BarTerminal; } - M.elements[i] = els; - break - } - } - } - if (M.elements[i][i] !== 0) { - for (j = i + 1; j < n; j++) { - var multiplier = M.elements[j][i] / M.elements[i][i]; - els = []; - for (p = 0; p < np; p++) { - // Elements with column numbers up to an including the number of the - // row that we're subtracting can safely be set straight to zero, - // since that's the point of this routine and it avoids having to - // loop over and correct rounding errors later - els.push( - p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier - ); - } - M.elements[j] = els; - } - } - } - return M - }, + else if (bold0 && !bold1) + x = group[1].x; + else if (!bold0 && !bold1) + semantic = SemanticType.vline_BarSegment; - determinant: function () { - if (this.elements.length === 0) { - return 1 - } - if (!this.isSquare()) { - return null - } - var M = this.toRightTriangular(); - var det = M.elements[0][0], - n = M.elements.length; - for (var i = 1; i < n; i++) { - det = det * M.elements[i][i]; - } - return det - }, + //console.log("group:", group[0].x, group[1].x, x); + points.push({ + semantic: SemanticType.vline_BarMeasure, + x, + y: 0, + extension: { + y1: -2, + y2: 2, + }, + }); - isSingular: function () { - return this.isSquare() && this.determinant() === 0 - }, + if (semantic) { + points.push({ + semantic, + x, + y: 0, + extension: { + y1: -2, + y2: 2, + }, + }); + } + }); - augment: function (matrix) { - if (this.elements.length === 0) { - return this.dup() - } - var M = matrix.elements || matrix; - if (typeof M[0][0] === 'undefined') { - M = Sylvester.Matrix.create(M).elements; + const graph = new SemanticGraph(); + graph.points = points; + + return graph; + }*/ + static fromPoints(points = []) { + const graph = new SemanticGraph(); + graph.points = points; + return graph; } - var T = this.dup(), - cols = T.elements[0].length; - var i = T.elements.length, - nj = M[0].length, - j; - if (i !== M.length) { - return null + getLayer(semantic) { + return this.points.filter((p) => p.semantic === semantic); } - while (i--) { - j = nj; - while (j--) { - T.elements[i][cols + j] = M[i][j]; - } + getConfidentLayer(semantic, threshold) { + return this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold)); } - return T - }, - - inverse: function () { - if (this.elements.length === 0) { - return null + getSystemPoints() { + return this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic)); } - if (!this.isSquare() || this.isSingular()) { - return null + getStaffPoints() { + return this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic)); } - var n = this.elements.length, - i = n, - j; - var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular(); - var np = M.elements[0].length, - p, - els, - divisor; - var inverse_elements = [], - new_element; - // Sylvester.Matrix is non-singular so there will be no zeros on the - // diagonal. Cycle through rows from last to first. - while (i--) { - // First, normalise diagonal elements to 1 - els = []; - inverse_elements[i] = []; - divisor = M.elements[i][i]; - for (p = 0; p < np; p++) { - new_element = M.elements[i][p] / divisor; - els.push(new_element); - // Shuffle off the current row of the right hand side into the results - // array as it will not be modified by later runs through this loop - if (p >= n) { - inverse_elements[i].push(new_element); - } - } - M.elements[i] = els; - // Then, subtract this row from those above it to give the identity matrix - // on the left hand side - j = i; - while (j--) { - els = []; - for (p = 0; p < np; p++) { - els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]); - } - M.elements[j] = els; - } + offset(x, y) { + this.points.forEach((point) => { + point.x += x; + point.y += y; + }); } - return Sylvester.Matrix.create(inverse_elements) - }, - - setElements: function (els) { - var i, - j, - elements = els.elements || els; - if (elements[0] && typeof elements[0][0] !== 'undefined') { - i = elements.length; - this.elements = []; - while (i--) { - j = elements[i].length; - this.elements[i] = []; - while (j--) { - this.elements[i][j] = elements[i][j]; - } - } - return this + scale(factor) { + this.points.forEach((point) => { + point.x *= factor; + point.y *= factor; + }); } - var n = elements.length; - this.elements = []; - for (i = 0; i < n; i++) { - this.elements.push([elements[i]]); + // multipy 3x2 matrix + transform(matrix) { + this.points.forEach((point) => { + let x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0]; + const y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1]; + if (point.extension) { + if (Number.isFinite(point.extension.y1)) { + const y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1]; + const y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1]; + x = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0]; + point.extension.y1 = y1; + point.extension.y2 = y2; + } + if (Number.isFinite(point.extension.width)) { + const scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]); + point.extension.width *= scaling; + point.extension.height *= scaling; + } + } + point.x = x; + point.y = y; + }); } - return this - }, +} +SemanticGraph.className = 'SemanticGraph'; + +const CHORD_X_TOLERANCE = 0.2; +//const EVENT_X_TOLERANCE = 0.8; +const STEM_LENGTH_MAX = 6; +const INDENT_THRESHOLD = 2; +const MEASURE_SEMANTICS = [ + SemanticType.ClefG, + SemanticType.ClefF, + SemanticType.ClefC, + SemanticType.TimesigC44, + SemanticType.TimesigC22, + SemanticType.TimesigZero, + SemanticType.TimesigOne, + SemanticType.TimesigTwo, + SemanticType.TimesigThree, + SemanticType.TimesigFour, + SemanticType.TimesigFive, + SemanticType.TimesigSix, + SemanticType.TimesigSeven, + SemanticType.TimesigEight, + SemanticType.TimesigNine, + SemanticType.OctaveShift8va, + SemanticType.OctaveShift8vb, + SemanticType.OctaveShift0, + SemanticType.Zero, + SemanticType.One, + SemanticType.Two, + SemanticType.Three, + SemanticType.Four, + SemanticType.Five, + SemanticType.Six, + SemanticType.Seven, + SemanticType.Eight, + SemanticType.Nine, + SemanticType.AccNatural, + SemanticType.AccSharp, + SemanticType.AccDoublesharp, + SemanticType.AccFlat, + SemanticType.AccFlatflat, + SemanticType.NoteheadS0, + SemanticType.NoteheadS1, + SemanticType.NoteheadS2, + SemanticType.NoteheadS1stemU, + SemanticType.NoteheadS1stemD, + SemanticType.NoteheadS2stemU, + SemanticType.NoteheadS2stemD, + SemanticType.Rest0, + SemanticType.Rest1, + SemanticType.Rest2, + SemanticType.Rest3, + SemanticType.Rest4, + SemanticType.Rest5, + SemanticType.Rest6, + SemanticType.Rest0W, + SemanticType.RestM1, + SemanticType.SlurBegin, + SemanticType.SlurEnd, + SemanticType.Dot, + SemanticType.f, + SemanticType.p, + SemanticType.m, + SemanticType.n, + SemanticType.r, + SemanticType.s, + SemanticType.z, + SemanticType.ScriptFermata, + SemanticType.ScriptShortFermata, + SemanticType.ScriptSforzato, + SemanticType.ScriptStaccato, + SemanticType.ScriptStaccatissimo, + SemanticType.ScriptTurn, + SemanticType.ScriptTrill, + SemanticType.ScriptSegno, + SemanticType.ScriptCoda, + SemanticType.ScriptArpeggio, + SemanticType.ScriptPrall, + SemanticType.ScriptMordent, + SemanticType.ScriptMarcato, + SemanticType.ScriptTenuto, + SemanticType.ScriptPortato, + SemanticType.PedalStar, + SemanticType.PedalPed, + SemanticType.GraceNotehead, + SemanticType.BeamLeft, + SemanticType.BeamRight, + SemanticType.BeamContinue, + SemanticType.CrescendoBegin, + SemanticType.CrescendoEnd, + SemanticType.DecrescendoBegin, + SemanticType.DecrescendoEnd, + SemanticType.TremoloLeft, + SemanticType.TremoloRight, + SemanticType.TremoloMiddle, +]; +const STAFF_LINED_SEMANTICS = [ + SemanticType.AccNatural, + SemanticType.AccSharp, + SemanticType.AccDoublesharp, + SemanticType.AccFlat, + SemanticType.AccFlatflat, + SemanticType.NoteheadS0, + SemanticType.NoteheadS1, + SemanticType.NoteheadS2, + SemanticType.NoteheadS1stemU, + SemanticType.NoteheadS1stemD, + SemanticType.NoteheadS2stemU, + SemanticType.NoteheadS2stemD, +]; +const LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval]; +const NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2]; +const KEYACC_CANDIDATE_SEMANTICS = { + AccSharp: TokenType.KeySharp, + AccNatural: TokenType.KeyNatural, + AccFlat: TokenType.KeyFlat, }; - -var matrixInverse = function (elements) { - const mat = Sylvester.Matrix.create(elements).inverse(); - if (mat !== null) { - return mat.elements - } else { - return null - } +const NOTEHEAD_TABLE = { + [SemanticType.NoteheadS1]: { + up: SemanticType.NoteheadS1stemU, + down: SemanticType.NoteheadS1stemD, + }, + [SemanticType.NoteheadS2]: { + up: SemanticType.NoteheadS2stemU, + down: SemanticType.NoteheadS2stemD, + }, }; - -const EOM = -1; // end event id of measure -//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23; -const GREAT_NUMBER = 1920; -const DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13; -const floatToFrac = (x) => { - const n = Math.round(x * GREAT_NUMBER); - return reducedFraction(n, GREAT_NUMBER); +const REST_SEMANTICS = [ + SemanticType.Rest0, + SemanticType.Rest1, + SemanticType.Rest2, + SemanticType.Rest3, + SemanticType.Rest4, + SemanticType.Rest5, + SemanticType.Rest6, +]; +const TOKEN_TO_STEMBEAM = { + [TokenType.BeamLeft]: 'Open', + [TokenType.BeamRight]: 'Close', + [TokenType.BeamContinue]: 'Continue', }; -const floatToTimeWarp = (x) => { - if (x === 1) - return null; - return floatToFrac(x); +const TEXT_TYPE_ALIAS = { + Alter1: TextType.Alternation1, + Alter2: TextType.Alternation2, }; -var ActionType; -(function (ActionType) { - ActionType[ActionType["PLACE"] = 0] = "PLACE"; - ActionType[ActionType["VERTICAL"] = 1] = "VERTICAL"; - ActionType[ActionType["HORIZONTAL"] = 2] = "HORIZONTAL"; -})(ActionType || (ActionType = {})); -class Action { +const noteheadsXPivot = (xs, direction) => { + switch (xs.length) { + case 0: + return undefined; + case 1: + return xs[0]; + case 2: + return direction === 'u' ? Math.min(...xs) : Math.max(...xs); + default: { + const mean = xs.reduce((sum, x) => sum + x, 0) / xs.length; + xs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean)); + return noteheadsXPivot(xs.slice(0, xs.length - 1), direction); + } + } +}; +const noteheadsPivot = (nhs) => noteheadsXPivot(nhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)), nhs[0].direction); +class Measure extends SimpleClass { constructor(data) { - Object.assign(this, data); + super(); + super.assign(data); + this.tokens = this.tokens || []; + this.antiTokens = this.antiTokens || []; + this.barTypes = this.barTypes || {}; } - static P(e) { - return new Action({ - type: ActionType.PLACE, - e1: e, - }); + get right() { + return this.left + this.width; } - static V(e1, e2, order = 1) { - return new Action({ - type: ActionType.VERTICAL, - e1: order > 0 ? e1 : e2, - e2: order > 0 ? e2 : e1, + get noteheads() { + return this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x); + } + get chordRects() { + const noteheads = this.noteheads.filter((nh) => [TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)); + let nulN = 0; + const nhmap = noteheads.reduce((map, nh) => { + const tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`; + let key = `${nh.type}|${tip}`; + if (!nh.tip && map[key]) { + if (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) { + ++nulN; + key = `${nh.type}|nul${nulN}`; + } + } + map[key] = map[key] || []; + map[key].push(nh); + return map; + }, {}); + return Object.values(nhmap).map((nhs) => { + const left = Math.min(...nhs.map((nh) => nh.x)); + const right = Math.max(...nhs.map((nh) => nh.x)); + const top = Math.min(...nhs.map((nh) => nh.y)); + const bottom = Math.max(...nhs.map((nh) => nh.y)); + const nh0 = nhs[0]; + const stemX = nh0 && nh0.tip ? nh0.tip.x : left; + let x = left; + let width = right - left; + let stemDirection = null; + switch (nh0.type) { + case TokenType.NoteheadS0: + x -= NOTEHEAD_WIDTHS.NoteheadS0 / 2; + width += NOTEHEAD_WIDTHS.NoteheadS0; + break; + case TokenType.NoteheadS1stemU: + case TokenType.NoteheadS2stemU: + stemDirection = 'u'; + x -= NOTEHEAD_WIDTHS.NoteheadS1; + width += NOTEHEAD_WIDTHS.NoteheadS1; + break; + case TokenType.NoteheadS1stemD: + case TokenType.NoteheadS2stemD: + stemDirection = 'd'; + width += NOTEHEAD_WIDTHS.NoteheadS1; + break; + } + return { + x, + width, + stemX, + stemDirection, + top, + bottom, + tip: nh0.tip, + }; }); } - static H(e1, e2) { - return new Action({ - type: ActionType.HORIZONTAL, - e1, - e2, + get timeWarped() { + return this.tokens && this.tokens.some((token) => token.timeWarped); + } + get additionalLines() { + const chords = this.getChords(); + const up = chords + .filter((chord) => chord.ys.some((y) => y <= -3)) + .map((chord) => ({ + left: chord.left, + right: chord.right, + n: Math.ceil(Math.min(...chord.ys)) + 2, + })); + const down = chords + .filter((chord) => chord.ys.some((y) => y >= 3)) + .map((chord) => ({ + left: chord.left, + right: chord.right, + n: Math.floor(Math.max(...chord.ys)) - 2, + })); + return [...up, ...down].map((stack) => ({ + left: stack.left - 0.28, + right: stack.right + 0.28, + n: stack.n, + })); + } + getChords() { + const flags = this.tokens.filter((t) => TokenFlags.includes(t.type)); + const dots = this.tokens.filter((t) => TokenDots.includes(t.type)); + const beams = this.tokens.filter((t) => TokenBeams.includes(t.type)); + const chordRcs = this.chordRects + .map((rect) => { + const noteheads = this.noteheads.filter((nh) => nh.direction === rect.stemDirection && + nh.left >= rect.x && + nh.right <= rect.x + rect.width + CHORD_X_TOLERANCE && + nh.y >= rect.top && + nh.y <= rect.bottom); + noteheads.sort((n1, n2) => n2.y - n1.y); + const ys = noteheads.map((nh) => nh.y); + const noteIds = noteheads.map((nh) => nh.id); + const division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0); + return { + rect, + left: rect.x, + right: rect.x + rect.width, + pivotX: noteheadsPivot(noteheads), + ys, + tip: rect.tip, + noteIds, + division, + dots: null, + rest: false, + stemDirection: rect.stemDirection, + beam: null, + }; + }) + .sort((c1, c2) => c2.left - c1.left); + const accs = new Set(); + const chords = chordRcs.map(({ rect, ...chord }) => { + if (chord.division >= 1) { + // NOTE: notehead-s1 may have flags too + const flagRange = [rect.bottom, rect.top]; + switch (rect.stemDirection) { + case 'u': + flagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5; + break; + case 'd': + flagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5; + break; + } + const nearbyFlags = flags.filter((flag) => !accs.has(flag.id) && + flag.x > rect.stemX - CHORD_X_TOLERANCE && + flag.x < rect.stemX + CHORD_X_TOLERANCE && + flag.y > flagRange[0] && + flag.y < flagRange[1]); + chord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division); + nearbyFlags.forEach((flag) => accs.add(flag.id)); + if (chord.division >= 3) { + const beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7); + if (beamToken) + chord.beam = TOKEN_TO_STEMBEAM[beamToken.type]; + } + } + const nearbyDots = dots.filter((dot) => !accs.has(dot.id) && + dot.x > rect.x + rect.width - 0.2 && + dot.x < rect.x + rect.width + 1.2 && + dot.y > rect.top - 1 && + dot.y <= rect.bottom + 0.5); + chord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0); + nearbyDots.forEach((dot) => accs.add(dot.id)); + return chord; + }); + chords.reverse(); + return chords; + } + getRests() { + const rests = this.tokens.filter((t) => TokenRests.includes(t.type)); + const dots = this.tokens.filter((t) => TokenDots.includes(t.type)); + return rests.map((rest) => { + const nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5); + const dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0); + return { + left: rest.x - 0.75, + right: rest.x + 0.75, + pivotX: rest.x, + rest: true, + ys: [rest.y], + noteIds: [rest.id], + dots: dotValue, + division: rest.division, + stemDirection: null, + }; }); } - get id() { - switch (this.type) { - case ActionType.PLACE: - return this.e1.toString(); - case ActionType.VERTICAL: - return `${this.e1}|${this.e2}`; - case ActionType.HORIZONTAL: - return `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`; - } + getEvents() { + return [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left); } - get events() { - return [this.e1, this.e2].filter(Number.isFinite); + getContexts(fields = {}) { + return this.tokens + .filter((t) => t.isContexted) + .sort((n1, n2) => n1.x - n2.x) + .map((token) => new ContextedTerm({ + x: token.x, + y: token.y, + tokenType: token.type, + ...fields, + })); } -} -class StageMatrix { - static fromNode(node, status) { - const matrix = Array(node.stages.length) - .fill(null) - .map(() => Array(node.stages.length) - .fill(null) - .map(() => new Set())); - node.actions - .filter((action) => action.type === ActionType.HORIZONTAL) - .forEach((action) => { - const stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1)); - const stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2)); - console.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action); - matrix[stage1][stage2].add(action.e1); - }); - matrix[0][node.stages.length - 1].add(0); // the entire measure edge - const stagedEvents = node.stagedEvents; - const endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i)); - const endHP = Math.max(0, Math.max(...endHs) - 0.01); - const hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL); - const pendingHeads = Object.keys(status.eventMap) - .map(Number) - .filter((eid) => !hActions.find((action) => action.e2 === eid)); - // edges to end stage - node.stages.forEach((stage) => { - stage.events.forEach((eid) => { - if (eid > 0) { - const act = hActions.find((action) => action.e1 === eid); - if (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) { - if (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) - matrix[stage.index][node.stages.length - 1].add(eid); - } + assignAccessoriesOnEvents(events) { + events.forEach((event) => (event.accessories = event.accessories || [])); + const accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type)); + //console.log("accessories:", accessories); + accessories.forEach((accessory) => { + const relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1); + if (relatedEvents.length > 0) { + let owner = relatedEvents[0]; + if (relatedEvents.length > 1) { + owner = relatedEvents + .map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) })) + .sort(({ d: d1 }, { d: d2 }) => d1 - d2) + .map(({ event }) => event)[0]; } + //console.log("relatedEvents:", accessory, owner); + let direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up; + if (TokenDirectionless.includes(accessory.type)) + direction = null; + owner.accessories.push({ + type: accessory.type, + id: accessory.id, + direction, + x: accessory.x - owner.left, + }); + } + //else + // console.debug("alone accessory:", accessory.type); + }); + // arpeggio + const sortEvents = [...events]; + sortEvents.sort((e1, e2) => e1.left - e2.left); + const arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio); + arpeggios.forEach((arpeggio) => { + const owner = sortEvents.find((event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)); + //const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5)); + if (owner) { + owner.accessories.push({ + type: TokenType.ScriptArpeggio, + id: arpeggio.id, + x: arpeggio.x - owner.left, + }); + } + //else + // console.debug("alone arpeggio:", arpeggio); + }); + // grace noteheads + const graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead); + graceNhs.forEach((grace) => { + const event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4)); + if (event) + event.grace = GraceType.Grace; + }); + // tremolos + const tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft); + const tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight); + const tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle); + const tevents = events + .filter((event) => !event.rest) + .map((event) => { + const ys = [...event.ys]; + if (event.tip) + ys.push(event.tip.y); + else { + ys.push(event.ys[0] + 2); + ys.push(event.ys[event.ys.length - 1] - 2); + } + const stemL = event.tip ? event.tip.x : event.left; + const stemR = event.tip ? event.tip.x : event.right; + return { + event, + top: Math.min(...ys), + bottom: Math.max(...ys), + stemL, + stemR, + }; + }); + tremolsMs.forEach((tm) => { + const te = tevents.find((te) => { + if (te.event.tip) + return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3; + return false; }); + if (te) { + te.event.tremolo = te.event.tremolo || 2; + ++te.event.tremolo; + } }); - return new StageMatrix({ matrix }); - } - constructor(data) { - Object.assign(this, data); - } - pathOf(x, y, target, ei = 0) { - if (this.matrix[x][y].size) { - const eid = [...this.matrix[x][y]][ei]; - if (y === target) - return [eid]; - for (let yy = y + 1; yy <= target; ++yy) { - const sub = this.pathOf(y, yy, target); - if (sub) - return [eid, ...sub]; + tremolsLs.forEach((tl) => { + const te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6); + if (te) { + te.event.tremolo = te.event.tremolo || 2; + ++te.event.tremolo; + te.event.tremoloLink = TremoloLink.Pitcher; } - } - return null; - } - findDoublePath(s1, s2) { - const paths = []; - for (let t = s2; t >= s1 + 1; --t) { - for (let ei = 0; ei < this.matrix[s1][t].size; ++ei) { - const path = this.pathOf(s1, t, s2, ei); - if (path) { - paths.push(path); - if (paths.length === 2) - return [paths[0], paths[1]]; - } + }); + tremolsRs.forEach((tr) => { + const te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6); + if (te) { + te.event.tremolo = te.event.tremolo || 2; + ++te.event.tremolo; + te.event.tremoloLink = TremoloLink.Catcher; } - } - return null; - } - reducePath(path) { - this.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id)))); + }); } - toEquations(eventCount) { - const equations = []; - for (let d = 1; d < this.matrix.length; d++) { - for (let s1 = 0; s1 < this.matrix.length - d; s1++) { - const s2 = s1 + d; - while (true) { - // find closed loop from s1 to s2 - const paths = this.findDoublePath(s1, s2); - if (paths) { - const [path1, path2] = paths; - const equation = Array(eventCount).fill(0); - path1.forEach((eid) => (equation[eid] = 1)); - path2.forEach((eid) => (equation[eid] = -1)); - equations.push(equation); - this.reducePath(path1.length > path2.length ? path1 : path2); - } - else - break; - } + assignFeaturesOnEvents(events, semantics) { + const points = semantics.filter((point) => point.x > this.left && point.x < this.right); + const rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic)); + const flags = points.filter((point) => point.semantic === SemanticType.Flag3); + const dotPs = points.filter((point) => point.semantic === SemanticType.Dot); + const beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft); + const beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue); + const beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight); + const gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead); + const tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight); + const stems = points.filter((point) => point.semantic === SemanticType.vline_Stem); + const s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0); + const s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1); + const s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2); + events.forEach((event) => { + const cx = event.tip ? event.tip.x : (event.left + event.right) / 2; + const top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1]; + const bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0]; + const stemL = event.tip ? event.tip.x : event.left; + const divisions = [0, 0, 0, 0, 0, 0, 0]; + if (event.rest) { + const i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5); + i_rests.forEach((r) => { + const d = REST_SEMANTICS.indexOf(r.semantic); + divisions[d] = Math.max(divisions[d], r.confidence); + }); + } + else { + const nhs = [s0, s1, s2] + .map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25)) + .map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence))); + const i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2); + i_flags.sort((f1, f2) => f2.confidence - f1.confidence); + divisions[0] = nhs[0]; + divisions[1] = nhs[1]; + divisions[2] = nhs[2]; + Array(divisions.length - 3) + .fill(0) + .forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0)); } - } - return equations; + const i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6); + const dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2)); + const dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))]; + const beams = [beamLs, beamMs, beamRs] + .map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2)) + .map((bs) => Math.max(0, ...bs.map((b) => b.confidence))); + const u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5); + const d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5); + const stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))]; + const graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4)); + const grace = Math.max(0, ...graces.map((grace) => grace.confidence)); + const tremolos = event.division === 0 + ? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right) + : tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL); + const tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence)); + event.feature = { + divisions, + dots, + beams, + stemDirections, + grace, + tremoloCatcher, + }; + }); } } -class PathNode { - constructor(data) { - Object.assign(this, data); - console.assert(this.logger, 'logger is null:', data); - } - get actions() { - const last = this.parent ? this.parent.actions : []; - return this.action ? [...last, this.action] : last; +Measure.className = 'Measure'; +Measure.blackKeys = ['tokens', 'antiTokens']; +class Staff extends SimpleClass { + constructor({ measureCount = null, measureBars = null, ...data } = {}) { + super(); + super.assign(data); + this.height = this.height || 10; + this.staffY = this.staffY || 5; + if (measureBars) { + let left = 0; + this.measures = measureBars.map((endX) => { + const measure = new Measure({ left, width: endX - left, height: this.height }); + left = endX; + return measure; + }); + } + else if (measureCount) + this.measures = Array(measureCount) + .fill(null) + .map(() => new Measure()); + else + this.measures = []; } - get id() { - const actionIds = this.actions.map((action) => action.id).sort(); - return actionIds.join(' '); + // relative to staffY + get noteRange() { + const noteheads = [].concat(...this.measures.map((measure) => measure.noteheads)); + const ys = noteheads.map((note) => note.y); + const top = Math.min(-2, ...ys); + const bottom = Math.max(2, ...ys); + return { top, bottom }; } - get stagedEvents() { - const set = new Set(); - if (this.stages) - this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid))); - return set; + get additionalLines() { + return [].concat(...this.measures.map((measure) => measure.additionalLines)); } - like(ids) { - const actionIds = ids.split(' ').sort(); - return actionIds.join(' ') === this.id; + rearrangeMeasures(measureBars) { + if (!measureBars.length) { + console.warn('rearrangeMeasures error, measureBars are empty.'); + return; + } + const tokens = this.measures?.map((measure) => measure.tokens).flat(1) || []; + let left = 0; + this.measures = measureBars.map((endX) => { + const measure = new Measure({ left, width: endX - left, height: this.height }); + left = endX; + return measure; + }); + this.reassignTokens(tokens); } - constructStages(status) { - this.stages = [{ events: [EOM] }]; - for (const action of this.actions) { - switch (action.type) { - case ActionType.PLACE: - this.stages.unshift({ events: [action.e1] }); - break; - case ActionType.VERTICAL: - { - const stage1 = this.stages.find((stage) => stage.events.includes(action.e1)); - const stage2 = this.stages.find((stage) => stage.events.includes(action.e2)); - console.assert(stage1 || stage2, 'invalid V action:', this.stages, action); - if (stage1 && stage2) { - stage1.events.push(...stage2.events); - stage2.events = null; - this.stages = this.stages.filter((stage) => stage.events); - } - else if (!stage1) - stage2.events.unshift(action.e1); - else if (!stage2) - stage1.events.push(action.e2); - } - break; - case ActionType.HORIZONTAL: - { - const stage1 = this.stages.find((stage) => stage.events.includes(action.e1)); - const stage2 = this.stages.find((stage) => stage.events.includes(action.e2)); - console.assert(stage1 || stage2, 'invalid H action:', this.stages, action); - const newStage = (eid) => { - console.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap); - const x = status.eventMap[eid].x; - const stage = this.stages.find((s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)); - if (stage) - stage.events.push(eid); - else { - const newStage = { events: [eid] }; - const si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x); - this.stages.splice(si, 0, newStage); - } - }; - if (!stage1) - newStage(action.e1); - if (!stage2) - newStage(action.e2); - /*if (this.stages.some((s, si) => si < this.stages.length - 2 - && s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x)))) - debugger;*/ - } + reassignTokens(tokens = null) { + if (!tokens) + tokens = [].concat(...this.measures.map((measure) => measure.tokens)); + this.measures.forEach((measure) => (measure.tokens = [])); + tokens.forEach((token) => { + for (const measure of this.measures) { + if (token.x < measure.right) { + measure.tokens.push(token); break; + } } - } - this.stages.forEach((stage, i) => (stage.index = i)); + }); } - constructConstraints(status) { - const eventCount = Object.keys(status.eventMap).length; - const stageMatrix = StageMatrix.fromNode(this, status); - const equations = stageMatrix.toEquations(eventCount); - const factors = Array(eventCount) - .fill(null) - .map((_, id) => status.eventMap[id].duration); - this.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i])); + assignSemantics(graph) { + this.semantics = graph.getStaffPoints(); } - inbalancesConstraints(status) { - console.assert(this.constraints, 'constraints not constructed.'); - const eventCount = Object.keys(status.eventMap).length; - const ones = Array(eventCount).fill(true); - const fixed = Array(eventCount).fill(false); - const inbalances = []; - for (const constraint of this.constraints) { - const sum = constraint.reduce((sum, it) => sum + it, 0); - if (sum !== 0) { - const c = sum < 0 ? constraint.map((it) => -it) : constraint; - if (c[0] > 0) - continue; // entire measure edge usually is larger than others, no effect - inbalances.push(c); - // set ones for tight items - c.forEach((it, i) => { - fixed[i] = fixed[i] || it < 0; - if (it) - ones[i] = it < 0 || fixed[i]; + // generate tokens from semantics + assemble(threshold, system, logger = new DummyLogger()) { + if (!this.semantics) + return; + let points = system.qualifiedSemantics(this.semantics, threshold); + points = solveOverlapping(points); + // tempo noteheads + const tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead); + tempoNhs.forEach((tempoNh) => { + const index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3); + //console.log("temponh:", tempoNh, index, points[index]); + if (index >= 0) + points.splice(index, 1); + // TODO: construct tempo term + }); + const antiP = (id) => { + if (system.displacementSemantics?.[id]) + return this.semantics.find((p) => p.id === id); + return null; + }; + points.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points })); + // noteheads with stem from noteheads & stems + const stems = points + .filter((point) => point.semantic === SemanticType.vline_Stem) + .filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems + .map((p) => ({ + x: p.x, + y1: p.extension.y1, + y2: p.extension.y2, + direction: null, + })); + const noteheads = points.filter((point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom); + const rootNhs = new Set(); + // for 2nd degree chord notes + const nhOffsetX = (nh, stem, down) => { + if ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) + return 0; + const offset = NOTEHEAD_WIDTHS[nh.semantic]; + return down ? -offset : offset; + }; + // find root noteheads on stem + stems.forEach((stem) => { + const attachedHeads = noteheads.filter((nh) => Math.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 && + Math.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem + nh.y > stem.y1 - 0.5 && + nh.y < stem.y2 + 0.5 && + !(nh.x > stem.x && nh.y > stem.y2) && + !(nh.x < stem.x && nh.y < stem.y1)); + //if (stem.x===102.0625 && stem.y2===1.875) + // debugger; + if (attachedHeads.length) { + attachedHeads.sort((n1, n2) => n1.y - n2.y); + const topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1)); + const bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y)); + if (Math.min(topDist, bottomDist) > 0.5) + return; // no root notehead on this stem + const down = topDist < bottomDist; + stem.direction = down ? 'd' : 'u'; + if (!down) + attachedHeads.reverse(); + const root = attachedHeads[0]; + const semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up; + this.appendPoint({ + id: root.id, + semantic, + x: stem.x + nhOffsetX(root, stem, down), + y: root.y, + pivotX: root.x, + confidence: root.confidence, + }, { + tip: { x: stem.x, y: down ? stem.y2 : stem.y1 }, + antiPoint: antiP(root.id), + points, }); + rootNhs.add(root.id); } - } - // pick out influenced equations - this.constraints.forEach((constraint) => { - const sum = constraint.reduce((sum, it) => sum + it, 0); - if (sum === 0 && !constraint[0]) { - if (constraint.some((it, i) => it && !ones[i])) { - constraint.forEach((it, i) => it && (ones[i] = false)); - inbalances.push(constraint); + }); + // non-root noteheads + noteheads + .filter((nh) => !rootNhs.has(nh.id)) + .forEach((nh) => { + const nearStems = stems + .filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2) + .sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x)); + const stem = nearStems[0]; + if (stem) { + const down = stem.direction === 'd'; + const semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up; + this.appendPoint({ + id: nh.id, + semantic, + x: stem.x + nhOffsetX(nh, stem, down), + y: nh.y, + pivotX: nh.x, + confidence: nh.confidence, + }, { + tip: { x: stem.x, y: down ? stem.y2 : stem.y1 }, + antiPoint: antiP(nh.id), + points, + }); + } + else + logger.debug('isolated notehead:', system.index, this.index, nh); + }); + // group flags + const flags = points.filter((point) => point.semantic === SemanticType.Flag3); + flags.sort((f1, f2) => f1.x - f2.x); + this.appendFlags(flags, stems); + // group dots + const dots = points + .filter((point) => point.semantic === SemanticType.Dot) + .map((dot) => { + const y = roundNumber(dot.y, 0.5); + return { x: dot.x, y }; + }); + const dotLines = dots.reduce((table, dot) => { + table[dot.y] = table[dot.y] || []; + table[dot.y].push(dot); + return table; + }, {}); + Object.entries(dotLines).forEach(([sy, line]) => { + const y = Number(sy); + if (line.length > 1) { + line.sort((d1, d2) => d1.x - d2.x); + for (let i = 0; i < line.length - 1; i++) { + const dot = line[i]; + if (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) { + this.appendPoint({ + id: dot.id, + x: dot.x, + y, + confidence: dot.confidence, + }, { type: TokenType.DotDot, antiPoint: antiP(dot.id), points }); + } } } }); - return { ones, inbalances }; - } - solveEquations({ ones, inbalances }) { - if (!inbalances.length) - return ones.map(() => 1); - const xis = ones - .map((fixed, i) => ({ fixed, i })) - .filter(({ fixed }) => !fixed) - .map(({ i }) => i) - .filter((i) => inbalances.some((items) => items[i] !== 0)); - if (!xis.length) - return ones.map(() => 1); - const factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i])); - const equationMap = new Map(); - let conflicted = false; - const lines = inbalances - .map((items) => { - const line = items.filter((_, i) => xis.includes(i)); - const bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0); - return { line, bias }; - // remove duplicated equations - }) - .filter(({ line, bias }) => { - if (line.every((it) => it === 0)) - return false; - const id = line.join(','); - if (equationMap.has(id)) { - conflicted = equationMap.get(id) !== bias; - return false; + // pair key accidentals + const keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc); + const accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]); + accs.forEach((acc) => { + if (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) { + this.appendPoint({ + id: acc.id, + x: acc.x, + y: acc.y, + confidence: acc.confidence, + }, { type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }); } - equationMap.set(id, bias); - return true; }); - if (conflicted) - return null; - const squareLines = lines.slice(0, xis.length); - const restLines = lines.slice(xis.length); - if (squareLines.length < xis.length) { - const candidateLines = []; - for (let i1 = 0; i1 < xis.length - 1; ++i1) { - const i2 = i1 + 1; - const line = { - line: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)), - bias: 0, - prior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER, - }; - if (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) - line.prior -= 10; - if (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) - line.prior += 1; - candidateLines.push(line); + // octave shift heads + const octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8); + octs.forEach((oct) => { + const type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb; + this.appendPoint({ + id: oct.id, + x: oct.x, + y: oct.y, + confidence: oct.confidence, + }, { type, points }); + }); + // group volta dots + const voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic)); + voltaDots.sort((d1, d2) => d1.x - d2.x); + const voltaGroups = voltaDots.reduce((groups, dot) => { + const group = groups[dot.semantic]; + const xs = Array.from(Object.keys(group)).map(Number); + const x = xs.find((x) => dot.x < x + 0.2) || dot.x; + group[x] = groups[dot.semantic][x] || []; + group[x].push(dot); + return groups; + }, { [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }); + for (const [type, group] of Object.entries(voltaGroups)) { + Object.values(group).forEach((dots) => { + if (dots.length > 1) { + const confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0); + if (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) + this.appendPoint(dots[0], { type: TokenType[type] }); + } + }); + } + } + appendPoint(point, { type, points = null, antiPoint, ...fields } = {}) { + //console.log("appendPoint.0:", point, point.x, point.y); + const x = point.x; + const measure = this.measures.find((measure) => x < measure.left + measure.width); + if (!measure) + // drop tokens out of measures range + return; + // lined or interval + let lined = false; + let interval = false; + if (STAFF_LINED_SEMANTICS.includes(point.semantic)) { + console.assert(points, 'argument of points for this semantic is required:', point.semantic); + const signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2); + if (signs.some((s) => s.semantic === SemanticType.SignLined)) + lined = true; + else if (signs.some((s) => s.semantic === SemanticType.SignInterval)) + interval = true; + } + type = type || TokenType[point.semantic]; + const fixedY = TOKEN_Y_FIXED[type]; + let roundY = TOKEN_Y_ROUND[type]; + if (lined || interval) + roundY = Math.max(roundY, 1); + let y = point.y; + if (Number.isFinite(fixedY)) + y = fixedY; + else if (roundY) { + if (interval) + y = roundNumber(y + 0.5, roundY) - 0.5; + else + y = roundNumber(y, roundY); + } + //if (lined || interval) + // console.log("round sign:", point.semantic, y, lined, interval); + const holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1); + if (holder) { + if (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) { + holder.x = x; + holder.y = y; + holder.confidence = point.confidence; } - candidateLines.sort((c1, c2) => c1.prior - c2.prior); - squareLines.push(...candidateLines.slice(0, xis.length - squareLines.length)); + return; } - //console.assert(squareLines.length, "squareLines is empty.", lines, xis, equationMap, inbalances); - const matrix = squareLines.map(({ line }) => line); - const bias = squareLines.map(({ bias }) => bias); - const invert = matrixInverse(matrix); - if (!invert) { - this.logger.warn('null invert:', matrix); - //debugger; - return null; + // exlude clef out of pitch range + if (TokenClefs.includes(type)) { + if (Math.abs(y) > 3) + return; } - const solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0)); - //console.log("solution:", matrix, invert, solution); - if (restLines.length) { - if (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) { - //console.debug("rest lines not satisfied:", restLines, solution); - return null; + // TODO: exclude overlapped pair by a token prior table + measure.tokens.push(new Token({ + id: point.id, + type, + x, + y, + pivotX: point.pivotX, + confidence: point.confidence, + ...fields, + })); + if (antiPoint) { + measure.antiTokens.push(new Token({ + id: antiPoint.id, + type, + x, + y: antiPoint.y, + confidence: antiPoint.confidence, + })); + } + } + appendFlags(flags, stems) { + //console.log("flags:", flags); + const stemGroups = stems + .map((stem) => ({ + ...stem, + flags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5), + })) + .filter((group) => group.flags.length); + stemGroups.forEach((group) => { + const mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null); + //const upDistance = mainFlag.y - group.y1; + //const downDistance = group.y2 - mainFlag.y; + //const downward = downDistance < upDistance; + const downward = group.direction === 'd'; + const tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX); + const flagTips = group.flags.map((flag) => ({ + tip: (tailY - flag.y) * (downward ? 1 : -1), + confidence: flag.confidence, + })); + const count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length; + const type = TokenFlags[count - 1]; + if (type) { + this.appendPoint({ + id: group.flags[0].id, + x: group.x, + y: tailY, + confidence: Math.min(...group.flags.map((flag) => flag.confidence)), + }, { type }); + //console.log("flag:", type); } - } - const result = ones.map(() => 1); - xis.forEach((xi, i) => (result[xi] = solution[i])); - return result; + }); } - optimallySolve(status) { - const { ones, inbalances } = this.inbalancesConstraints(status); - //if (this.like("2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11")) - // debugger; - const shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01))); - const shrinkMap = shrinknesses.reduce((map, shrinkness, id) => { - if (shrinkness >= 0) { - map[shrinkness] = map[shrinkness] || []; - map[shrinkness].push(id); - } - return map; - }, {}); - const groups = Object.entries(shrinkMap) - .sort((p1, p2) => Number(p2[0]) - Number(p1[0])) - .map((pair) => pair[1]); - //console.log("groups:", groups, shrinknesses); - for (let released = 1; released < groups.length; ++released) { - const releasedIds = [].concat(...groups.slice(0, released)); - const fixed = ones.map((_, id) => !releasedIds.includes(id)); - const warps = this.solveEquations({ ones: fixed, inbalances }); - if (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) - return warps; + clearTokens() { + this.measures.forEach((measure) => (measure.tokens = [])); + this.semantics = []; + } + clearPredictedTokens() { + this.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted))); + } +} +Staff.className = 'Staff'; +Staff.blackKeys = ['index', 'semanticTop', 'semanticBttom']; +class System extends SimpleClass { + constructor({ stavesCount, ...fields }) { + super(); + super.assign(fields); + if (!this.measureBars) { + const HEAD_WIDTH = 5; + const segmentLength = (this.width - HEAD_WIDTH) / this.measureCount; + this.measureBars = Array(this.measureCount) + .fill(0) + .map((_, i) => HEAD_WIDTH + segmentLength * (i + 1)); } - return this.solveEquations({ ones, inbalances }); + if (!fields.staves && stavesCount) + this.staves = Array(stavesCount) + .fill(null) + .map(() => new Staff({ measureBars: this.measureBars })); + this.arrangePosition(); + this.measureCount = this.measureCount || this.measureBars.length; + this.sidBlackList = this.sidBlackList || []; + this.sidWhiteList = this.sidWhiteList || []; } - isConflicted(status) { - const { ones, inbalances } = this.inbalancesConstraints(status); - //if (this.like("2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7")) - // debugger; - for (const c of inbalances) { - // sum with low warps - const lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0); - if (lowSum >= 0) { - // mark events' broken tendency - c.forEach((it, i) => { - if (it) - status.eventTendencies[i] += it > 0 ? 1 : -1; - }); - return true; - } + get noteRange() { + if (!this.staves.length) + return null; + const staffTop = this.staves[0]; + const staffBottom = this.staves[this.staves.length - 1]; + return { + top: staffTop.top + staffTop.staffY + staffTop.noteRange.top, + bottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom, + }; + } + get staffPositions() { + return this.staves.map((staff) => ({ + y: staff.top + staff.staffY, + radius: 2, + })); + } + get staffMask() { + if (this.staffMaskChanged) + return this.staffMaskChanged; + if (this.prev && this.staves.length === this.prev.staves.length) + return this.prev.staffMask; + return 2 ** this.staves.length - 1; + } + get staffTop() { + const positions = this.staffPositions; + return positions.length ? positions[0].y - positions[0].radius : 0; + } + get staffBottom() { + const positions = this.staffPositions; + return positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0; + } + arrangePosition() { + let y = 0; + for (const staff of this.staves) { + if (Number.isFinite(staff.top)) + break; + staff.top = y; + y += staff.height; } - if (!inbalances.length) - return false; - const timeWarps = this.solveEquations({ ones, inbalances }); - if (!timeWarps) - return true; - return !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1); } - getSolution(status) { - const actionKey = (action) => status.eventMap[action.e2] - ? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06 - : status.eventMap[action.e1].x + 1e4; - const hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2)); - const hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {}); - const startEs = new Set([...Object.keys(hmap)].map(Number)); - hacts.forEach((act) => startEs.delete(act.e2)); - this.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid)); - let voices = [...startEs].map((se) => { - const voice = [se]; - let x = se; - while (hmap[x]) { - x = hmap[x]; - if (x < 0 || voice.includes(x)) - break; - voice.push(x); - } - return voice; + tidyMeasureBars() { + this.measureBars = this.measureBars.filter((x) => x > 1); + this.measureBars.sort((b1, b2) => b1 - b2); + const restWidth = this.width - this.measureBars[this.measureBars.length - 1]; + if (restWidth > 12) + this.measureBars.push(this.width); + else if (restWidth < 2) + this.measureBars[this.measureBars.length - 1] = this.width; + this.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4); + } + rearrangeMeasures() { + this.measureCount = this.measureBars.length; + this.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars)); + } + get height() { + return this.staves.reduce((height, staff) => height + staff.height, 0); + } + get connectionLine() { + const staffHead = this.staves[0]; + const staffTail = this.staves[this.staves.length - 1]; + return (staffHead && { + top: staffHead.top + staffHead.staffY - 2, + bottom: staffTail.top + staffTail.staffY + 2, }); - const events = Object.values(status.eventMap) - .filter((e) => e.id > 0) - .map((e) => ({ - id: e.id, - tick: null, - endTick: null, - tickGroup: null, - timeWarp: null, - })); - const eventMap = events - .filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id))) - .reduce((map, e) => ({ ...map, [e.id]: e }), {}); - this.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si))); - this.stages[0].tick = 0; - this.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0)); - // solve time warps - const timeWarps = this.optimallySolve(status); - events.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id]))); - //if (this.like("1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10")) - // debugger; - // solve stage ticks - const estages = this.stages.slice(0, this.stages.length - 1); - const solveStages = () => { - if (estages.every((stage) => Number.isFinite(stage.tick))) - return false; - let changed = false; - // forward - hacts.forEach((act) => { - const stage1 = this.stages.find((stage) => stage.events.includes(act.e1)); - const stage2 = this.stages.find((stage) => stage.events.includes(act.e2)); - if (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) { - stage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp); - stage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick)); - changed = true; - } - }); - // backward - [...hacts].reverse().forEach((act) => { - const stage1 = this.stages.find((stage) => stage.events.includes(act.e1)); - const stage2 = this.stages.find((stage) => stage.events.includes(act.e2)); - if (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) { - stage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp); - stage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick)); - changed = true; - } + } + get middleY() { + if (!this.staves.length) + return 0; + const sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0); + return sum / this.staves.length; + } + get timeSignatureOnHead() { + return this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type))); + } + // an array staff or null on every position of full staff layout + getStaffArray(stavesCount) { + let si = 0; + return Array(stavesCount) + .fill(null) + .map((_, i) => { + const on = this.staffMask & (1 << i); + const staff = on ? this.staves[si++] : null; + console.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2)); + return staff; + }); + } + // measureIndex: the local measure index + getMarksInMeasure(measureIndex) { + console.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length); + const left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0; + const right = this.measureBars[measureIndex]; + const tempoTokens = (this.tokens ?? []).filter((token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral); + return [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)]; + } + getEvents(stavesCount) { + console.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex); + // Empty system (no measureBars / no staves with measures): return empty result + if (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) { + return { staffMask: this.staffMask, columns: [] }; + } + const staves = this.getStaffArray(stavesCount); + // [staff, measure] + const rows = staves.map((staff) => { + if (!staff) { + return Array(this.measureCount) + .fill(null) + .map(() => ({ + events: [], + contexts: [], + voltaBegin: false, + voltaEnd: false, + alternative: false, + barTypes: {}, + })); + } + return staff.measures.map((measure) => { + const events = measure.getEvents(); + measure.assignAccessoriesOnEvents(events); + measure.assignFeaturesOnEvents(events, staff.semantics); + return { + events: events.map((event) => new EventTerm({ + staff: staff.index, + system: this.index, + ...event, + rest: event.rest ? 'r' : null, + })), + contexts: measure.getContexts({ staff: staff.index }), + voltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft), + voltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight), + alternative: measure.alternative, + barTypes: measure.barTypes, + }; }); - return changed; - }; - while (solveStages()) - ; - console.assert(estages.every((stage) => Number.isFinite(stage.tick)), 'stage ticks not all solved:', this.stages, this.id); - events - .filter((event) => Number.isFinite(event.tick)) - .forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp))); - // clip out of bound events - const measureDuration = status.eventMap[0].duration; - voices.forEach((voice) => { - const outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration); - if (outEI >= 0) { - const es = voice.splice(outEI, voice.length - outEI); - es.forEach((eid) => { - eventMap[eid].tick = null; - eventMap[eid].endTick = null; + }); + // supplement time signatures for empty staves + for (let mi = 0; mi < this.measureCount; ++mi) { + const tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type))); + const timeSigs = tsRows.find((row) => row?.length); + if (timeSigs) { + rows.forEach((row) => { + if (row[mi] && !row[mi].contexts.length && !row[mi].events.length) + row[mi].contexts.push(...timeSigs); }); } + } + //const measureWidths = this.staves[0].measures.map(measure => measure.width); + //onst measureStartXs = [0, ...this.measureBars]; + const columns = Array(this.measureCount) + .fill(null) + .map((_, i) => ({ + measureIndex: this.headMeasureIndex + i, + //startX: measureStartXs[i], + //width: measureWidths[i], + rows: rows.map((row) => row[i]), + marks: this.getMarksInMeasure(i), + //xToTick: {}, + duration: 0, + voltaBegin: rows.some((row) => row[i]?.voltaBegin), + voltaEnd: rows.some((row) => row[i]?.voltaEnd), + alternative: rows.some((row) => row[i]?.alternative), + barTypes: rows.reduce((ts, row) => ({ + ...ts, + ...row[i]?.barTypes, + }), {}), + })); + //columns.forEach(computeMeasureTicks); + // assign id on column events + columns.forEach((column) => { + const events = [].concat(...column.rows.filter(Boolean).map((row) => row.events)); + events.forEach((event, i) => (event.id = i + 1)); }); - voices = voices.filter((voice) => voice.length); - const duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite)); - //console.log("getSolution:", this); - this.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps); + const lastColumn = columns[columns.length - 1]; + if (lastColumn) + lastColumn.break = true; return { - voices, - events, - duration, - actions: this.actions.map((action) => action.id).join(' '), + staffMask: this.staffMask, + columns, }; } - deduce(status, quota) { - if (!this.stages) - this.constructStages(status); - //console.log("deduce:", status); - // increase access counting - const access = status.actionAccessing.get(this.id) || { times: 0 }; - ++access.times; - status.actionAccessing.set(this.id, access); - this.constructConstraints(status); - //console.log("constraints:", this.id, this.stages, this.constraints); - if (this.isConflicted(status)) { - access.closed = true; - this.logger.info(this.action.id, '\u274c'); - return null; - } - //const newStatus = status; - this.logger.group(this.action && this.action.id); - if (quota.credits > 0) { - --quota.credits; - if (!this.children) - this.expand(status); - this.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed); - if (this.children.length) { - const p = (node) => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1); - this.children.sort((n1, n2) => p(n2) - p(n1)); - for (const child of this.children) { - const solution = child.deduce(status, quota); - if (solution) { - this.logger.groupEnd(); - return solution; - } - if (quota.credits <= 0) - break; - } - } - //else - // console.debug("got the leaf:", this, status); - } - else - this.logger.debug('quota exhausted.'); - this.logger.groupEnd(); - access.closed = true; - return this.getSolution(status); - } - expand(status) { - //this.action.events.forEach(eid => status.pendingEvents.delete(eid)); - this.constructStages(status); - const { eventMap, matrixV, matrixH } = status; - const stagedEvents = this.stagedEvents; - const branches = []; - const appendBranch = (branch) => { - if (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) { - const stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1)); - const stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2)); - if (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) - return; - if (stage1 && stage2) { - if (branch.action.type === ActionType.VERTICAL) { - if (stage2.index - stage1.index > 1) - return; - if (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) - return; - } - else if (branch.action.type === ActionType.HORIZONTAL) { - if (stage1.index > stage2.index) - return; - } - } - if (branch.action.type === ActionType.HORIZONTAL && - this.actions.some((a) => a.type === ActionType.HORIZONTAL && - (a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1)))) - return; - // exclude 2 too far away events by vertical - if (branch.action.type === ActionType.VERTICAL) { - if (stage1) { - branch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e])); - if (branch.possibility <= 0) - return; - } - if (stage2) { - branch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1])); - if (branch.possibility <= 0) - return; - } - } - branches.push(branch); + getEventsFunctional(stavesCount, ev, processors = [], { useXMap = false } = {}) { + const staves = this.getStaffArray(stavesCount); + // [staff, measure] + const rows = staves.map((staff, si) => { + if (!staff) { + return Array(this.measureCount) + .fill(null) + .map(() => ({ + events: [], + contexts: [], + voltaBegin: false, + voltaEnd: false, + alternative: false, + barTypes: {}, + })); } + return staff.measures.map((measure, mi) => { + const events = ev(si, mi); + return (events && { + events: events.map((event) => new EventTerm({ + system: this.index, + ...event, + rest: event.rest ? 'r' : null, + })), + contexts: measure.getContexts({ staff: si }), + voltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft), + voltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight), + alternative: measure.alternative, + barTypes: measure.barTypes, + }); + }); + }); + //const measureWidths = this.staves[0].measures.map(measure => measure.width); + //const measureStartXs = [0, ...this.measureBars]; + // [measure, staff] + const columns = Array(this.measureCount) + .fill(null) + .map((_, mi) => { + const localRows = rows.map((row) => row[mi]); + if (localRows.some((row) => !row)) + return null; + let xMap = null; + if (useXMap) { + const events = [].concat(...localRows.map((row) => row.events)); + const groupMap = events.reduce((map, event) => { + if (Number.isFinite(event.tickGroup)) + map[event.tickGroup] = map[event.tickGroup] || []; + map[event.tickGroup].push(event); + return map; + }, {}); + xMap = Object.values(groupMap).reduce((map, events) => { + const x = Math.min(...events.map((event) => (event.left + event.right) / 2)); + map.set(x, events); + return map; + }, new Map()); + } + return { + measureIndex: this.headMeasureIndex + mi, + //startX: measureStartXs[mi], + //width: measureWidths[mi], + rows: localRows, + marks: this.getMarksInMeasure(mi), + //xToTick: {}, + duration: 0, + xMap, + voltaBegin: localRows.some((row) => row.voltaBegin), + voltaEnd: localRows.some((row) => row.voltaEnd), + alternative: localRows.some((row) => row.alternative), + barTypes: localRows.reduce((ts, row) => ({ + ...ts, + ...row.barTypes, + }), {}), + }; + }); + processors.forEach((proc) => columns.forEach(proc)); + return { + staffMask: this.staffMask, + columns, }; - for (const eid of stagedEvents) { - if (eid < 0) - continue; - matrixV[eid].forEach((p, id) => { - if (p > 0 && eid !== id) - appendBranch({ action: Action.V(id, eid), possibility: p }); - }); - matrixV.forEach((ps, id) => { - const p = ps[eid]; - if (p > 0) - appendBranch({ action: Action.V(eid, id), possibility: p }); - }); - matrixH[eid].forEach((p, id) => { - if (p > 0) - appendBranch({ action: Action.H(id, eid), possibility: p }); - }); - matrixH.forEach((ps, id) => { - id = id >= Object.keys(eventMap).length ? -1 : id; - const p = ps[eid]; - if (p > 0) - appendBranch({ action: Action.H(eid, id), possibility: p }); - }); - } - // If branches not contains extending actions, clear it. - // Because pure inner vertical action may be harmful - if (!branches.some((branch) => [ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) || - !stagedEvents.has(branch.action.e1) || - !stagedEvents.has(branch.action.e2))) { - this.children = []; - return; - } - //console.table(branches.map(b => [b.action.id, b.possibility])); - //console.log("branches:", branches.map(b => b.action.id).join(", "), "\n", this.actions.map(a => a.id).join(", ")); - this.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch })); - } -} -class Solver { - constructor(env, { quota = 1000, logger = new DummyLogger() } = {}) { - this.quota = quota; - this.logger = logger; - const event0 = { - id: 0, - x: 0, - confidence: 1, - shrinkness: env.measureShrinkness, - duration: env.expectedDuration, - lowWarp: 0, - }; - this.events = [ - event0, - ...env.events.map((e) => ({ - id: e.id, - x: e.x, - confidence: e.confidence, - shrinkness: e.shrinkness, - staff: e.staff, - duration: e.duration, - lowWarp: 0.5, - })), - ]; - this.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {}); - this.matrixH = env.matrixH; - this.matrixV = env.matrixV; - this.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x)); - this.actionAccessing = new Map(); } - solve() { - // construct path root - this.pathRoot = new PathNode({ - logger: this.logger, - action: null, + // get EventSystem contains only contexted terms + getContexts(stavesCount) { + const staves = this.getStaffArray(stavesCount); + // [staff, measure] + const rows = staves.map((staff) => { + if (!staff) { + return Array(this.measureCount) + .fill(null) + .map(() => ({ + events: null, + contexts: [], + voltaBegin: false, + voltaEnd: false, + alternative: false, + barTypes: {}, + })); + } + return staff.measures.map((measure) => ({ + events: null, + contexts: measure.getContexts(), + voltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft), + voltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight), + alternative: rows.some((row) => row.alternative), + barTypes: measure.barTypes, + })); }); - this.pathRoot.children = this.events.slice(1).map((event) => new PathNode({ - logger: this.logger, - parent: this.pathRoot, - action: Action.P(event.id), - possibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0), - })); - let bestSolution = null; - this.logger.groupCollapsed('solve'); - const eventTendencies = Array(this.events.length).fill(0); - const quota = { credits: this.quota, times: 0 }; - while (quota.credits > 0) { - ++quota.times; - const status = { - eventMap: this.eventMap, - matrixH: this.matrixH, - matrixV: this.matrixV, - actionAccessing: this.actionAccessing, - eventTendencies, - }; - const solution = this.pathRoot.deduce(status, quota); - solution.credits = this.quota - quota.credits; - solution.times = quota.times; - this.evaluateSolution(solution); - this.logger.debug('loss:', solution.loss); - bestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution; - if (!bestSolution.loss) - break; - // check if searching tree traversed - if (this.actionAccessing.get('').closed) - break; + // supplement time signatures for empty staves + for (let mi = 0; mi < this.measureCount; ++mi) { + const tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type))); + const timeSigs = tsRows.find((row) => row?.length); + if (timeSigs) { + rows.forEach((row) => { + if (!row[mi].contexts.length) + row[mi].contexts.push(...timeSigs); + }); + } } - this.logger.groupEnd(); - this.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution); - this.logger.debug('cost:', this.quota - quota.credits); - this.logger.debug('eventTendencies:', eventTendencies.map((t) => t / quota.times)); - return bestSolution; + //const measureWidths = this.staves[0].measures.map(measure => measure.width); + //const measureStartXs = [0, ...this.measureBars]; + const columns = Array(this.measureCount) + .fill(null) + .map((_, i) => ({ + measureIndex: this.headMeasureIndex + i, + //startX: measureStartXs[i], + //width: measureWidths[i], + rows: rows.map((row) => row[i]), + marks: [], + //xToTick: {}, + duration: 0, + voltaBegin: rows.some((row) => row[i].voltaBegin), + voltaEnd: rows.some((row) => row[i].voltaEnd), + alternative: rows.some((row) => row.alternative), + barTypes: rows.reduce((ts, row) => ({ + ...ts, + ...row[i].barTypes, + }), {}), + })); + return { + staffMask: this.staffMask, + columns, + }; } - evaluateSolution(solution) { - solution.loss = 0; - const eventMap = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {}); - /*// minus tick - const minuses = solution.events.filter((e) => e.tick < 0).length; - solution.loss += minuses * 1000;*/ - // minus tick rates penalty - const events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]); - const sevents = events.reduce((map, event) => { - map[event.staff] = map[event.staff] || []; - map[event.staff].push(event); - return map; - }, {}); - Object.values(sevents).forEach((es) => { - const ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1); - ses.forEach((e1, i) => { - const e2 = es[i + 1]; - if (e2.tick < e1.tick) - solution.loss += 1000; - }); - }); - const times = new Map(); - solution.events.forEach((event) => { - if (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id))) - solution.loss += 100 * eventMap[event.id].confidence; - if (event.timeWarp) { - const { numerator, denominator } = event.timeWarp; - const shrinkness = eventMap[event.id].shrinkness; - times.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness)); - times.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness)); + assignSemantics(staffIndex, graph) { + const staff = this.staves[staffIndex]; + console.assert(staff, 'staff is null:', staffIndex, this.staves); + const oy = staff.top + staff.staffY; + graph.getSystemPoints().forEach((point) => { + const p = { ...point }; + p.y += oy; + if (p.extension) { + p.extension = { ...p.extension }; + if (Number.isFinite(p.extension.y1)) { + p.extension.y1 += oy; + p.extension.y2 += oy; + } } + this.semantics.push(p); }); - // partial measure penalty - const partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration); - times.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness)); - times.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness)); - for (const [n, weight] of times.entries()) { - if (n > 1) - solution.loss += Math.log(n) * weight; - } - let spaceTime = 0; - let staffAlters = 0; - solution.voices.forEach((voice) => { - console.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap)); - const start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start - const end = eventMap[voice[voice.length - 1]].endTick; - spaceTime += Math.max(0, start + solution.duration - end); - // staff alternation penalty - let staff = null; - voice.forEach((id) => { - const event = eventMap[id]; - if (event.staff !== staff) { - if (staff !== null) - ++staffAlters; - staff = event.staff; + } + // generate tokens from semantics + assemble(threshold, logger = new DummyLogger()) { + //console.log("System.assignSemantics:", graph); + this.measureBars = []; + if (!this.semantics) + return; + const graph = SemanticGraph.fromPoints(this.semantics); + const bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold); + bars.sort((b1, b2) => b1.x - b2.x); + const staffTop = this.staffTop; + const staffBottom = this.staffBottom; + const MERGE_WINDOW = 0.4; + let lastX = 0; + const barColumns = bars.reduce((columns, bar) => { + const confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1; + const x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX; + lastX = bar.x; + let intensity = columns[x] || 0; + intensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence; + if (bar.x !== x) + delete columns[x]; + columns[bar.x] = intensity; + return columns; + }, {}); + const barXs = Object.entries(barColumns) + .filter(([x, intensity]) => (intensity > 3 * this.staves.length)) + .map(([x]) => Number(x)); + // Include bar positions from whitelisted semantic points + if (this.sidWhiteList.length) { + for (const bar of bars) { + if (this.sidWhiteList.includes(bar.id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) { + barXs.push(bar.x); } - }); + } + } + barXs.sort((x1, x2) => x1 - x2); + barXs.forEach((x, i) => { + if (i <= 0 || x - barXs[i - 1] > 2) + this.measureBars.push(x); }); - solution.loss += (spaceTime * 10) / DURATION_MULTIPLIER; - solution.loss += 5 ** staffAlters - 1; - // tick twist - const eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x); - const tickTwists = eventsXOrder.slice(1).map((e2, i) => { - const e1 = eventsXOrder[i]; - const dx = e2.x - e1.x; - const dt = e2.tick - e1.tick; - if (!dt) - return dx / this.xSpan; - const rate = Math.atan2(dt / solution.duration, dx / this.xSpan); - return ((rate * 4) / Math.PI - 1) ** 2; + if (!this.measureBars.length) + this.measureBars.push(this.width); + this.tidyMeasureBars(); + this.rearrangeMeasures(); + // measure bar type + const typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic)); + typeBars.forEach((bar) => { + const measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1); + if (measure) { + const type = bar.semantic.replace(/^vline_Bar/, ''); + measure.barTypes[type] = measure.barTypes[type] || 0; + measure.barTypes[type] += bar.confidence; + } + }); + let staffIndex = 0; + const staffMask = this.staffMask; + this.staves.forEach((staff, si) => { + // staff index + while (!(staffMask & (1 << staffIndex))) + ++staffIndex; + staff.index = staffIndex++; + // assign semantic boundaries + if (si === 0) + staff.semanticTop = -staff.staffY; + else { + const prevStaff = this.staves[si - 1]; + staff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY); + } + if (si < this.staves.length - 1) { + const nextStaff = this.staves[si + 1]; + staff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY); + } + else + staff.semanticBottom = this.height - (staff.top + staff.staffY); + if (staff.semantics && staff.semantics.length) { + staff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point)); + staff.clearPredictedTokens(); + staff.assemble(threshold, this, logger); + } }); - const tickTwist = Math.max(...tickTwists, 0); - solution.loss += tickTwist ** 2; - console.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters); - if (solution.loss < 0) - solution.loss = Infinity; - } -} - -var EventElementType; -(function (EventElementType) { - EventElementType[EventElementType["PAD"] = 0] = "PAD"; - EventElementType[EventElementType["BOS"] = 1] = "BOS"; - EventElementType[EventElementType["EOS"] = 2] = "EOS"; - EventElementType[EventElementType["CHORD"] = 3] = "CHORD"; - EventElementType[EventElementType["REST"] = 4] = "REST"; -})(EventElementType || (EventElementType = {})); -class EventCluster extends SimpleClass { - constructor(data) { - super(); - super.assign(data); - } - get regular() { - return (this.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) && - this.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) && - this.elements - .slice(1) - .every((elem, ei) => elem.fake || - this.elements[ei].fake || - elem.grace || - this.elements[ei].grace || - elem.fullMeasure || - this.elements[ei].fullMeasure || - elem.tick <= this.elements[ei].tick || - elem.x > this.elements[ei].x)); } - get grant() { - return this.annotation && this.annotation.grant; + qualifiedSemantics(semantics, threshold = 1) { + return semantics + .filter((p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))) + .map((point) => { + // displace semantic point + if (this.displacementSemantics && this.displacementSemantics[point.id]) + return { ...point, ...this.displacementSemantics[point.id] }; + return point; + }); } - get feature() { - return { - index: this.index, - elements: this.elements, - }; + clearTokens() { + this.staves.forEach((staff) => staff.clearTokens()); + this.semantics = []; } - get estimatedDuration() { - const endElem = this.elements.find((elem) => elem.type === EventElementType.EOS); - const tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick; - return Number.isFinite(tick) ? tick : this.duration; + newPoint(staffIndex, data, threshold = 1) { + const staff = this.staves[staffIndex]; + console.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length); + const { semantic, x, y, confidence = 0, extension = null } = data; + const point = { semantic, x, y, confidence, extension }; + if (!point.extension) + delete point.extension; + hashSemanticPoint(this.index, staffIndex, point); + staff.semantics.push(point); + staff.clearPredictedTokens(); + staff.assemble(threshold, this); + return point; } - assignPrediction(prediction) { - console.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index); - this.matrixH = prediction.matrixH; - prediction.elements.forEach((pe) => { - const { index, ...predisposition } = pe; - const elem = this.elements.find((elem) => elem.index === index); - console.assert(elem, 'element not found:', index); - if (elem) - elem.predisposition = predisposition; - }); + appendToken(token) { + this.tokens.push(token); + switch (token.textType) { + case TextType.TempoNumeral: + { + // remove noteheads in text area + const staff = this.staves[0]; + if (staff) { + const oy = staff.top + staff.staffY; + staff.measures.forEach((measure) => { + measure.tokens = measure.tokens.filter((t) => !TokenNoteheads.includes(t.type) || + Math.abs(t.x - token.x) > token.width / 2 || + Math.abs(oy + t.y - token.y) > token.fontSize / 2); + }); + } + } + break; + case TextType.Alternation1: + case TextType.Alternation2: + //console.log("appendToken:", token, this.staves[0].measures); + this.staves[0].measures.forEach((measure) => { + const overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2); + measure.alternative = measure.alternative || overlap / measure.width > 0.5; + }); + break; + } } } -EventCluster.className = 'EventCluster'; -EventCluster.blackKeys = ['id']; -class EventClusterSet extends SimpleClass { +System.className = 'System'; +System.blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent']; +class Page extends SimpleClass { constructor(data) { super(); super.assign(data); + this.systems = this.systems || []; + if (this.source) { + this.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0]; + } } - trimIrregular() { - let ir = 0; - this.clusters = this.clusters.filter((cluster) => { - const regular = cluster.regular; - if (!regular) { - console.debug('irregular cluster:', cluster); - ++ir; - } - return regular; - }); - if (ir) - console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`); - else - console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`); - return ir; - } -} -EventClusterSet.className = 'EventClusterSet'; - -class PatchMeasure extends SimpleClass { - constructor(data) { - super(); - Object.assign(this, data); - } - get staffN() { - return Math.floor(Math.log2(this.staffMask)) + 1; - } - get basics() { - return Array(this.staffN).fill(this.basic); - } - get duration() { - return Math.max(0, ...(this.voices || []).map((ids) => { - const events = ids.map((id) => this.events.find((e) => e.id === id)); - return events.reduce((duration, event) => duration + event.duration, 0); - })); + get sidBlackList() { + const ids = [].concat(...this.systems.map((system) => system.sidBlackList)); + return new Set(ids); } -} -PatchMeasure.className = 'PatchMeasure'; - -var SimplePolicy; -(function (SimplePolicy) { - const constructXMap = (measure) => { - const xMap = new Map(); - // mark full measure rests - measure.rows.forEach((row) => { - if (row.events.length === 1) { - const event = row.events[0]; - if (event.rest && event.division === 0) - event.rest = 'R'; - } - }); - measure.events.forEach((event) => { - const x = Math.round(event.pivotX * 10) / 10; - let key = 0; - if (event.fullMeasureRest) - key = Math.min(x, ...xMap.keys()); - else { - key = - [...xMap.keys()].find((k) => { - // check if the event is aligned with the current chord - const es = xMap.get(k); - const left = Math.min(...es.map((e) => e.left)); - const right = Math.max(...es.map((e) => e.right)); - const overlaySize = Math.min(right, event.right) - Math.max(left, event.left); - return overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62; - }) || x; - } - event.roundX = key; - const es = xMap.get(key) || []; - xMap.set(key, es); - es.push(event); + get sidWhiteList() { + const ids = [].concat(...this.systems.map((system) => system.sidWhiteList)); + return new Set(ids); + } + clearTokens() { + this.semantics = null; + this.tokens = null; + this.systems.forEach((system) => (system.tokens = null)); + } + assignTexts(areas, [imageHeight, imageWidth]) { + const interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height; + this.semantics = areas.map((area) => { + const p = { + x: (area.cx - imageWidth / 2) / interval, + y: (area.cy - imageHeight / 2) / interval, + }; + const rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p; + return { + confidence: area.score, + x: rp.x + this.width / 2, + y: rp.y + this.height / 2, + semantic: SemanticType.rect_Text, + extension: { + text: area.text, + type: area.type, + width: area.width / interval, + height: area.height / interval, + theta: area.theta, + textFeature: area.feature_dict, + }, + }; }); - return xMap; - }; - SimplePolicy.computeMeasureTicks = (measure) => { - const xMap = constructXMap(measure); - let tick = 0; - const ts = new Set([tick]); - const eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]); - for (const [x, events] of eventGroups) { - events.forEach((event) => { - if (event.predisposition) { - event.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest; - event.grace = event.predisposition.grace ? GraceType.Grace : null; - event.division = argmax$1(event.predisposition.divisionVector); - event.dots = argmax$1(event.predisposition.dotsVector); - if (event.predisposition.timeWarped > 0.5) - event.timeWarp = frac(2, 3); - } - if (event.fullMeasureRest) - event.tick = 0; - else { - if (event.zeroHolder) - tick -= event.duration; - if (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) - event.tick = event.predisposition.tick; - else - event.tick = tick; - ts.add(event.tick + event.duration); - } - //console.log("append tick:", event.tick + event.duration, event); - }); - ts.delete(tick); - //column.xToTick[x] = tick; - if (ts.size) - tick = Math.min(...ts); + } + assemble({ textAnnotations = null } = {}, logger = new DummyLogger()) { + this.tokens = []; + this.systems.forEach((system) => (system.tokens = [])); + // compute system indent + if (this.systems.length) { + const sysXs = this.systems.map((system) => system.left); + const middleX = sysXs[Math.floor((sysXs.length - 1) / 2)]; + this.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD)); } - if (Number.isInteger(measure.estimatedDuration)) - measure.duration = measure.estimatedDuration; - else - measure.duration = Math.max(...ts, 0); - }; - SimplePolicy.computeMeasureVoices = (measure) => { - measure.voices = []; - for (const row of measure.rows) { - const events = row.events.filter((event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)); - const eventSet = new Set(events); - while (eventSet.size) { - let tick = 0; - const voice = []; - const pushEvent = (e) => { - voice.push(e.id); - if (!e.zeroHolder) - tick += e.duration; - eventSet.delete(e); + if (this.semantics) { + const pageName = this.source ? this.source.name : this.index.toString(); + this.semantics.forEach((point) => { + hashPageSemanticPoint(pageName, point); + const fields = { + id: point.id, + type: TokenType.Text, + confidence: point.confidence, + textType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type, + text: (textAnnotations && textAnnotations[point.id]) || point.extension.text, + textFeasure: point.extension.textFeature, + width: point.extension.width, + fontSize: point.extension.height, }; - const e0 = events.find((e) => eventSet.has(e)); - if (e0.alignedTick > 0) { - //voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick }); - tick = e0.alignedTick; - } - pushEvent(e0); - while (true) { - // TODO: consider slur pair - const e = events.find((e) => eventSet.has(e) && e.alignedTick === tick); - if (!e) + switch (point.semantic) { + case SemanticType.rect_Text: + switch (fields.textType) { + // page tokens + case TextType.Title: + case TextType.Author: + case TextType.PageMargin: + case TextType.Other: + this.tokens.push(new TextToken({ + x: point.x, + y: point.y, + ...fields, + })); + break; + // tokens on the top of system + case TextType.TempoNumeral: + case TextType.Chord: + case TextType.MeasureNumber: + case TextType.Instrument: + case TextType.Alternation1: + case TextType.Alternation2: + { + const system = this.systems.find((system) => system.top + system.staffTop > point.y); + if (system) { + system.appendToken(new TextToken({ + x: point.x - system.left, + y: point.y - system.top, + ...fields, + })); + } + } + break; + // tokens in staff + case TextType.TextualMark: + case TextType.Times: + { + const system = [...this.systems].reverse().find((system) => system.top < point.y); + if (system) { + const sy = point.y - (system.top + system.staffTop); + const sx = point.x - system.left; + const staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height); + if (staff) { + const measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width); + if (measure) { + measure.tokens.push(new TextToken({ + x: sx, + y: sy, + ...fields, + })); + } + } + } + } + break; + } break; - pushEvent(e); } - //if (tick < measure.duration) - // voice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick }); - measure.voices.push(voice); - } - } - }; -})(SimplePolicy || (SimplePolicy = {})); -const solveGraceEvents = (measure) => { - const graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/); - if (!graceEvents.length) - return; - const tickMap = measure.tickMap; - const staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => { - events.forEach((event) => { - if (!event.grace) { - smap[event.staff] = smap[event.staff] || {}; - const oldEvent = smap[event.staff][tick]; - smap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent; - } - }); - return smap; - }, {}); - const staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => { - map[staff] = Object.entries(emap) - .map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] })) - .sort((p1, p2) => p1.event.x - p2.event.x); - map[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar - let tick = 0; - map[staff].forEach((position) => { - if (position.tick > tick) { - position.preTick = tick; - tick = position.tick; - } - }); - return map; - }, {}); - // append grace events into positions - graceEvents.forEach((event) => { - const staff = staffPositions[event.staff]; - if (staff) { - const position = staff.find((p) => p.event.x > event.x); - if (position) - position.graces.push(event); - event.roundX = event.x; - //if (position.tick >= measure.duration) - // event.grace = GraceType.AfterGrace; - } - }); - Object.values(staffPositions).forEach((staff) => staff.forEach((position) => { - if (position.graces.length) { - position.event.graceIds = position.graces.map((e) => e.id); - const totalDuration = position.graces.reduce((t, e) => t + e.duration, 0); - const duration = Math.min(totalDuration, position.tick - position.preTick); - const warp = duration / totalDuration; - let tick = position.tick; - [...position.graces].reverse().forEach((event) => { - event.tick = Math.round(tick - event.duration * warp); - tick = event.tick; }); } - })); + } +} +Page.className = 'Page'; +Page.blackKeys = ['index', 'tokens']; + +var SemanticElementType; +(function (SemanticElementType) { + SemanticElementType[SemanticElementType["BOS"] = 0] = "BOS"; + SemanticElementType[SemanticElementType["PAD"] = 1] = "PAD"; + SemanticElementType[SemanticElementType["NoteheadS0"] = 2] = "NoteheadS0"; + SemanticElementType[SemanticElementType["NoteheadS1"] = 3] = "NoteheadS1"; + SemanticElementType[SemanticElementType["NoteheadS2"] = 4] = "NoteheadS2"; + SemanticElementType[SemanticElementType["NoteheadGrace"] = 5] = "NoteheadGrace"; + SemanticElementType[SemanticElementType["vline_Stem"] = 6] = "vline_Stem"; + SemanticElementType[SemanticElementType["Flag3"] = 7] = "Flag3"; + SemanticElementType[SemanticElementType["BeamLeft"] = 8] = "BeamLeft"; + SemanticElementType[SemanticElementType["BeamContinue"] = 9] = "BeamContinue"; + SemanticElementType[SemanticElementType["BeamRight"] = 10] = "BeamRight"; + SemanticElementType[SemanticElementType["Dot"] = 11] = "Dot"; + SemanticElementType[SemanticElementType["Rest0"] = 12] = "Rest0"; + SemanticElementType[SemanticElementType["Rest1"] = 13] = "Rest1"; + SemanticElementType[SemanticElementType["Rest2"] = 14] = "Rest2"; + SemanticElementType[SemanticElementType["Rest3"] = 15] = "Rest3"; + SemanticElementType[SemanticElementType["Rest4"] = 16] = "Rest4"; + SemanticElementType[SemanticElementType["Rest5"] = 17] = "Rest5"; + SemanticElementType[SemanticElementType["Rest6"] = 18] = "Rest6"; + // measure time signature denominators & numerators + SemanticElementType[SemanticElementType["TimeD2"] = 19] = "TimeD2"; + SemanticElementType[SemanticElementType["TimeD4"] = 20] = "TimeD4"; + SemanticElementType[SemanticElementType["TimeD8"] = 21] = "TimeD8"; + SemanticElementType[SemanticElementType["TimeN1"] = 22] = "TimeN1"; + SemanticElementType[SemanticElementType["TimeN2"] = 23] = "TimeN2"; + SemanticElementType[SemanticElementType["TimeN3"] = 24] = "TimeN3"; + SemanticElementType[SemanticElementType["TimeN4"] = 25] = "TimeN4"; + SemanticElementType[SemanticElementType["TimeN5"] = 26] = "TimeN5"; + SemanticElementType[SemanticElementType["TimeN6"] = 27] = "TimeN6"; + SemanticElementType[SemanticElementType["TimeN7"] = 28] = "TimeN7"; + SemanticElementType[SemanticElementType["TimeN8"] = 29] = "TimeN8"; + SemanticElementType[SemanticElementType["TimeN9"] = 30] = "TimeN9"; + SemanticElementType[SemanticElementType["TimeN10"] = 31] = "TimeN10"; + SemanticElementType[SemanticElementType["TimeN11"] = 32] = "TimeN11"; + SemanticElementType[SemanticElementType["TimeN12"] = 33] = "TimeN12"; +})(SemanticElementType || (SemanticElementType = {})); +const TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]])); +const TIME_SIG_NUMERATORS = Object.fromEntries(Array(12) + .fill(null) + .map((_, i) => i + 1) + .map((n) => [n, SemanticElementType[`TimeN${n}`]])); +const et = SemanticElementType; +const ELEMENT_TOKEN_NAMES = { + [et.BOS]: 'BOS', + [et.NoteheadS0]: 'noteheads-s0', + [et.NoteheadS1]: 'noteheads-s1', + [et.NoteheadS2]: 'noteheads-s2', + [et.NoteheadGrace]: 'GraceNotehead', + [et.Flag3]: 'flags-u3', + [et.BeamLeft]: 'BeamLeft', + [et.BeamContinue]: 'BeamContinue', + [et.BeamRight]: 'BeamRight', + [et.Dot]: 'dot', + [et.Rest0]: 'rests-0o', + [et.Rest1]: 'rests-1o', + [et.Rest2]: 'rests-2', + [et.Rest3]: 'rests-3', + [et.Rest4]: 'rests-4', + [et.Rest5]: 'rests-5', + [et.Rest6]: 'rests-6', }; -const solveTremoloPairs = (measure) => { - const catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace); - const pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace); - catchers.forEach((catcher) => { - let candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x); - if (!candidates.length) - candidates = measure.events.filter((event) => Number.isFinite(event.tick) && - !event.grace && - !event.rest && - event.division === catcher.division && - event.dots === catcher.dots && - event.x < catcher.x); - candidates.sort((c1, c2) => c2.x - c1.x); - if (candidates.length) { - const pitcher = candidates[0]; - pitcher.catcherId = catcher.id; - const tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3); - pitcher.tremolo = tremolo; - catcher.tremolo = tremolo; - if (!catcher.tick) - catcher.tick = pitcher.tick + pitcher.duration / 2; - const pi = pitchers.indexOf(pitcher); - if (pi >= 0) - pitchers.splice(pi, 1); - } - }); +const NOTEHEAD_BASE_DIVISION = { + [et.NoteheadS0]: 0, + [et.NoteheadS1]: 1, + [et.NoteheadS2]: 2, + [et.NoteheadGrace]: 2, }; -var EquationPolicy; -(function (EquationPolicy) { - const DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13; - const CHORDS_SEAM_SIGMA = 0.6; - const NEIGHBOR_CHORDS_SIGMA = 1.6; - const Y_DECAY_SIGMA = 16; - const STAFF_DECAY_FACTOR = 2; - const STEM_DIRECTION_DECAY = 0.9; - const ILL_BEAMS_PENALTY = 0.2; - const INVERT_SQRT2 = 0.7071067811865475; - const MATRIX_H_WEIGHT = 3; - const FINE_BEAMS = [ - [null, null], - [null, StemBeam.Open], - [StemBeam.Open, StemBeam.Continue], - [StemBeam.Open, StemBeam.Close], - [StemBeam.Continue, StemBeam.Continue], - [StemBeam.Continue, StemBeam.Close], - [StemBeam.Close, null], - [StemBeam.Close, StemBeam.Open], - ].map((bb) => bb.join('-')); - const solveStaffGroup = (staffGroup, options) => { - if (!staffGroup.events.length) { - return { - events: [], - voices: [], - duration: 0, - }; +const NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace]; +const REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6]; +const BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight]; +const NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES]; +const SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem]; +const TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES]; +const ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem]; +const ELEMENT_TO_STEMBEAM = { + [et.BeamLeft]: 'Open', + [et.BeamRight]: 'Close', +}; +const metaElem = (type) => ({ + type, + staff: -1, + x: 0, + y1: 0, + y2: 0, +}); +const BOS_ELEMENT = metaElem(SemanticElementType.BOS); +const fractionToElems = (fraction) => [ + metaElem(TIME_SIG_NUMERATORS[fraction.numerator]), + metaElem(TIME_SIG_DENOMINATORS[fraction.denominator]), +]; +const argmax = (data, mask) => { + const values = data.filter((_, i) => mask[i]); + const max = Math.max(...values); + return data.findIndex((x) => x === max); +}; +class SemanticCluster extends SimpleClass { + static elementToJSON(elem) { + const result = { + type: elem.type, + staff: elem.staff, + x: elem.x, + y1: elem.y1, + y2: elem.y2, + }; + if (elem.id) + result.id = elem.id; + return result; + } + constructor(data) { + super(); + super.assign(data); + } + get sourceMask() { + return this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type)); + } + get targetMask() { + return this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type)); + } + get vMask() { + return this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type)); + } + get compactMatrixH() { + if (!this.matrixH) + return null; + const sourceMask = this.sourceMask; + const targetMask = this.targetMask; + return this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j])); + } + set compactMatrixH(value) { + this.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]); + } + get compactMatrixV() { + if (!this._matrixV) + return null; + const vMask = this.vMask; + const matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j])); + return [].concat(...matrix.map((row, i) => row.slice(0, i))); + } + set compactMatrixV(value) { + this.matrixV = value && expandMatrixByMaskTriu(value, this.vMask); + } + get matrixV() { + return this.groupsV && matrixFromGroups(this.elements.length, this.groupsV); + } + set matrixV(value) { + if (!value) { + this.groupsV = null; + this._matrixV = value; + return; } - const solver = new Solver(staffGroup, options); - return solver.solve(); - }; - EquationPolicy.estiamteMeasure = (measure) => { - const allEvents = measure.events - .filter((event) => !event.zeroHolder) - .map((event) => ({ - id: event.id, - staff: event.staff, - x: event.x, - tickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x, - tipX: event.tipX, - y: event.tipY + event.staff * 100, - duration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION, - division: event.division, - dots: event.dots, - stemDirection: event.stemDirection, - beam: event.beam, - rest: event.rest, - // the possibility of full measure rest - pR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0, - fakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0, - shrinkness: event.predisposition ? event.predisposition.timeWarped : null, - })); - let expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator; - if (Number.isFinite(measure.estimatedDuration)) - expectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4)); - const staffGroupMap = measure.staffGroups.reduce((map, staves, group) => { - staves.forEach((staff) => (map[staff] = group)); - return map; - }, {}); - const ids = [0, ...allEvents.map((e) => e.id)]; // compact ids - const ievents = allEvents.map((e) => ({ - ...e, - id: ids.indexOf(e.id), - x: e.x - measure.startX, - confidence: (1 - e.pR) * (1 - e.fakeP), - shrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4), - staffGroup: staffGroupMap[e.staff], - })); - // estimate topology matrices - const matrixH = Array(ids.length + 1) - .fill(null) - .map(() => Array(ids.length).fill(0)); - const matrixV = Array(ids.length) - .fill(null) - .map(() => Array(ids.length).fill(0)); - //const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2); - const hp = (dx) => erf__default["default"](dx / NEIGHBOR_CHORDS_SIGMA) * erf__default["default"](NEIGHBOR_CHORDS_SIGMA / dx); - for (const e1 of ievents) { - for (const e2 of ievents) { - matrixV[e1.id][e2.id] = - e1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf__default["default"](((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0; - if (e1.staffGroup !== e2.staffGroup) - matrixH[e1.id][e2.id] = 0; - // prohibit voice crossing staff groups - else if (e1.x <= e2.x) - matrixH[e1.id][e2.id] = 0; - else { - const staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR); - const yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1; - const dx = e1.x - e2.x; - const dtx = e1.tipX - e2.tipX; - matrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT); + const THRESHOLD = 0.5; + const groups = []; + const vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i]))); + value.forEach((row, i) => { + if (vMask[i]) { + let found = false; + for (let j = 0; j < i; ++j) { + const cell = row[j]; + if (cell >= THRESHOLD) { + const g = groups.findIndex((group) => group.includes(j)); + groups[g].push(i); + found = true; + break; + } } - // weaken full measure rest connections - const nR = (1 - e1.pR) * (1 - e2.pR); - matrixV[e1.id][e2.id] *= nR; - matrixH[e1.id][e2.id] *= nR; - if (matrixV[e1.id][e2.id] < 1e-2) - matrixV[e1.id][e2.id] = 0; - // weaken inconsistent stem directions - if (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) - matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY; - // ill beams penalty - if (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) - matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY; + if (!found) + groups.push([i]); } - // H possibility of e1 and end of measure - matrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT); - } + }); + this.groupsV = groups; + this._matrixV = value; + } + toJSON() { return { - ids, - events: ievents, - expectedDuration, - measureShrinkness: 0, - endX: measure.position.right, - matrixH, - matrixV, + __prototype: 'SemanticCluster', + index: this.index, + elements: this.elements.map(SemanticCluster.elementToJSON), + compactMatrixH: this.compactMatrixH, + compactMatrixV: this.compactMatrixV, + //groupsV: this.groupsV, }; - }; - EquationPolicy.regulateMeasure = async (measure, { solver = null, ...options }) => { - const env = EquationPolicy.estiamteMeasure(measure); - const { ids, matrixH, matrixV } = env; - // copy matrices values from measure topology data - if (measure.matrixH) { - console.assert(measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1], 'matrix shape mismatch:', ids.length, `${measure.matrixH.length}x${measure.matrixH[0].length}`, `${matrixH.length}x${matrixH[0].length}`); - for (let i = 0; i < ids.length + 1; i++) { - const ii = i < ids.length ? ids[i] : measure.matrixH.length - 1; - for (let j = 1; j < ids.length; j++) - matrixH[i][j] = measure.matrixH[ii][ids[j]]; - } - } - if (measure.matrixV) { - matrixV.forEach((row, i) => row.forEach((_, j) => { - const mp = measure.matrixV[ids[i]][ids[j]]; - if (Number.isFinite(mp)) - matrixV[i][j] = mp; - })); + } + static mapMatrix(matrix, x2i, i2x) { + const rows = x2i.reduce((rows, i, x) => { + if (rows[i]) + rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0)); + else + rows[i] = matrix[x]; + return rows; + }, []); + return rows.map((row) => i2x.map((x) => row[x])); + } + mergeOverlapping() { + const overlaps = this.overlappedNoteheads(); + if (overlaps.length) { + const x2i = this.elements.map((_, index) => { + const pair = overlaps.find((ij) => index === ij[1]); + const i = pair ? pair[0] : index; + return i - overlaps.filter((ij) => ij[1] < i).length; + }); + const i2x = Array(this.elements.length - overlaps.length) + .fill(null) + .map((_, i) => x2i.findIndex((ii) => ii === i)); + this.elements = i2x.map((x) => this.elements[x]); + console.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x); + this.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x); + this.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x])))); } - if (Number.isFinite(measure.estimatedDuration)) - env.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3); - if (options.logger) - options.logger.info('--- MEASURE', measure.measureIndex, '---', env); - const solution = solver ? await solver(env, options) : solveStaffGroup(env, options); - const resultEvents = solution.events.map((e) => ({ - ...e, - id: env.ids[e.id], // decode compact ids - })); - resultEvents.forEach((e) => { - const event = measure.events.find((e0) => e0.id === e.id); - event.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null; - event.tickGroup = e.tickGroup; - event.timeWarp = e.timeWarp; - }); - measure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER); - measure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id])); - measure.solutionStat = { - loss: solution.loss, - solverCredits: solution.credits, - solverTimes: solution.times, - }; - // full measure rests - measure.events.forEach((event) => { - const result = resultEvents.find((e) => e.id === event.id); - if (!result) - return; - else if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) { - event.tick = 0; - event.tickGroup = 0; - event.rest = 'R'; - event.duration = measure.duration; - measure.voices.push([event.id]); - } - else if (event.rest === 'R') { - event.tick = 0; - event.tickGroup = 0; - event.duration = measure.duration; - measure.voices.push([event.id]); - } - }); - }; - EquationPolicy.regulateMeasureWithRectification = async (measure, rectification, { solver = null, ...options }) => { - const allEvents = measure.events - .filter((event) => !event.zeroHolder) - .map((event) => { - const re = rectification.events.find((e) => e && e.id === event.id); - const division = Number.isFinite(re?.division) ? re.division : event.division; - const dots = Number.isFinite(re?.dots) ? re.dots : event.dots; - const duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots); - return { - id: event.id, - staff: event.staff, - x: event.x, - tickEstimated: event.predisposition?.tick, - y: event.tipY + event.staff * 100, - duration, - // the possibility of full measure rest - pR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0, - fakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0, - shrinkness: event.predisposition?.timeWarped || 0, - }; - }); - let expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator; - if (Number.isFinite(measure.estimatedDuration)) - expectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4)); - const staffGroupMap = measure.staffGroups.reduce((map, staves, group) => { - staves.forEach((staff) => (map[staff] = group)); - return map; - }, {}); - const ids = [0, ...allEvents.map((e) => e.id)]; // compact ids - const ievents = allEvents.map((e) => ({ - ...e, - id: ids.indexOf(e.id), - x: e.x - measure.startX, - confidence: (1 - e.pR) * (1 - e.fakeP), - shrinkness: e.shrinkness, - staffGroup: staffGroupMap[e.staff], - })); - // estimate topology matrices - const matrixH = Array(ids.length + 1) - .fill(null) - .map(() => Array(ids.length).fill(0)); - const matrixV = Array(ids.length) - .fill(null) - .map(() => Array(ids.length).fill(0)); - for (const e1 of ievents) { - for (const e2 of ievents) { - matrixV[e1.id][e2.id] = - e1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf__default["default"](((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0; - // weaken full measure rest connections - const nR = (1 - e1.pR) * (1 - e2.pR); - matrixV[e1.id][e2.id] *= nR; - if (matrixV[e1.id][e2.id] < 1e-2) - matrixV[e1.id][e2.id] = 0; + } + overlappedNoteheads() { + const indices = []; + const noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type)); + for (let i = 0; i < noteheads.length; ++i) { + const nh1 = noteheads[i]; + for (let j = i + 1; j < noteheads.length; ++j) { + const nh2 = noteheads[j]; + if ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) + indices.push([nh1.index, nh2.index]); } } - // copy matrices values from measure topology data - console.assert(measure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1], 'matrix shape mismatch:', ids.length, `${measure.matrixH.length}x${measure.matrixH[0].length}`, `${matrixH.length}x${matrixH[0].length}`); - for (let i = 0; i < ids.length + 1; i++) { - const ii = i < ids.length ? ids[i] : measure.matrixH.length - 1; - for (let j = 1; j < ids.length; j++) - matrixH[i][j] = measure.matrixH[ii][ids[j]]; - } - let measureShrinkness = 0; - if (Number.isFinite(measure.estimatedDuration)) - measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3); - const env = { - ids, - events: ievents, - expectedDuration, - measureShrinkness, - endX: measure.position.right, - matrixH, - matrixV, - }; - const solution = solver ? await solver(env, options) : solveStaffGroup(env, options); - const priority = -solution.loss; - const events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => { - const re = rectification.events.find((e) => e && e.id === id); - const tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick; - return { - id, - tick: tickN, - tickGroup, - timeWarp, - division: re?.division, - dots: re?.dots, - }; - }); - const duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER); - return { - events, - voices: solution.voices, - duration, - priority, - }; - }; -})(EquationPolicy || (EquationPolicy = {})); -class SpartitoMeasure extends SimpleClass { - static reorderEvents(events, staffYsFull) { - const HALF_NOTEHEAD = 0.7; - const ys = []; - const es = events.map((e) => ({ - id: e.id, - staff: e.staff, - x: e.x / HALF_NOTEHEAD, - rx: 0, - ry: staffYsFull[e.staff] + e.tipY, - tipY: e.tipY, - prior: 0, - })); - es.sort((e1, e2) => e1.x - e2.x); - es.slice(1).forEach((e, i) => { - const dx = Math.min(Math.round(e.x - es[i].x), 2); - e.rx = es[i].rx + dx; + return indices; + } + getEvents() { + console.assert(this.matrixH, '[SemanticCluster.getEvents] matrixH is null.'); + const NOTE_STEM_CONFIDENCE = 0.5; + const ids = Array(this.elements.length) + .fill(null) + .map((_, index) => index); + const targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type)); + //const stems = ids.filter(i => this.elements[i].type === et.vline_Stem); + const stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model + const stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type)); + const s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0); + const subS0Masks = ids.map(() => false); + // root elements: top NoteheadS0, Rests, stem with noteheads + const stemMap = {}; + stemNotes.forEach((id) => { + const note = this.elements[id]; + const stems = ids + .filter((i) => stemMasks[i]) + .filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range + .sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence + .slice(0, 2) + .filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE); + stems.forEach((stem) => { + stemMap[stem] = stemMap[stem] || []; + stemMap[stem].push(id); + }); }); - es.forEach((e) => { - e.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01; - if (!ys.includes(e.ry)) - ys.push(e.ry); + s0s.forEach((id) => { + const s0 = this.elements[id]; + const prevId = argmax(this.matrixH[id], targetMask); + const prev = this.elements[prevId]; + if (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) { + subS0Masks[id] = true; + stemMap[prevId] = stemMap[prevId] || [prevId]; + stemMap[prevId].push(id); + } + else + stemMap[id] = stemMap[id] || [id]; }); - es.sort((e1, e2) => e1.prior - e2.prior); - ys.sort((y1, y2) => y1 - y2); - let yi = 0; - const yis = ys.map((y, i) => { - if (!i || ys[i] - ys[i - 1] < 0.5) - return yi; - ++yi; - return yi; + // setup linkings + const linkings = {}; + const roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type)); + roots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later + const parentMasks = ids.map((id) => id === et.BOS); + roots.forEach((id) => { + const parentId = argmax(this.matrixH[id], parentMasks); + linkings[id] = parentId; + if (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) + parentMasks[parentId] = false; + parentMasks[id] = true; }); - const result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] })); - result.forEach((e, i) => (e.id = i + 1)); - return result; + //console.log("topology:", stemMap, linkings); + const dots = this.elements.filter((elem) => elem.type === et.Dot); + const flags = this.elements.filter((elem) => elem.type === et.Flag3); + const beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type)); + const groupsV = this.groupsV; + return roots + .map((rootId) => { + const root = this.elements[rootId]; + const tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null; + if (REST_ELEMENT_TYPES.includes(root.type)) { + const nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1); + return { + left: root.x - 0.75, + right: root.x + 0.75, + pivotX: root.x, + rest: true, + ys: [root.y1], + noteIds: [root.id], + dots: nearbyDots.length, + division: root.type - et.Rest0, + stemDirection: null, + id: rootId, + prevId: linkings[rootId], + staff: root.staff, + tickGroup, + }; + } + else if (stemMap[rootId]) { + const subNotes = stemMap[rootId].map((id) => this.elements[id]); + const left = Math.min(...subNotes.map((n) => n.x - 0.7)); + const right = Math.max(...subNotes.map((n) => n.x + 0.7)); + subNotes.sort((n1, n2) => n2.y1 - n1.y1); + const ys = subNotes.map((note) => note.y1); + const noteIds = subNotes.map((note) => note.id); + const top = ys[0]; + const bottom = ys[ys.length - 1]; + const nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5); + const dotGroups = nearbyDots.reduce((groups, dot) => { + const y = roundNumber(dot.y1, 0.5); + groups[y] = groups[y] || []; + groups[y].push(dot); + return groups; + }, {}); + const dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0); + let division = NOTEHEAD_BASE_DIVISION[subNotes[0].type]; + let stemDirection = null; + let beam = null; + let tip = null; + if (root.type === et.vline_Stem) { + const topTip = top - root.y1; + const bottomTip = root.y2 - bottom; + stemDirection = topTip > bottomTip ? 'u' : 'd'; + tip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 }; + if (division === 2) { + const flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4]; + const nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]); + division += nearbyFlags.length; + } + //const tipY = stemDirection === "u" ? root.y1 : root.y2; + const tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2]; + const beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]); + beam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null; + } + const grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null; + return { + left, + right, + pivotX: root.x, + ys, + tip, + noteIds, + division, + dots: dotValue, + rest: false, + stemDirection, + beam, + id: rootId, + prevId: linkings[rootId], + staff: subNotes[0].staff, + grace, + tickGroup, + }; + } + }) + .filter(Boolean); } +} +class SemanticClusterSet { constructor(data) { - super(); - super.assign(data); - if (!this.originalRegulationHash && !this.regulated) - this.originalRegulationHash = this.regulationHash; - this.barTypes = this.barTypes || {}; - // Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON) - // to set endEvent and roundX needed for playback cursor positioning. - if (this.regulated && this.position) - this.postRegulate(); - } - get timeSignature() { - return this.basics && this.basics[0].timeSignature; - } - get keySignature() { - return this.basics && this.basics[0].keySignature; - } - get timeSignatureChanged() { - return this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)); - } - get doubtfulTimesig() { - return this.basics && this.basics[0].doubtfulTimesig; - } - get regulated() { - return !!this.voices; + if (data) { + this.clusters = data.clusters; + // upgrade vocab + if (data.vocab) { + const converts = data.vocab + .map((name, i) => [i, SemanticElementType[name]]) + .filter(([x, y]) => x !== y) + .reduce((table, [x, y]) => ((table[x] = y), table), {}); + this.clusters.forEach((connection) => connection.elements.forEach((elem) => { + if (Number.isFinite(converts[elem.type])) + elem.type = converts[elem.type]; + })); + } + } } - get validRegulated() { - if (!this.voices) - return false; - return this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick)); + toJSON() { + const vocab = Object.entries(SemanticElementType) + .filter((entry) => Number.isFinite(entry[1])) + .map((entry) => entry[0]); + return { + __prototype: 'SemanticClusterSet', + vocab, + clusters: this.clusters.map((c) => c.toJSON()), + }; } - get rows() { - return this.contexts.map((contexts, si) => { - const events = this.events.filter((e) => e.staff === si); +} +const expandMatrixByMasks = (matrix, masks) => { + const gen = function* () { + for (const x of matrix) + yield x; + }; + const iter = gen(); + const [maskSrc, maskTar] = masks; + return maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null))); +}; +const expandMatrixByMaskTriu = (matrix, mask) => { + const gen = function* () { + for (const x of matrix) + yield x; + }; + const iter = gen(); + return mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null))); +}; +const matrixFromGroups = (len, groups) => { + const groupIds = Array(len) + .fill(null) + .map((_, i) => groups.findIndex((group) => group.includes(i))); + return Array(len) + .fill(null) + .map((_, i) => Array(len) + .fill(null) + .map((_, j) => { + if (j >= i) + return null; + const id1 = groupIds[i]; + const id2 = groupIds[j]; + if (id1 < 0 || id2 < 0) + return null; + return id1 === id2 ? 1 : 0; + })); +}; + +// implicit note (from expressive marks) types +var ImplicitType; +(function (ImplicitType) { + ImplicitType[ImplicitType["None"] = 0] = "None"; + ImplicitType["Mordent"] = "mordent"; + ImplicitType["Prall"] = "prall"; + ImplicitType["Turn"] = "turn"; + ImplicitType["Trill"] = "trill"; + ImplicitType["Tremolo"] = "tremolo"; + ImplicitType["Arpeggio"] = "arpeggio"; +})(ImplicitType || (ImplicitType = {})); + +/* Wrapper for accessing buffer through sequential reads */ + + + +var stream = class Stream { + constructor (buffer) { + this.array = new Uint8Array(buffer); + this.position = 0; + } + + + eof () { + return this.position >= this.array.length; + } + + + read (length) { + const result = this.array.slice(this.position, this.position + length); + this.position += length; + + return result; + } + + + readString (length) { + const data = Array.from(this.read(length)); + + return data.map(c => String.fromCharCode(c)).join(""); + } + + + // read a big-endian 32-bit integer + readInt32 () { + const result = ( + (this.array[this.position] << 24) + + (this.array[this.position + 1] << 16) + + (this.array[this.position + 2] << 8) + + this.array[this.position + 3]); + this.position += 4; + + return result; + } + + + // read a big-endian 16-bit integer + readInt16 () { + const result = ( + (this.array[this.position] << 8) + + this.array[this.position + 1]); + this.position += 2; + + return result; + } + + + // read an 8-bit integer + readInt8 (signed) { + let result = this.array[this.position]; + if (signed && result > 127) + result -= 256; + this.position += 1; + + return result; + } + + + /* read a MIDI-style variable-length integer + (big-endian value in groups of 7 bits, + with top bit set to signify that another byte follows) + */ + readVarInt () { + let result = 0; + while (true) { + const b = this.readInt8(); + if (b & 0x80) { + result += (b & 0x7f); + result <<= 7; + } + else { + // b is the last byte + return result + b; + } + } + } +}; + +/* +class to parse the .mid file format +(depends on stream.js) +*/ + +const Stream = stream; + + + +var midifile = function MidiFile (data) { + function readChunk (stream) { + const id = stream.readString(4); + const length = stream.readInt32(); + + return { + id, + length, + data: stream.read(length), + }; + } + + let lastEventTypeByte; + + function readEvent (stream) { + const event = {}; + event.deltaTime = stream.readVarInt(); + let eventTypeByte = stream.readInt8(); + if ((eventTypeByte & 0xf0) === 0xf0) { + // system / meta event + if (eventTypeByte === 0xff) { + // meta event + event.type = "meta"; + const subtypeByte = stream.readInt8(); + const length = stream.readVarInt(); + + switch (subtypeByte) { + case 0x00: + event.subtype = "sequenceNumber"; + if (length !== 2) + throw new Error("Expected length for sequenceNumber event is 2, got " + length); + event.number = stream.readInt16(); + + return event; + case 0x01: + event.subtype = "text"; + event.text = stream.readString(length); + + return event; + case 0x02: + event.subtype = "copyrightNotice"; + event.text = stream.readString(length); + + return event; + case 0x03: + event.subtype = "trackName"; + event.text = stream.readString(length); + + return event; + case 0x04: + event.subtype = "instrumentName"; + event.text = stream.readString(length); + + return event; + case 0x05: + event.subtype = "lyrics"; + event.text = stream.readString(length); + + return event; + case 0x06: + event.subtype = "marker"; + event.text = stream.readString(length); + + return event; + case 0x07: + event.subtype = "cuePoint"; + event.text = stream.readString(length); + + return event; + case 0x20: + event.subtype = "midiChannelPrefix"; + if (length !== 1) + throw new Error("Expected length for midiChannelPrefix event is 1, got " + length); + event.channel = stream.readInt8(); + + return event; + case 0x2f: + event.subtype = "endOfTrack"; + if (length !== 0) + throw new Error("Expected length for endOfTrack event is 0, got " + length); + + return event; + case 0x51: + event.subtype = "setTempo"; + if (length !== 3) + throw new Error("Expected length for setTempo event is 3, got " + length); + event.microsecondsPerBeat = ( + (stream.readInt8() << 16) + + (stream.readInt8() << 8) + + stream.readInt8() + ); + + return event; + case 0x54: + event.subtype = "smpteOffset"; + if (length !== 5) + throw new Error("Expected length for smpteOffset event is 5, got " + length); + const hourByte = stream.readInt8(); + event.frameRate = { + 0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30, + }[hourByte & 0x60]; + event.hour = hourByte & 0x1f; + event.min = stream.readInt8(); + event.sec = stream.readInt8(); + event.frame = stream.readInt8(); + event.subframe = stream.readInt8(); + + return event; + case 0x58: + event.subtype = "timeSignature"; + if (length !== 4) + throw new Error("Expected length for timeSignature event is 4, got " + length); + event.numerator = stream.readInt8(); + event.denominator = Math.pow(2, stream.readInt8()); + event.metronome = stream.readInt8(); + event.thirtyseconds = stream.readInt8(); + + return event; + case 0x59: + event.subtype = "keySignature"; + if (length !== 2) + throw new Error("Expected length for keySignature event is 2, got " + length); + event.key = stream.readInt8(true); + event.scale = stream.readInt8(); + + return event; + case 0x7f: + event.subtype = "sequencerSpecific"; + event.data = stream.readString(length); + + return event; + default: + // console.log("Unrecognised meta event subtype: " + subtypeByte); + event.subtype = "unknown"; + event.data = stream.readString(length); + + return event; + } + + //event.data = stream.readString(length); + //return event; + } + else if (eventTypeByte === 0xf0) { + event.type = "sysEx"; + const length = stream.readVarInt(); + event.data = stream.readString(length); + + return event; + } + else if (eventTypeByte === 0xf7) { + event.type = "dividedSysEx"; + const length = stream.readVarInt(); + event.data = stream.readString(length); + + return event; + } + else + throw new Error("Unrecognised MIDI event type byte: " + eventTypeByte); + } + else { + /* channel event */ + let param1; + if ((eventTypeByte & 0x80) === 0) { + /* running status - reuse lastEventTypeByte as the event type. + eventTypeByte is actually the first parameter + */ + param1 = eventTypeByte; + eventTypeByte = lastEventTypeByte; + } + else { + param1 = stream.readInt8(); + lastEventTypeByte = eventTypeByte; + } + + const eventType = eventTypeByte >> 4; + event.channel = eventTypeByte & 0x0f; + event.type = "channel"; + + switch (eventType) { + case 0x08: + event.subtype = "noteOff"; + event.noteNumber = param1; + event.velocity = stream.readInt8(); + + return event; + case 0x09: + event.noteNumber = param1; + event.velocity = stream.readInt8(); + if (event.velocity === 0) + event.subtype = "noteOff"; + else + event.subtype = "noteOn"; + + return event; + case 0x0a: + event.subtype = "noteAftertouch"; + event.noteNumber = param1; + event.amount = stream.readInt8(); + + return event; + case 0x0b: + event.subtype = "controller"; + event.controllerType = param1; + event.value = stream.readInt8(); + + return event; + case 0x0c: + event.subtype = "programChange"; + event.programNumber = param1; + + return event; + case 0x0d: + event.subtype = "channelAftertouch"; + event.amount = param1; + + return event; + case 0x0e: + event.subtype = "pitchBend"; + event.value = param1 + (stream.readInt8() << 7); + + return event; + default: + throw new Error("Unrecognised MIDI event type: " + eventType); + + /* + console.log("Unrecognised MIDI event type: " + eventType); + stream.readInt8(); + event.subtype = 'unknown'; + return event; + */ + } + } + } + + + let source = data; + if (typeof data === "string") + source = data.split("").map(c => c.charCodeAt(0)); + + const stream = new Stream(source); + const headerChunk = readChunk(stream); + if (headerChunk.id !== "MThd" || headerChunk.length !== 6) + throw new Error("Bad .mid file - header not found"); + + const headerStream = new Stream(headerChunk.data); + const formatType = headerStream.readInt16(); + const trackCount = headerStream.readInt16(); + const timeDivision = headerStream.readInt16(); + + let ticksPerBeat; + if (timeDivision & 0x8000) + throw new Error("Expressing time division in SMTPE frames is not supported yet"); + else + ticksPerBeat = timeDivision; + + + const header = { + formatType, + trackCount, + ticksPerBeat, + }; + const tracks = []; + for (let i = 0; i < header.trackCount; i++) { + tracks[i] = []; + const trackChunk = readChunk(stream); + if (trackChunk.id !== "MTrk") + throw new Error("Unexpected chunk - expected MTrk, got " + trackChunk.id); + + const trackStream = new Stream(trackChunk.data); + while (!trackStream.eof()) { + const event = readEvent(trackStream); + tracks[i].push(event); + } + } + + return { + header, + tracks, + }; +}; + +/* Wrapper for accessing strings through sequential writes */ + + + +var streamEx = class OStream { + constructor () { + this.buffer = ""; + } + + write (str) { + this.buffer += str; + } + + /* write a big-endian 32-bit integer */ + writeInt32 (i) { + this.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) + + String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff); + } + + /* write a big-endian 16-bit integer */ + writeInt16 (i) { + this.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff); + } + + /* write an 8-bit integer */ + writeInt8 (i) { + this.buffer += String.fromCharCode(i & 0xff); + } + + /* write a MIDI-style variable-length integer + (big-endian value in groups of 7 bits, + with top bit set to signify that another byte follows) + */ + writeVarInt (i) { + if (i < 0) + throw new Error("OStream.writeVarInt minus number: " + i); + + const b = i & 0x7f; + i >>= 7; + let str = String.fromCharCode(b); + + while (i) { + const b = i & 0x7f; + i >>= 7; + str = String.fromCharCode(b | 0x80) + str; + } + + this.buffer += str; + } + + getBuffer () { + return this.buffer; + } + + getArrayBuffer () { + return Uint8Array.from(this.buffer.split("").map(c => c.charCodeAt(0))).buffer; + } +}; + +/* +class to encode the .mid file format +(depends on streamEx.js) +*/ + +const OStream = streamEx; + + + +var midifileEx = function OMidiFile ({ header, tracks }) { + function writeChunk (stream, id, data) { + console.assert(id.length === 4, "chunk id must be 4 byte"); + + stream.write(id); + stream.writeInt32(data.length); + stream.write(data); + } + + function writeEvent (stream, event) { + if (event.subtype === "unknown") + return; + + stream.writeVarInt(event.deltaTime); + + switch (event.type) { + case "meta": + stream.writeInt8(0xff); + + switch (event.subtype) { + case "sequenceNumber": + stream.writeInt8(0x00); + stream.writeVarInt(2); + + stream.writeInt16(event.number); + + break; + case "text": + stream.writeInt8(0x01); + stream.writeVarInt(event.text.length); + + stream.write(event.text); + + break; + case "copyrightNotice": + stream.writeInt8(0x02); + stream.writeVarInt(event.text.length); + + stream.write(event.text); + + break; + case "trackName": + stream.writeInt8(0x03); + stream.writeVarInt(event.text.length); + + stream.write(event.text); + + break; + case "instrumentName": + stream.writeInt8(0x04); + stream.writeVarInt(event.text.length); + + stream.write(event.text); + + break; + case "lyrics": + stream.writeInt8(0x05); + stream.writeVarInt(event.text.length); + + stream.write(event.text); + + break; + case "marker": + stream.writeInt8(0x06); + stream.writeVarInt(event.text.length); + + stream.write(event.text); + + break; + case "cuePoint": + stream.writeInt8(0x07); + stream.writeVarInt(event.text.length); + + stream.write(event.text); + + break; + case "midiChannelPrefix": + stream.writeInt8(0x20); + stream.writeVarInt(1); + + stream.writeInt8(event.channel); + + break; + case "endOfTrack": + stream.writeInt8(0x2f); + stream.writeVarInt(0); + + break; + case "setTempo": + stream.writeInt8(0x51); + stream.writeVarInt(3); + + stream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff); + stream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff); + stream.writeInt8(event.microsecondsPerBeat & 0xff); + + break; + case "smpteOffset": + stream.writeInt8(0x54); + stream.writeVarInt(5); + + var frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate]; + stream.writeInt8(event.hour | frameByte); + stream.writeInt8(event.min); + stream.writeInt8(event.sec); + stream.writeInt8(event.frame); + stream.writeInt8(event.subframe); + + break; + case "timeSignature": + stream.writeInt8(0x58); + stream.writeVarInt(4); + + stream.writeInt8(event.numerator); + stream.writeInt8(Math.log2(event.denominator)); + stream.writeInt8(event.metronome); + stream.writeInt8(event.thirtyseconds); + + break; + case "keySignature": + stream.writeInt8(0x59); + stream.writeVarInt(2); + + stream.writeInt8(event.key); + stream.writeInt8(event.scale); + + break; + case "sequencerSpecific": + stream.writeInt8(0x7f); + stream.writeVarInt(event.data.length); + + stream.write(event.data); + + break; + default: + throw new Error("unhandled event subtype:" + event.subtype); + } + + break; + case "sysEx": + stream.writeInt8(0xf0); + stream.writeVarInt(event.data.length); + stream.write(event.data); + + break; + case "dividedSysEx": + stream.writeInt8(0xf7); + stream.writeVarInt(event.data.length); + stream.write(event.data); + + break; + case "channel": + switch (event.subtype) { + case "noteOn": + stream.writeInt8(0x90 | event.channel); + stream.writeInt8(event.noteNumber); + stream.writeInt8(event.velocity); + + break; + case "noteOff": + stream.writeInt8(0x80 | event.channel); + stream.writeInt8(event.noteNumber); + stream.writeInt8(event.velocity ? event.velocity : 0); + + break; + case "noteAftertouch": + stream.writeInt8(0xa0 | event.channel); + stream.writeInt8(event.noteNumber); + stream.writeInt8(event.amount); + + break; + case "controller": + stream.writeInt8(0xb0 | event.channel); + stream.writeInt8(event.controllerType); + stream.writeInt8(event.value); + + break; + case "programChange": + stream.writeInt8(0xc0 | event.channel); + stream.writeInt8(event.programNumber); + + break; + case "channelAftertouch": + stream.writeInt8(0xd0 | event.channel); + stream.writeInt8(event.amount); + + break; + case "pitchBend": + stream.writeInt8(0xe0 | event.channel); + stream.writeInt8(event.value & 0xff); + stream.writeInt8((event.value >> 7) & 0xff); + + break; + default: + throw new Error("unhandled event subtype:" + event.subtype); + } + + break; + default: + throw new Error("unhandled event type:" + event.type); + } + } + + const stream = new OStream(); + + const headerChunk = new OStream(); + headerChunk.writeInt16(header.formatType); + headerChunk.writeInt16(tracks.length); + headerChunk.writeInt16(header.ticksPerBeat); + + writeChunk(stream, "MThd", headerChunk.getBuffer()); + + for (let i = 0; i < tracks.length; ++i) { + const trackChunk = new OStream(); + + for (let ei = 0; ei < tracks[i].length; ++ei) + writeEvent(trackChunk, tracks[i][ei]); + + writeChunk(stream, "MTrk", trackChunk.getBuffer()); + } + + return stream.getArrayBuffer(); +}; + +var MIDI$2 = { + parseMidiData: midifile, + encodeMidiFile: midifileEx, +}; + +const midiToSequence = (midiFile, {timeWarp = 1} = {}) => { + const trackStates = []; + let beatsPerMinute = 120; + const ticksPerBeat = midiFile.header.ticksPerBeat; + + for (let i = 0; i < midiFile.tracks.length; i++) { + trackStates[i] = { + nextEventIndex: 0, + ticksToNextEvent: ( + midiFile.tracks[i].length ? + midiFile.tracks[i][0].deltaTime : + null + ), + }; + } + + function getNextEvent () { + let ticksToNextEvent = null; + let nextEventTrack = null; + let nextEventIndex = null; + + for (let i = 0; i < trackStates.length; i++) { + if ( + trackStates[i].ticksToNextEvent != null + && (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent) + ) { + ticksToNextEvent = trackStates[i].ticksToNextEvent; + nextEventTrack = i; + nextEventIndex = trackStates[i].nextEventIndex; + } + } + if (nextEventTrack != null) { + /* consume event from that track */ + const nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex]; + if (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) + trackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime; + else + trackStates[nextEventTrack].ticksToNextEvent = null; + + trackStates[nextEventTrack].nextEventIndex += 1; + /* advance timings on all tracks by ticksToNextEvent */ + for (let i = 0; i < trackStates.length; i++) { + if (trackStates[i].ticksToNextEvent != null) + trackStates[i].ticksToNextEvent -= ticksToNextEvent; + } + return { + ticksToEvent: ticksToNextEvent, + event: nextEvent, + track: nextEventTrack, + }; + } + else + return null; + + } // + let midiEvent; + const events = []; + // + function processEvents () { + function processNext () { + let secondsToGenerate = 0; + if (midiEvent.ticksToEvent > 0) { + const beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat; + secondsToGenerate = beatsToGenerate / (beatsPerMinute / 60); + } + + // beatsPerMinute must be changed after secondsToGenerate calculation + if ( midiEvent.event.type == "meta" && midiEvent.event.subtype == "setTempo" ) { + // tempo change events can occur anywhere in the middle and affect events that follow + beatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat; + } + + const time = (secondsToGenerate * 1000 * timeWarp) || 0; + events.push([ midiEvent, time ]); + midiEvent = getNextEvent(); + } // + if (midiEvent = getNextEvent()) { + while (midiEvent) + processNext(); + } + } + processEvents(); + + return events; +}; + + +const trimSequence = seq => { + const status = new Map(); + + return seq.filter(([{event, ticksToEvent}]) => { + if (ticksToEvent > 0) + status.clear(); + + if (event.type !== "channel") + return true; + + const key = `${event.subtype}|${event.channel}|${event.noteNumber}`; + + if (status.get(key)) { + //console.debug("event trimmed:", event, ticksToEvent); + return false; + } + + status.set(key, event); + + return true; + }); +}; + + +const fixOverlapNotes = seq => { + const noteMap = new Map(); + const overlapMap = new Map(); + const swaps = []; + + let leapIndex = -1; + + seq.forEach(([{event, ticksToEvent}], index) => { + if (ticksToEvent > 0) + leapIndex = index; + + if (event.type !== "channel") + return; + + const key = `${event.channel}|${event.noteNumber}`; + + switch (event.subtype) { + case "noteOn": + if (noteMap.get(key)) + overlapMap.set(key, leapIndex); + else + noteMap.set(key, leapIndex); + + break; + case "noteOff": + if (overlapMap.get(key)) { + swaps.push([overlapMap.get(key), index]); + overlapMap.delete(key); + } + else + noteMap.delete(key); + + break; + } + }); + + // shift overlapped swaps + swaps.forEach((swap, i) => { + for (let ii = i - 1; ii >= 0; --ii) { + const pre = swaps[ii]; + if (pre[1] < swap[0]) + break; + + if (swap[0] > pre[0]) + ++swap[0]; + } + }); + + //console.debug("swaps:", swaps); + swaps.forEach(([front, back]) => { + if (back >= seq.length - 1 || front < 0) + return; + + const offEvent = seq[back]; + const nextEvent = seq[back + 1]; + const leapEvent = seq[front]; + + if (!leapEvent[0].ticksToEvent) { + console.warn("invalid front index:", front, back, leapEvent); + return; + } + + // ms per tick + const tempo = leapEvent[1] / leapEvent[0].ticksToEvent; + + nextEvent[1] += offEvent[1]; + nextEvent[0].ticksToEvent += offEvent[0].ticksToEvent; + + offEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1; + leapEvent[0].ticksToEvent = 1; + + offEvent[1] = offEvent[0].ticksToEvent * tempo; + leapEvent[1] = leapEvent[0].ticksToEvent * tempo; + //console.debug("swap:", [front, back], offEvent, nextEvent, leapEvent); + + seq.splice(back, 1); + seq.splice(front, 0, offEvent); + }); + + return seq; +}; + + + +var MidiSequence$1 = { + midiToSequence, + trimSequence, + fixOverlapNotes, +}; + +const MidiSequence = MidiSequence$1; + + + +const PedalControllerTypes = { + 64: "Sustain", + 65: "Portamento", + 66: "Sostenuto", + 67: "Soft", +}; + + + +class Notation$1 { + static parseMidi (data, {fixOverlap = true} = {}) { + const channelStatus = []; + const pedalStatus = {}; + const pedals = {}; + const channels = []; + const bars = []; + let time = 0; + let millisecondsPerBeat = 600000 / 120; + let beats = 0; + let numerator = 4; + let barIndex = 0; + const keyRange = {}; + let rawTicks = 0; + let ticks = 0; + let correspondences; + const tempos = []; + + const ticksPerBeat = data.header.ticksPerBeat; + + let rawEvents = MidiSequence.midiToSequence(data); + + if (fixOverlap) + rawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents)); + + const events = rawEvents.map(d => ({ + data: d[0].event, + track: d[0].track, + deltaTime: d[1], + deltaTicks: d[0].ticksToEvent, + })); + + let index = 0; + + const ticksNormal = 1; + + for (const ev of events) { + rawTicks += ev.deltaTicks; + ticks = Math.round(rawTicks * ticksNormal); + + if (ev.deltaTicks > 0) { + // append bars + const deltaBeats = ev.deltaTicks / ticksPerBeat; + for (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) { + const t = time + (b - beats) * millisecondsPerBeat; + bars.push({time: t, index: barIndex % numerator}); + + ++barIndex; + } + + beats += deltaBeats; + } + + time += ev.deltaTime; + + //const ticksTime = beats * millisecondsPerBeat; + //console.log("time:", time, ticksTime, ticksTime - time); + + ev.time = time; + ev.ticks = ticks; + + const event = ev.data; + switch (event.type) { + case "channel": + //channelStatus[event.channel] = channelStatus[event.channel] || []; + + switch (event.subtype) { + case "noteOn": + { + const pitch = event.noteNumber; + //channelStatus[event.channel][pitch] = { + channelStatus.push({ + channel: event.channel, + pitch, + startTick: ticks, + start: time, + velocity: event.velocity, + beats: beats, + track: ev.track, + }); + + keyRange.low = Math.min(keyRange.low || pitch, pitch); + + ev.index = index; + ++index; + } + + break; + case "noteOff": + { + const pitch = event.noteNumber; + + channels[event.channel] = channels[event.channel] || []; + + const statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch); + if (statusIndex >= 0) { + const status = channelStatus.splice(statusIndex, 1)[0]; + + channels[event.channel].push({ + channel: event.channel, + startTick: status.startTick, + endTick: ticks, + pitch, + start: status.start, + duration: time - status.start, + velocity: status.velocity, + beats: status.beats, + track: status.track, + finger: status.finger, + }); + } + else + console.debug("unexpected noteOff: ", time, event); + + keyRange.high = Math.max(keyRange.high || pitch, pitch); + } + + break; + case "controller": + switch (event.controllerType) { + // pedal controllers + case 64: + case 65: + case 66: + case 67: + const pedalType = PedalControllerTypes[event.controllerType]; + + pedalStatus[event.channel] = pedalStatus[event.channel] || {}; + pedals[event.channel] = pedals[event.channel] || []; + + const status = pedalStatus[event.channel][pedalType]; + + if (status) + pedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value}); + pedalStatus[event.channel][pedalType] = {start: time, value: event.value}; + + break; + } + + break; + } + + break; + case "meta": + switch (event.subtype) { + case "setTempo": + millisecondsPerBeat = event.microsecondsPerBeat / 1000; + //beats = Math.round(beats); + //console.assert(Number.isFinite(time), "invalid time:", time); + tempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time}); + + break; + case "timeSignature": + numerator = event.numerator; + barIndex = 0; + + break; + case "text": + if (!correspondences && /^find-corres:/.test(event.text)) { + const captures = event.text.match(/:([\d\,-]+)/); + const str = captures && captures[1] || ""; + correspondences = str.split(",").map(s => Number(s)); + } + else if (/fingering\(.*\)/.test(event.text)) { + const [_, fingers] = event.text.match(/\((.+)\)/); + const finger = Number(fingers); + if (!Number.isNaN(finger)) { + const status = channelStatus[channelStatus.length - 1]; + if (status) + status.finger = finger; + + const event = events.find(e => e.index == index - 1); + if (event) + event.data.finger = finger; + } + } + + break; + case "copyrightNotice": + console.log("MIDI copyright:", event.text); + + break; + } + + break; + } + } + + channelStatus.forEach(status => { + console.debug("unclosed noteOn event at", status.startTick, status); + + channels[status.channel].push({ + startTick: status.startTick, + endTick: ticks, + pitch: status.pitch, + start: status.start, + duration: time - status.start, + velocity: status.velocity, + beats: status.beats, + track: status.track, + finger: status.finger, + }); + }); + + return new Notation$1({ + channels, + keyRange, + pedals, + bars, + endTime: time, + endTick: ticks, + correspondences, + events, + tempos, + ticksPerBeat, + meta: {}, + }); + } + + + constructor (fields) { + Object.assign(this, fields); + + // channels to notes + this.notes = []; + for (const channel of this.channels) { + if (channel) { + for (const note of channel) + this.notes.push(note); + } + } + this.notes.sort(function (n1, n2) { + return n1.start - n2.start; + }); + + for (const i in this.notes) + this.notes[i].index = Number(i); + + + // duration + this.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0, + + //this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0; + + + // pitch map + this.pitchMap = []; + for (const c in this.channels) { + for (const n in this.channels[c]) { + const pitch = this.channels[c][n].pitch; + this.pitchMap[pitch] = this.pitchMap[pitch] || []; + + this.pitchMap[pitch].push(this.channels[c][n]); + } + } + + this.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start)); + + + /*// setup measure notes index + if (this.measures) { + const measure_list = []; + + let last_measure = null; + const measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0])); + for (const [t, measure] of measure_entries) { + //console.log("measure time:", Number(t)); + measure.startTick = Number(t); + measure.notes = []; + + if (last_measure) + last_measure.endTick = measure.startTick; + + const m = measure.measure; + measure_list[m] = measure_list[m] || []; + measure_list[m].push(measure); + + last_measure = measure; + } + if (last_measure) + last_measure.endTick = this.notes[this.notes.length - 1].endTick; + for (const i in this.notes) { + const note = this.notes[i]; + for (const t in this.measures) { + const measure = this.measures[t]; + if (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick) + measure.notes.push(note); + } + } + + this.measure_list = measure_list; + }*/ + + + // prepare beats info + if (this.meta.beatInfos) { + for (let i = 0; i < this.meta.beatInfos.length; ++i) { + const info = this.meta.beatInfos[i]; + if (i > 0) { + const lastInfo = this.meta.beatInfos[i - 1]; + info.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat); + } + else + info.beatIndex = 0; + } + } + + + // compute tempos tick -> time + { + let time = 0; + let ticks = 0; + let tempo = 500000; + for (const entry of this.tempos) { + const deltaTicks = entry.tick - ticks; + time += (tempo / 1000) * deltaTicks / this.ticksPerBeat; + + ticks = entry.tick; + tempo = entry.tempo; + + entry.time = time; + } + } + } + + + findChordBySoftindex (softIndex, radius = 0.8) { + return this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius); + } + + + averageTempo (tickRange) { + tickRange = tickRange || {from: 0, to: this.endtick}; + + console.assert(this.tempos, "no tempos."); + console.assert(tickRange.to > tickRange.from, "range is invalid:", tickRange); + + const span = index => { + const from = Math.max(tickRange.from, this.tempos[index].tick); + const to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to; + + return Math.max(0, to - from); + }; + + const tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0); + + const average = tempo_sum / (tickRange.to - tickRange.from); + + // convert microseconds per beat to beats per minute + return 60e+6 / average; + } + + + ticksToTime (tick) { + console.assert(Number.isFinite(tick), "invalid tick value:", tick); + console.assert(this.tempos && this.tempos.length, "no tempos."); + + const next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick); + const tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0); + + const tempo = this.tempos[tempo_index]; + + return tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat; + } + + + timeToTicks (time) { + console.assert(Number.isFinite(time), "invalid time value:", time); + console.assert(this.tempos && this.tempos.length, "no tempos."); + + const next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time); + const tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0); + + const tempo = this.tempos[tempo_index]; + + return tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3); + } + + + tickRangeToTimeRange (tickRange) { + console.assert(tickRange.to >= tickRange.from, "invalid tick range:", tickRange); + + return { + from: this.ticksToTime(tickRange.from), + to: this.ticksToTime(tickRange.to), + }; + } + + + /*getMeasureRange (measureRange) { + console.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), "invalid measure range:", measureRange); + console.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], "no measure data for specific index:", this.measure_list, measureRange); + + const startMeasure = this.measure_list[measureRange.start][0]; + let endMeasure = null; + for (const measure of this.measure_list[measureRange.end]) { + if (measure.endTick > startMeasure.startTick) { + endMeasure = measure; + break; + } + } + + // there no path between start measure and end measure. + if (!endMeasure) + return null; + + const tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick}; + const timeRange = this.tickRangeToTimeRange(tickRange); + timeRange.duration = timeRange.to - timeRange.from; + + return { + tickRange, + timeRange, + }; + }*/ + + + scaleTempo ({factor, headTempo}) { + console.assert(this.tempos && this.tempos.length, "[Notation.scaleTempo] tempos is empty."); + + if (headTempo) + factor = headTempo / this.tempos[0].tempo; + + console.assert(Number.isFinite(factor) && factor > 0, "[Notation.scaleTempo] invalid factor:", factor); + + this.tempos.forEach(tempo => { + tempo.tempo *= factor; + tempo.time *= factor; + }); + this.events.forEach(event => { + event.deltaTime *= factor; + event.time *= factor; + }); + this.notes.forEach(note => { + note.start *= factor; + note.duration *= factor; + }); + + this.endTime *= factor; + } +} + + +var MusicNotation$1 = { + Notation: Notation$1, +}; + +const { Notation } = MusicNotation$1; + + + +//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms)); +const animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve)); + + +class MidiPlayer$1 { + constructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) { + this.cacheSpan = cacheSpan; + this.onMidi = onMidi; + this.onPlayFinish = onPlayFinish; + this.onTurnCursor = onTurnCursor; + + let notation; + if (midiData.notes && Number.isFinite(midiData.endTime)) + notation = midiData; + else + notation = Notation.parseMidi(midiData); + + this.notation = notation; + this.events = notation.events; + //console.log("events:", this.events); + + this.isPlaying = false; + this.progressTime = 0; + this.startTime = performance.now(); + this.duration = notation.endTime; + this.cursorTurnDelta = 0; + + console.assert(notation.tempos && notation.tempos.length, "[MidiPlayer] invalid notation, tempos is empty."); + } + + + dispose () { + this.isPlaying = false; + this.progressTime = 0; + } + + + get progressTicks () { + return this.notation.timeToTicks(this.progressTime); + } + + + set progressTicks (value) { + this.progressTime = this.notation.ticksToTime(value); + + if (this.onTurnCursor) + this.onTurnCursor(this.progressTime); + } + + + async play ({nextFrame = animationDelay} = {}) { + if (this.progressTime >= this.duration) + this.progressTime = 0; + + let now = performance.now(); + this.startTime = now - this.progressTime; + + this.isPlaying = true; + + let currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime); + + while (this.isPlaying) { + for (; currentEventIndex < this.events.length; ++currentEventIndex) { + const event = this.events[currentEventIndex]; + //console.log("play event:", currentEventIndex, event.time, this.progressTime + this.cacheSpan); + if (!event || event.time > this.progressTime + this.cacheSpan) + break; + + if (event.data.type === "channel" && this.startTime + event.time >= now) + if (this.onMidi) + this.onMidi(event.data, this.startTime + event.time); + } + + await nextFrame(); + + if (!this.isPlaying) + break; + + if (this.cursorTurnDelta !== 0) { + const backturn = this.cursorTurnDelta < 0; + + this.startTime -= this.cursorTurnDelta; + this.cursorTurnDelta = 0; + + if (backturn) { + for (; currentEventIndex > 0; --currentEventIndex) { + const eventTime = this.events[currentEventIndex].time; + if (this.startTime + eventTime < now) + break; + } + } + } + + now = performance.now(); + + this.progressTime = now - this.startTime; + + if (this.progressTime > this.duration) { + this.isPlaying = false; + + if (this.onPlayFinish) + this.onPlayFinish(); + } + } + } + + + pause () { + this.isPlaying = false; + } + + + turnCursor (time) { + //console.log("onTurnCursor:", time, oldTime); + if (this.isPlaying) + this.cursorTurnDelta += time - this.progressTime; + else + this.progressTime = time; + + if (this.onTurnCursor) + this.onTurnCursor(time); + } +} + + +var MidiPlayer_1 = MidiPlayer$1; + +var config = { + CostStepAttenuation: 0.6, + SkipDeep: 3, + PriorDistanceSigmoidFactor: 0.1, + PriorValueSigmoidFactor: 0.12, + + SkipCost: 0.5, + LagOffsetCost: 1, + LeadOffsetCost: 1.6, + ZeroOffsetCost: 0.58, + + RelocationThreshold: 6, +}; + +const {pick} = require$$0__default["default"]; + +const Config$1 = config; + + + +class Node$2 { + constructor (s_note, c_note) { + this.s_note = s_note; + this.c_note = c_note; + + console.assert(this.s_note.softIndex != null, "s_note softIndex is null"); + this.offset = this.s_note.softIndex - this.c_note.softIndex; + + this._prev = null; + this._totalCost = 0; + this._value = 0; + this.cacheDirty = true; + + //this.evaluatePrev(Node.Zero); + } + + + get prev () { + return this._prev; + } + + + set prev (value) { + if (value != this._prev) { + this._prev = value; + this.cacheDirty = true; + } + } + + + get si () { + return this.s_note.index; + } + + + get ci () { + return this.c_note.index; + } + + + get root () { + return this.prev.root || this; + } + + + get rootSi () { + return !this.prev.zero ? this.prev.rootSi : this.si; + } + + + get id () { + return `${this.s_note.index},${this.c_note.index}`; + } + + + static cost (prev, skip, self) { + return prev * Config$1.CostStepAttenuation + Math.tanh(skip * Config$1.SkipCost) + Math.tanh(self * 0.5); + } + + + updateCache () { + if (this.cacheDirty) { + this._totalCost = Node$2.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost); + this._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5); + + this.cacheDirty = false; + } + } + + + get totalCost () { + this.updateCache(); + + return this._totalCost; + } + + + get value () { + this.updateCache(); + + return this._value; + } + + + get deep () { + return this.prev.deep + 1; + } + + + get path () { + const path = []; + for (let node = this; !node.zero; node = node.prev) { + path[node.si] = node.ci; + } + + for (let i = 0; i < path.length; ++i) + if (typeof path[i] != "number") + path[i] = -1; + + return path; + } + + + dump () { + return pick(this, ["id", "si", "ci", "rootSi", "value", "deep", "rootSi", "offset", "prior", "selfCost", "totalCost"]); + } + + + evaluatePrev (node) { + const cost = this.evaluatePrevCost(node); + + console.assert(this.si - node.si >= 1, "node index error:", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/); + //if (this.si - node.si < 1) + // debugger; + + const totalCost = Node$2.cost(node.totalCost, this.si - node.si - 1, cost); + + if (!this.prev || totalCost < this.totalCost) { + this.prev = node; + this.selfCost = cost; + + return true; + } + + return false; + } + + + evaluatePrevCost (node) { + let cost = 0; + + if (node.offset != null) { + const bias = this.offset - node.offset; + const costCoeff = node.zero ? Config$1.ZeroOffsetCost : (bias > 0 ? Config$1.LagOffsetCost : Config$1.LeadOffsetCost); + cost += (bias * costCoeff) ** 2; + } + + return cost; + } + + + priorByOffset (offset) { + const distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04); + + return Math.tanh(this.value * Config$1.PriorValueSigmoidFactor) - Math.tanh(distance * Config$1.PriorDistanceSigmoidFactor); + //return Math.log(this.value) * Math.tanh(4 / distance); + //return this.value - distance; + } + + + static zero () { + return { + zero: true, + totalCost: 0, + value: 0, + si: -1, + ci: -1, + deep: 0, + offset: 0, + }; + } +} + + +var node = Node$2; + +const Config = config; +const Node$1 = node; + + + +class Navigator$1 { + constructor (criterion, sample, options = {}) { + this.criterion = criterion; + this.sample = sample; + + this.getCursorOffset = options.getCursorOffset || (() => null); + this.outOfPage = options.outOfPage; + + this.bestNode = null; + this.fineCursor = null; + + this.breakingSI = sample.notes.length - 1; + + this.zeroNode = Node$1.zero(); + this.zeroNode.offset = this.getCursorOffset() || 0; + + this.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold; + } + + + step (index) { + //console.log("step:", this.zeroNode.offset); + const note = this.sample.notes[index]; + + if (note.matches.length > 0) { + //console.log("zeroNode.offset:", index, this.zeroNode.offset); + note.matches.forEach(node => { + node.evaluatePrev(this.zeroNode); + //console.log("node:", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset); + + for (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) { + //const skipCost = Config.SkipCost * (index - 1 - si); + + const prevNote = this.sample.notes[si]; + console.assert(prevNote, "prevNote is null:", si, index, this.sample.notes); + prevNote.matches.forEach(prevNode => { + const bias = node.offset - prevNode.offset; + if (/*prevNode.totalCost + skipCost < node.totalCost + &&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost)) + node.evaluatePrev(prevNode); + }); + } + + node.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset); + + if (node.prior > 0 && this.outOfPage) { + const tick = this.criterion.notes[node.ci].startTick; + if (this.outOfPage(tick)) + node.prior -= 0.7; + } + }); + + note.matches.sort((c1, c2) => c2.prior - c1.prior); + this.cursors = note.matches; + //console.log("navigator cursors:", this.cursors); + + let fineCursor = null; + const nullLength = this.nullSteps(index); + + const cursor = this.cursors[0]; + if (cursor && cursor.totalCost < 1) { + //console.log("nullLength:", nullLength, nullLength * Math.log(cursor.value / 4)); + if (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) { + this.zeroNode.offset = cursor.offset; + + fineCursor = cursor; + + if (!this.bestNode || cursor.value > this.bestNode.value) + this.bestNode = cursor; + } + } + + if (fineCursor) + this.fineCursor = fineCursor; + else { + if (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) { + this.zeroNode.offset += note.deltaSi * Math.tanh(nullLength); + console.assert(!Number.isNaN(this.zeroNode.offset), "zeroNode.offset is NaN.", note.deltaSi, nullLength); + } + } + } + else + this.cursors = []; + } + + + path ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) { + const path = []; + + let offset = null; + + for (let si = toIndex; si >= fromIndex;) { + const note = this.sample.notes[si]; + + if (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) { + //if (note.matches.length) + // console.log("path -1:", si, note.matches[0].prior, note.matches[0].totalCost); + path[si] = -1; + --si; + continue; + } + + // sort nodes by backwards heuristic offset + if (offset != null) { + note.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1)); + note.matches.sort((n1, n2) => n2.backPrior - n1.backPrior); + } + + const node = note.matches[0]; + node.path.forEach((ci, si) => path[si] = ci); + //console.log("node path:", si, node.path); + + offset = node.root.offset; + + si = node.rootSi - 1; + } + + console.assert(path.length == toIndex + 1, "path length error:", path, fromIndex, toIndex + 1, + this.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null); + + return path; + } + + + nullSteps (index) { + return index - (this.fineCursor ? this.fineCursor.si : -1) - 1; + } + + + resetCursor (index, {breaking = true} = {}) { + if (breaking) + this.breakingSI = index; + + const cursorOffset = this.getCursorOffset(); + if (cursorOffset != null) { + //console.log("cursorOffset:", cursorOffset); + + this.zeroNode.offset = cursorOffset; + //this.breaking = this.nullSteps(index) > Config.SkipDeep; + //if (this.breaking) // trivial zero node si resets result in focus path interruption + this.zeroNode.si = index; + this.fineCursor = null; + + console.assert(!Number.isNaN(this.zeroNode.offset), "zeroNode.offset is NaN.", cursorOffset); + //console.log("cursor offset reset:", cursorOffset); + + return true; + } + + return false; + } + + + get relocationTendency () { + const cursor = this.cursors && this.cursors[0]; + if (!cursor) + return null; + + const nullLength = this.nullSteps(cursor.si); + if (nullLength <= 0) + return 0; + + return Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold; + } +} + + +var navigator = Navigator$1; + +const Node = node; +const Navigator = navigator; + + + +const HEART_BEAT = 800; // in ms +const SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24; + + +const normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL); + + +// greater softIndexFactor make 'harder' soft index +const makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) { + index = Number(index); + + const note = notes[index]; + + // make soft index + if (index > 0) { + const lastNote = notes[index - 1]; + + console.assert(note.start != null, "note.start is null", note); + console.assert(lastNote.start != null, "lastNote.start is null", lastNote); + + note.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor); + note.softIndex = lastNote.softIndex + note.deltaSi; + + console.assert(!Number.isNaN(note.deltaSi), "note.deltaSi is NaN.", note.start, lastNote.start); + } + else { + note.softIndex = 0; + note.deltaSi = 0; + } +}; + + +const makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) { + note.matches = []; + + const targetList = criterion.pitchMap[note.pitch]; + if (targetList) { + for (const targetNote of targetList) { + const node = new Node(note, targetNote); + if (zeroNode) + node.evaluatePrev(zeroNode); + + note.matches.push(node); + } + } +}; + + +const genNotationContext = function (notation, {softIndexFactor = 1} = {}) { + for (let i = 0; i < notation.notes.length; ++i) + makeNoteSoftIndex(notation.notes, i, {softIndexFactor}); +}; + + +const runNavigation = async function(criterion, sample, onStep) { + const navigator = new Navigator(criterion, sample); + navigator.resetCursor(-1); + + for (let i = 0; i < sample.notes.length; ++i) { + navigator.step(i); + + const next = await (onStep && onStep(i, navigator)); + if (next === Symbol.for("end")) { + console.log("Navigation interrupted."); + + return; + } + } + + //console.log("Navigation accomplished."); + + return navigator; +}; + + + +var Matcher$1 = { + normalizeInterval, + makeNoteSoftIndex, + makeMatchNodes, + genNotationContext, + runNavigation, + Navigator, + Node, +}; + +const MIDI$1 = MIDI$2; + + + +const trackDeltaToAbs = events => { + let tick = 0; + + events.forEach(event => { + tick += event.deltaTime; + event.tick = tick; + }); +}; + + +const trackAbsToDelta = events => { + let lastTick = 0; + + events.sort((e1, e2) => e1.tick - e2.tick).forEach(event => { + event.deltaTime = event.tick - lastTick; + lastTick = event.tick; + }); +}; + + +const sliceTrack = (track, startTick, endTick) => { + trackDeltaToAbs(track); + + const events = []; + const status = {}; + + track.forEach(event => { + if (event.tick >= startTick && event.tick <= endTick && event.subtype !== "endOfTrack") + events.push({ + ...event, + tick: event.tick - startTick, + }); + else if (event.tick < startTick) { + switch (event.type) { + case "meta": + status[event.subtype] = event; + + break; + } + } + }); + + Object.values(status).forEach(event => events.push({ + ...event, + tick: 0, + })); + + events.push({ + tick: endTick - startTick, + type: "meta", + subtype: "endOfTrack", + }); + + trackAbsToDelta(events); + + return events; +}; + + +const sliceMidi = (midi, startTick, endTick) => ({ + header: midi.header, + tracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)), +}); + + +const TICKS_PER_BEATS = 480; + +const EXCLUDE_MIDI_EVENT_SUBTYPES = [ + "endOfTrack", "trackName", + "noteOn", "noteOff", +]; + + +function encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) { + notation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000; + + const ticksPerBeat = TICKS_PER_BEATS; + const msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat; + + const header = { formatType: 0, ticksPerBeat }; + const track = []; + + if (!Number.isFinite(startTime)) { + if (!notation.notes || !notation.notes[0]) + throw new Error("encodeToMidiData: no start time specificed"); + + startTime = notation.notes[0].start; + } + + track.push({ time: startTime, type: "meta", subtype: "copyrightNotice", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` }); + + const containsTempo = notation.events && notation.events.find(event => event.subtype == "setTempo"); + if (!containsTempo) { + track.push({ time: startTime, type: "meta", subtype: "timeSignature", numerator: 4, denominator: 4, thirtyseconds: 8 }); + track.push({ time: startTime, type: "meta", subtype: "setTempo", microsecondsPerBeat: notation.microsecondsPerBeat }); + } + + //if (notation.correspondences) + // track.push({ time: startTime, type: "meta", subtype: "text", text: "find-corres:" + notation.correspondences.join(",") }); + + let endTime = startTime || 0; + + if (notation.notes) { + for (const note of notation.notes) { + track.push({ + time: note.start, + type: "channel", + subtype: "noteOn", + channel: note.channel || 0, + noteNumber: note.pitch, + velocity: note.velocity, + finger: note.finger, + }); + + endTime = Math.max(endTime, note.start); + + if (Number.isFinite(unclosedNoteDuration)) + note.duration = note.duration || unclosedNoteDuration; + if (note.duration) { + track.push({ + time: note.start + note.duration, + type: "channel", + subtype: "noteOff", + channel: note.channel || 0, + noteNumber: note.pitch, + velocity: 0, + }); + + endTime = Math.max(endTime, note.start + note.duration); + } + } + } + + if (notation.events) { + const events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype)); + for (const event of events) { + track.push({ + time: event.time, + ...event.data, + }); + + endTime = Math.max(endTime, event.time); + } + } + + track.push({ time: endTime + 100, type: "meta", subtype: "endOfTrack" }); + + track.sort(function (e1, e2) { return e1.time - e2.time; }); + + // append finger event after every noteOn event + track.map((event, index) => ({event, index})) + .filter(({event}) => event.subtype == "noteOn" && event.finger != null) + .reverse() + .forEach(({event, index}) => track.splice(index + 1, 0, { + time: event.time, + type: "meta", + subtype: "text", + text: `fingering(${event.finger})`, + })); + + track.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks)); + track.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0))); + + return {header, tracks: [track]}; +} + +function encodeToMIDI(notation, options) { + const data = encodeToMIDIData(notation, options); + return MIDI$1.encodeMidiFile(data); +} + + +var MidiUtils$1 = { + sliceMidi, + encodeToMIDIData, + encodeToMIDI, +}; + +const MIDI = MIDI$2; +const MusicNotation = MusicNotation$1; +const MidiPlayer = MidiPlayer_1; +const Matcher = Matcher$1; +const MidiUtils = MidiUtils$1; + + + +var musicWidgets = { + MIDI, + MusicNotation, + MidiPlayer, + Matcher, + MidiUtils, +}; + +const WHOLE_DURATION_MAGNITUDE = 1920; +const TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4; +const EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division']; +const COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS]; +class MetaNotation { + static fromAbsoluteNotes(notes, measureHeads, data) { + const notation = new MetaNotation(data); + notation.measures = Array(measureHeads.length) + .fill(null) + .map((__, i) => { + const tick = measureHeads[i]; + const duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0; + const mnotes = notes + .filter((note) => note.measure === i + 1) + .map((note) => ({ + tick: note.startTick - tick, + duration: note.endTick - note.startTick, + ...pick__default["default"](note, COMMON_NOTE_FIELDS), + subNotes: [], + })); + // reduce note data size + mnotes.forEach((mn) => ['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => { + if (!mn[field]) + delete mn[field]; + })); return { - events, - contexts, + tick, + duration, + notes: mnotes, }; }); + notation.idTrackMap = notes.reduce((map, note) => { + if (note.id) + map[note.id] = note.track; + return map; + }, {}); + return notation; } - get eventStartX() { - return this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX; - } - get startX() { - return this.position.left; - } - get width() { - return this.position.right - this.position.left; - } - get tickMap() { - return this.events - .concat([this.endEvent]) - .filter(Boolean) - .reduce((map, event) => { - if (Number.isFinite(event.tick)) { - if (!map.has(event.tick)) - map.set(event.tick, []); - map.get(event.tick).push(event); - } - return map; - }, new Map()); - } - get tickToX() { - return [...this.tickMap.entries()].reduce((map, [tick, events]) => { - events = events.filter((e) => !e.fullMeasureRest && !e.grace); - if (events.length) { - const x = Math.min(...events.map((e) => e.x)); - map[tick] = x; - } - return map; - }, {}); - } - get tickRates() { - const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest); - events.sort((e1, e2) => e1.x - e2.x); - return events.slice(0, events.length - 1).map((e1, i) => { - const e2 = events[i + 1]; - return (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3); - }); - } - get tickRatesInStaves() { - const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace); - const sevents = events.reduce((map, event) => { - map[event.staff] = map[event.staff] || []; - map[event.staff].push(event); - return map; - }, {}); - const rates = Object.values(sevents).map((es) => es - .sort((e1, e2) => e1.x - e2.x) - .slice(0, es.length - 1) - .map((e1, i) => { - const e2 = es[i + 1]; - return (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3); - })); - return [].concat(...rates); - } - get tickRatesInGroups() { - const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest); - const gevents = events.reduce((map, event) => { - const groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff)); - map[groupIndex] = map[groupIndex] || []; - map[groupIndex].push(event); - return map; - }, {}); - const rates = Object.values(gevents).map((es) => es - .sort((e1, e2) => e1.x - e2.x) - .slice(0, es.length - 1) - .map((e1, i) => { - const e2 = es[i + 1]; - return (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3); - })); - return [].concat(...rates); - } - get tickTwist() { - if (!this.duration || !this.staffGroups) - return undefined; - const events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)); // ignore rest0 - const gevents = events.reduce((map, event) => { - const groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff)); - map[groupIndex] = map[groupIndex] || []; - map[groupIndex].push(event); - return map; - }, {}); - const twists = Object.values(gevents).map((es) => { - const eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX); - const xSpan = this.position.right - eventsXOrder[0].x; - const tickTwists = eventsXOrder.slice(1).map((e2, i) => { - const e1 = eventsXOrder[i]; - const dx = e2.pivotX - e1.pivotX; - const dt = e2.tick - e1.tick; - if (!dt) - return dx / xSpan; - const rate = Math.atan2(dt / this.duration, dx / xSpan); - return ((rate * 4) / Math.PI - 1) ** 2; - }); - return Math.max(0, ...tickTwists); - }); - return Math.max(0, ...twists); - } - get eventMap() { - return this.events.reduce((map, event) => { - map[event.id] = event; - return map; - }, {}); - } - get empty() { - return !this.events?.length || !this.voices?.length; - } - get hasIllEvent() { - const voicedEventIds = this.voices.flat(1); - const eventMap = this.eventMap; - return (this.regulated && - voicedEventIds.some((id) => { - const event = eventMap[id]; - return !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest; - })); - } - get brief() { - const timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`; - const eventBrieves = this.events.map((e) => [ - e.staff, - e.intX, - Math.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0), - e.fullMeasureRest ? 0 : e.division, - e.fullMeasureRest ? 0 : e.dots, - e.rest ? 'r' : '', - e.grace || '', - e.stemDirection, - e.beam || '', - ].join('|')); - return [timesig, ...eventBrieves].join('\n'); - } - get regulationHash() { - return sha1__default["default"](this.brief); - } - // prefer use originalRegulationHash - get regulationHash0() { - return this.originalRegulationHash || this.regulationHash; - } - get regulationHashes() { - return Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean))); - } - get featureWords() { - if (!this.regulated || !this.voices || !this.voices.length) - return null; - const invalid = this.tickRatesInStaves.some((rate) => rate < 0); - const mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest); - const ys = mainEvents - .map((event) => event.ys) - .flat(1) - .map((y) => `Y${-y * 2}`); - const uys = Array.from(new Set(ys)); - if (this.keySignature) - uys.push(`K${this.keySignature}`); - const voices = this.voices - .map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest)) - .filter((voice) => voice.length); - const melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-')); - const rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join('')); - if (this.timeSignature) - rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`); - return [uys, melodies, rhythm]; - } - get barType() { - if (this.voltaEnd) - return 'VoltaRight'; - const typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]); - if (typeEntris[0] && typeEntris[0][1] >= 1) - return typeEntris[0][0]; - return null; - } - get partialDuration() { - if (!Number.isFinite(this.duration)) - return false; - const signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature); - return this.duration < signatureDuration; + static performAbsoluteNotes(abNotes, { withRestTied = false } = {}) { + const notes = abNotes + .filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped) + .map((note) => ({ + measure: note.measure, + channel: note.channel, + track: note.track, + start: note.start, + startTick: note.startTick, + endTick: note.endTick, + pitch: note.pitch, + duration: note.duration, + velocity: note.velocity || 127, + id: note.id, + ids: note.ids, + staffTrack: note.staffTrack, + contextIndex: note.contextIndex, + implicitType: note.implicitType, + chordPosition: note.chordPosition, + })); + const noteMap = notes.reduce((map, note) => { + const key = `${note.channel}|${note.start}|${note.pitch}`; + const priorNote = map[key]; + if (priorNote) + priorNote.ids.push(...note.ids); + else + map[key] = note; + return map; + }, {}); + return Object.values(noteMap); } - postRegulate() { - this.endEvent = new EventTerm({ tick: this.duration, x: this.position.right }); - this.updateRoundX(); - solveGraceEvents(this); - solveTremoloPairs(this); - this.updateContextTick(); + constructor(data) { + this.ripe = false; + if (data) + Object.assign(this, data); } - updateRoundX() { - const tickToX = this.tickToX; - if (tickToX) - this.events.forEach((event) => { - const x = tickToX[event.tick]; - if (Number.isFinite(x)) - event.roundX = x; - }); + /*get ordinaryMeasureIndices (): number[] { + if (this.measureLayout) + return this.measureLayout.serialize(LayoutType.Ordinary); + + return Array(this.measures.length).fill(null).map((_, i) => i + 1); + }*/ + // In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias, + // So store the bias values to correct MIDI time from lilyond. + get trackTickBias() { + const headMeasure = this.measures[0]; + return this.trackNames.reduce((map, name, track) => { + map[name] = 0; + if (headMeasure) { + const note = headMeasure.notes.find((note) => note.track === track); + if (note) + map[name] = Math.min(note.tick, 0); + } + return map; + }, {}); } - updateContextTick() { - if (!this.staffGroups) - return; - const contexts = this.contexts.flat(1); - this.staffGroups.flat(1).forEach((staffIndex) => { - const terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)]; - terms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left - let tick = this.duration; - terms.forEach((term) => { - if (term instanceof EventTerm) { - if (!term.fullMeasureRest && !term.zeroHolder) - tick = term.tick; - } - else if (term instanceof ContextedTerm) - term.tick = tick; - }); - }); + get idSet() { + return this.measures.reduce((set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set), new Set()); } - asSolution(ref = undefined) { - if (!this.regulated) - return null; - //let timeSignature = undefined; - //if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature; + toJSON() { return { - //timeSignature, - events: this.events.map((e) => { - const se = { - id: e.id, - tick: e.tick, - tickGroup: e.tickGroup, - timeWarp: e.timeWarp, - }; - if (ref) { - const refEvent = ref.events.find((re) => re.id === e.id); - if (refEvent) { - if (e.division !== refEvent.division) - se.division = e.division; - if (e.dots !== refEvent.dots) - se.dots = e.dots; - if (e.grace !== refEvent.grace) - se.grace = !!e.grace; - if (e.beam !== refEvent.beam) - se.beam = e.beam; - if (e.fullMeasureRest !== refEvent.fullMeasureRest) - se.fullMeasure = e.fullMeasureRest; - } - } - return se; - }), - voices: this.voices, - duration: this.duration, - priority: -this.solutionStat?.loss, + __prototype: 'LilyNotation', + //pitchContextGroup: this.pitchContextGroup, + //measureLayout: this.measureLayout, + measures: this.measures, + idTrackMap: this.idTrackMap, + trackNames: this.trackNames, + ripe: this.ripe, }; } - applySolution(solution) { - if (solution.timeSignature) { - this.basics.forEach((basic) => { - basic.timeSignature = solution.timeSignature; - basic.doubtfulTimesig = false; + toAbsoluteNotes(measureIndices /*= this.ordinaryMeasureIndices*/) { + let measureTick = 0; + const measureNotes = measureIndices.map((index) => { + const measure = this.measures[index - 1]; + console.assert(!!measure, 'invalid measure index:', index, this.measures.length); + const notes = measure.notes.map((mnote) => { + return { + startTick: measureTick + mnote.tick, + endTick: measureTick + mnote.tick + mnote.duration, + start: measureTick + mnote.tick, + duration: mnote.duration, + measure: index, + ...pick__default["default"](mnote, COMMON_NOTE_FIELDS), + }; }); - } - this.voices = solution.voices; - this.duration = solution.duration; - this.events.forEach((event) => { - event.timeWarp = null; - event.tick = null; - event.tickGroup = null; - const se = solution.events?.find((e) => e.id === event.id); - if (se) { - event.tick = se.tick; - event.timeWarp = se.timeWarp; - event.tickGroup = se.tickGroup; - if (Number.isFinite(se.division)) - event.division = se.division; - if (Number.isFinite(se.dots)) - event.dots = se.dots; - if (se.beam !== undefined) - event.beam = se.beam; - if (se.grace !== undefined) - event.grace = se.grace ? GraceType.Grace : undefined; - if (se.fullMeasure) - event.rest = 'R'; - } + measureTick += measure.duration; + return notes; }); - if (Number.isFinite(solution.priority)) - this.solutionStat = { loss: -solution.priority }; - this.postRegulate(); + return [].concat(...measureNotes); } - cleanupRegulation() { - this.voices = null; - this.duration = null; - this.events.forEach((event) => { - event.tick = null; - event.tickGroup = null; - event.timeWarp = null; + /*getMeasureIndices (type: LayoutType) { + return this.measureLayout.serialize(type); + }*/ + toPerformingNotation(measureIndices /*= this.ordinaryMeasureIndices*/, options = {}) { + //console.debug("toPerformingNotation:", this, measureIndices); + const abNotes = this.toAbsoluteNotes(measureIndices); + const notes = MetaNotation.performAbsoluteNotes(abNotes, options); + //const lastNote = notes[notes.length - 1]; + const endTime = Math.max(...notes.map((note) => note.start + note.duration)); + const endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0); + const notation = new musicWidgets.MusicNotation.Notation({ + ticksPerBeat: TICKS_PER_BEAT, + meta: {}, + tempos: [], + channels: [notes], + endTime, + endTick, + }); + return notation; + } + toPerformingMIDI(measureIndices, { trackList } = {}) { + if (!measureIndices.length) + return null; + // to avoid begin minus tick + const zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || [])); + let measureTick = zeroTick; + const measureEvents = measureIndices.map((index) => { + const measure = this.measures[index - 1]; + console.assert(!!measure, 'invalid measure index:', index, this.measures.length); + const events = measure.events.map((mevent) => ({ + ticks: measureTick + mevent.ticks, + track: mevent.track, + data: { + ...mevent.data, + measure: index, + }, + })); + measureTick += measure.duration; + return events; + }); + const eventPriority = (event) => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0); + const tracks = [].concat(...measureEvents).reduce((tracks, mevent) => { + tracks[mevent.track] = tracks[mevent.track] || []; + tracks[mevent.track].push({ + ticks: mevent.ticks, + ...mevent.data, + }); + return tracks; + }, []); + tracks[0] = tracks[0] || []; + /*tracks[0].push({ + ticks: 0, + type: "meta", + subtype: "text", + text: `${npmPackage.name} ${npmPackage.version}`, + });*/ + // append note events + measureTick = zeroTick; + measureIndices.map((index) => { + const measure = this.measures[index - 1]; + console.assert(!!measure, 'invalid measure index:', index, this.measures.length); + if (!Number.isFinite(measure.duration)) + return; + measure.notes.forEach((note) => { + if (trackList && !trackList[note.track]) + return; + if (note.rest) + return; + const tick = measureTick + note.tick; + const track = (tracks[note.track] = tracks[note.track] || []); + note.subNotes.forEach((subnote) => { + track.push({ + ticks: tick + subnote.startTick, + measure: index, + ids: note.ids, + type: 'channel', + subtype: 'noteOn', + channel: note.channel, + noteNumber: subnote.pitch, + velocity: subnote.velocity, + staffTrack: note.staffTrack, + staff: note.staff, + }); + track.push({ + ticks: tick + subnote.endTick, + measure: index, + ids: note.ids, + type: 'channel', + subtype: 'noteOff', + channel: note.channel, + noteNumber: subnote.pitch, + velocity: 0, + staffTrack: note.staffTrack, + staff: note.staff, + }); + }); + }); + measureTick += measure.duration; }); - } - regulateTest() { - this.duration = 0; - this.voices = this.rows.map((row) => row.events.map((e) => e.id)); - this.voices.forEach((ids) => { - let tick = 0; - const events = ids.map((id) => this.events.find((e) => e.id === id)); - events.forEach((e, index) => { - e.tickGroup = index; - e.tick = tick; - tick += e.duration; + const finalTick = measureTick; + // ensure no empty track + for (let t = 0; t < tracks.length; ++t) + tracks[t] = tracks[t] || []; + // sort & make deltaTime + tracks.forEach((events) => { + events.sort((e1, e2) => eventPriority(e1) - eventPriority(e2)); + let ticks = 0; + events.forEach((event) => { + event.deltaTime = event.ticks - ticks; + if (!Number.isFinite(event.deltaTime)) + event.deltaTime = 0; + else + ticks = event.ticks; }); - this.duration = Math.max(this.duration, tick); + events.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' }); }); + return { + header: { + formatType: 0, + ticksPerBeat: TICKS_PER_BEAT, + }, + tracks, + zeroTick, + }; } - regulateSimple() { - SimplePolicy.computeMeasureTicks(this); - SimplePolicy.computeMeasureVoices(this); + toPerformingNotationWithEvents(measureIndices, options = {}) { + if (!measureIndices.length) + return null; + const { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options); + const notation = musicWidgets.MusicNotation.Notation.parseMidi(midi); + assignNotationNoteDataFromEvents(notation); + let tick = zeroTick; + notation.measures = measureIndices.map((index) => { + const startTick = tick; + tick += this.measures[index - 1].duration; + return { + index, + startTick, + endTick: tick, + }; + }); + return notation; } - async regulateEquations(options) { - await EquationPolicy.regulateMeasure(this, options); + // find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat + setTempo(bpm) { + let found = false; + for (const measure of this.measures) { + for (const event of measure.events) { + if (event.data.subtype === 'setTempo') { + event.data.microsecondsPerBeat = 60e6 / bpm; + found = true; + } + } + } + return found; } - // compute event.tick, event.tickGroup, event.timeWarp, voices, duration - async regulate({ policy = 'advanced', ...options } = {}) { - switch (policy) { - case 'test': - this.regulateTest(); - break; - case 'equations': - case 'advanced': - await this.regulateEquations(options); - break; - case 'simple': - default: - this.regulateSimple(); +} +const assignNotationNoteDataFromEvents = (midiNotation, fields = ['ids', 'measure', 'staffTrack']) => { + const noteId = (channel, pitch, tick) => `${channel}|${pitch}|${tick}`; + const noteMap = midiNotation.notes.reduce((map, note) => { + map[noteId(note.channel, note.pitch, note.startTick)] = note; + return map; + }, {}); + midiNotation.events.forEach((event) => { + if (event.data.subtype === 'noteOn') { + const id = noteId(event.data.channel, event.data.noteNumber, event.ticks); + const note = noteMap[id]; + console.assert(!!note, 'cannot find note of', id); + if (note) + Object.assign(note, pick__default["default"](event.data, fields)); + } + }); +}; + +var sha256 = {exports: {}}; + +var core = {exports: {}}; + +(function (module, exports) { +(function (root, factory) { + { + // CommonJS + module.exports = factory(); + } +}(this, function () { + + /*globals window, global, require*/ + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined$1) { + + var crypto; + + // Native crypto from window (Browser) + if (typeof window !== 'undefined' && window.crypto) { + crypto = window.crypto; + } + + // Native crypto in web worker (Browser) + if (typeof self !== 'undefined' && self.crypto) { + crypto = self.crypto; + } + + // Native crypto from worker + if (typeof globalThis !== 'undefined' && globalThis.crypto) { + crypto = globalThis.crypto; + } + + // Native (experimental IE 11) crypto from window (Browser) + if (!crypto && typeof window !== 'undefined' && window.msCrypto) { + crypto = window.msCrypto; + } + + // Native crypto from global (NodeJS) + if (!crypto && typeof global !== 'undefined' && global.crypto) { + crypto = global.crypto; + } + + // Native crypto import via require (NodeJS) + if (!crypto && typeof commonjsRequire === 'function') { + try { + crypto = require('crypto'); + } catch (err) {} + } + + /* + * Cryptographically secure pseudorandom number generator + * + * As Math.random() is cryptographically not safe to use + */ + var cryptoSecureRandomInt = function () { + if (crypto) { + // Use getRandomValues method (Browser) + if (typeof crypto.getRandomValues === 'function') { + try { + return crypto.getRandomValues(new Uint32Array(1))[0]; + } catch (err) {} + } + + // Use randomBytes method (NodeJS) + if (typeof crypto.randomBytes === 'function') { + try { + return crypto.randomBytes(4).readInt32LE(); + } catch (err) {} + } + } + + throw new Error('Native crypto module could not be used to get secure random number.'); + }; + + /* + * Local polyfill of Object.create + + */ + var create = Object.create || (function () { + function F() {} + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()); + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined$1) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var j = 0; j < thatSigBytes; j += 4) { + thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + for (var i = 0; i < nBytes; i += 4) { + words.push(cryptoSecureRandomInt()); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + var processedWords; + + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + return CryptoJS; + +})); +}(core)); + +(function (module, exports) { +(function (root, factory) { + { + // CommonJS + module.exports = factory(core.exports); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + return CryptoJS.SHA256; + +})); +}(sha256)); + +var _SHA256 = sha256.exports; + +const SHA256 = (source) => { + const { words, sigBytes } = _SHA256(source); + const uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x)); + const word_len = sigBytes / words.length; + return new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff); +}; +const HASH_LEN = 256; +class HashVector { + static fromHash(hash) { + const fields = []; + for (const byte of hash) { + for (let b = 0; b < 8; ++b) + fields.push((byte >> b) & 1 ? 1 : -1); } - this.postRegulate(); + return new HashVector(fields); } - createPatch() { - return new PatchMeasure({ - measureIndex: this.measureIndex, - staffMask: this.staffMask, - basic: this.basics[0], - //points: [], - events: this.events, - contexts: this.contexts, - marks: this.marks, - voices: this.voices, - }); + static fromString(source) { + const hash = SHA256(source); + return HashVector.fromHash(hash); } - createClusters() { - const trueEventIds = this.voices && new Set(this.voices.flat(1)); - return this.staffGroups - .filter((idx) => idx.length) - .map((staffIndices) => { - const staffY0 = this.position.staffYs[0]; - const staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0; - const events = this.events.filter((event) => staffIndices.includes(event.staff)); - if (!events.length) - return null; - const elements = events.map((event) => ({ - index: event.id, - voice: (this.voices || []).findIndex((voice) => voice.includes(event.id)), - type: event.rest ? EventElementType.REST : EventElementType.CHORD, - staff: staffIndices.indexOf(event.staff), - x: event.tipX, - pivotX: event.pivotX, - y1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]), - y2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY), - headY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1], - feature: event.feature, - division: event.division, - dots: event.dots, - beam: event.beam || null, - stemDirection: event.stemDirection, - grace: !!event.grace, - tremoloCatcher: event.tremoloCatcher, - timeWarped: !!event.timeWarp, - fullMeasure: event.fullMeasureRest, - tick: event.tick || 0, - fake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake - })); - if (!elements.some((elem) => !elem.fake)) - return null; - const signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature); - // BOS & EOS - elements.unshift({ - index: 0, - type: EventElementType.BOS, - staff: null, - division: null, - beam: null, - dots: null, - stemDirection: null, - grace: false, - tremoloCatcher: false, - fullMeasure: false, - x: this.position.left, - pivotX: this.position.left, - y1: 0, - y2: 0, - headY: 0, - feature: null, - timeWarped: this.duration < signatureDuration, - tick: 0, - fake: false, - }); - elements.push({ - index: -1, - type: EventElementType.EOS, - staff: null, - division: null, - beam: null, - dots: null, - stemDirection: null, - grace: false, - tremoloCatcher: false, - fullMeasure: false, - x: this.position.right, - pivotX: this.position.right, - y1: 0, - y2: 0, - headY: 0, - feature: null, - timeWarped: false, - tick: this.duration, - fake: false, - }); - let matrixH = null; - if (this.voices) { - matrixH = elements.map(() => elements.map(() => 0)); - this.voices.forEach((voice) => { - let tar = 0; - voice.forEach((id) => { - const src = elements.findIndex((e) => e.index === id); - if (src > 0 && tar >= 0) - matrixH[src][tar] = 1; - tar = src; - }); - if (tar >= 0) - matrixH[elements.length - 1][tar] = 1; - }); - } - const annotation = { ...this.solutionStat, patched: this.patched }; - const backgroundImages = this.backgroundImages && - this.backgroundImages.map(({ url, position }) => ({ - url, - position: { - ...position, - y: position.y - staffY0, - }, - })); - return new EventCluster({ - index: this.measureIndex, - duration: this.duration, - signatureDuration, - staffY0, - elements, - matrixH, - annotation, - backgroundImages, - }); - }) - .filter(Boolean); + static fromWords(words) { + const vs = words.map((word) => HashVector.fromString(word)); + return vs.reduce((sum, v) => sum.add(v), HashVector.zero); } - applyClusters(clusters) { - const id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1; - this.matrixH = Array(id_max + 1) - .fill(null) - .map(() => Array(id_max).fill(0)); - clusters.forEach((cluster) => { - const ids = cluster.elements.map((e) => e.index); - console.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length); - for (let is = 1; is < ids.length; ++is) { - for (let it = 0; it < ids.length - 1; ++it) { - const srcId = ids[is] < 0 ? id_max : ids[is]; - const tarId = ids[it]; - this.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it]; - } - } - // event predisposition - cluster.elements.forEach((elem) => { - const event = this.events.find((event) => event.id === elem.index); - if (event) { - event.predisposition = elem.predisposition; - if (event.predisposition.grace !== undefined) - event.grace = event.predisposition.grace ? GraceType.Grace : null; - } - }); - }); - // estimated measure duration - this.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length; + static concat(...vectors) { + const fields = vectors.map((v) => v.fields).flat(1); + return new HashVector(fields); + } + constructor(fields = null) { + this.fields = fields || Array(HASH_LEN).fill(0); + } + get length() { + return this.fields.length; + } + toHash() { + return Uint8Array.from(Array(this.length / 8) + .fill(0) + .map((_, i) => { + const bits = this.fields.slice(i * 8, (i + 1) * 8); + return bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0); + })); + } + add(vec) { + this.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i])); + return this; + } + scale(factor) { + this.fields = this.fields.map((value) => value * factor); + return this; + } + sub(crop) { + const fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop); + return new HashVector(fields); + } + static get zero() { + return new HashVector(); } } -SpartitoMeasure.className = 'SpartitoMeasure'; -SpartitoMeasure.blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit']; +const odds = (byte) => { + let result = 0; + for (let b = byte; b > 0; b >>= 1) { + if (b % 2) + ++result; + } + return result; +}; +const ODDS = Array(2 ** 8) + .fill(0) + .map((_, i) => odds(i)); +ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {}); +const countOnes = (hash) => hash.reduce((sum, byte) => sum + ODDS[byte], 0); +const xorHashes = (hash1, hash2) => hash1.map((byte, i) => byte ^ hash2[i]); +const cosHashes = (hash1, hash2) => { + const len = hash1.length * 8; + const xor = xorHashes(hash1, hash2); + const ones = countOnes(xor); + return (len - ones * 2) / len; +}; +const i2hex = (i) => ('0' + i.toString(16)).slice(-2); +const hashToHex = (hash) => Array.from(hash).map(i2hex).join(''); +const hashToBigInt = (hash) => { + // __NOT_FOR_BROWSER_ + return Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n); + /* + // _NOT_FOR_BROWSER__ + throw new Error('BigInt not supported'); + //*/ +}; const emptyVoiceFromStaffMeasure = (staff, chiefVoice = false) => { return { @@ -13939,1123 +14211,851 @@ class StaffContext { break; case -1: if (this.timeSigNumSet) - this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number; - else - this.timeSignature.numerator = term.number; - this.timeSigNumSet = true; - break; - default: - this.logger.warn('unexpected time signature Y:', term.y); - } - this.doubtingTimesig = this.partialTimeSignature; - break; - } - } - resetMeasure() { - this.alters = []; - this.timeSigNumSet = false; - this.timeSigDenSet = false; - } - resetSystem() { - this.keyAlters = []; - } - get keySignature() { - return this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0); - } - get partialTimeSignature() { - return !this.timeSigNumSet !== !this.timeSigDenSet; - } - noteToY(note) { - return -note / 2 - this.clef - this.octaveShift * 3.5; - } - pitchToNote(pitch, { preferredAlter = null } = {}) { - if (!preferredAlter) - preferredAlter = this.keySignature < 0 ? -1 : 1; - const group = Math.floor((pitch - MIDDLE_C) / 12); - const gp = mod12(pitch); - const alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter); - const gn = GROUP_N_TO_PITCH.indexOf(alteredGp); - this.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp); - const naturalNote = group * 7 + gn; - const alterValue = gp - alteredGp; - const keyAlterValue = this.keyAlters[gn] || 0; - const onAcc = Number.isInteger(this.alters[naturalNote]); - const alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue; - return { note: naturalNote, alter }; - } - pitchToY(pitch, { preferredAlter = null } = {}) { - const { note, alter } = this.pitchToNote(pitch, { preferredAlter }); - const y = this.noteToY(note); - return { y, alter }; - } - yToNote(y) { - this.logger.assert(Number.isInteger(y * 2), 'invalid y:', y); - return (-y - this.octaveShift * 3.5 - this.clef) * 2; - } - alterOnNote(note) { - if (Number.isInteger(this.alters[note])) - return this.alters[note]; - const gn = mod7(note); - if (Number.isInteger(this.keyAlters[gn])) - return this.keyAlters[gn]; - return 0; - } - noteToPitch(note) { - const group = Math.floor(note / 7); - const gn = mod7(note); - const pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note); - if (!Number.isFinite(pitch)) { - this.logger.warn('invalid pitch value:', pitch, note, group, gn); - return -1; - } - return pitch; - } - yToPitch(y) { - return this.noteToPitch(this.yToNote(y)); - } - yToPitchName(y) { - const note = this.yToNote(y); - const group = Math.floor(note / 7); - const gn = mod7(note); - let alter = this.alterOnNote(note); - if (!alter && !Number.isInteger(this.alters[note])) - alter = null; - return `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`; - } -} - -const VERSION = 14; -const GRAND_STAFF_LAYOUT = '{-}'; -const processStaffContext = (staff, logger = new DummyLogger()) => { - const context = new StaffContext(); - context.logger = logger; - for (const row of staff.rows) { - for (const measure of row) { - const startEvent = measure.terms.find((term) => term instanceof EventTerm); - let tick = startEvent ? Math.min(startEvent.tick, 0) : 0; - measure.terms.forEach((term) => { - if (term instanceof ContextedTerm) { - term.tick = tick; // TODO: not working here because measure not regulated yet - context.change(term); - } - else if (term instanceof EventTerm) { - const endTick = term.tick + (term.duration || 0); - if (endTick > tick) - tick = endTick; - if (term.ys) { - term.pitches = term.ys.map((y) => { - const note = context.yToNote(y); - const alter = context.alterOnNote(note); - return { note, alter, octaveShift: context.octaveShift }; - }); - } - } - }); - measure.timeSignature = { ...context.timeSignature }; - measure.timeSigNumeric = context.timeSigNumeric; - measure.doubtfulTimesig = - context.doubtingTimesig || - !Number.isInteger(Math.log2(measure.timeSignature.denominator)) || - measure.timeSignature.numerator <= measure.timeSignature.denominator / 4; - measure.keySignature = context.keySignature; - // fill empty measure duration - if (measure.duration === 0) - measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator; - context.resetMeasure(); - } - context.resetSystem(); - } -}; -const upgradeScoreData = (data) => { - if (data.version < 3) { - const { version, stavesCount, layoutTemplate, ...fields } = data; - let staffLayoutCode = stavesCount > 1 - ? Array(stavesCount - 1) - .fill(',') - .join('') - : ''; - // use graph staff by default for 2 staves score - if (stavesCount === 2) - staffLayoutCode = '{-}'; - data = { - version: 3, - staffLayoutCode, - ...fields, - }; - } - if (data.version < 8) { - // upgrade system measure bar semantics - data.pages.forEach((page) => { - page.systems.forEach((system) => { - if (system.semantics) { - const bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure); - system.semantics = [].concat(...system.staves.map((staff) => { - const oy = staff.top + staff.staffY; - return bars.map((point) => ({ - ...point, - y: point.y + oy, - extension: { - ...point.extension, - y1: point.extension.y1 + oy, - y2: point.extension.y2 + oy, - }, - })); - })); + this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number; + else + this.timeSignature.numerator = term.number; + this.timeSigNumSet = true; + break; + default: + this.logger.warn('unexpected time signature Y:', term.y); } - }); - }); - data.version = 8; - } - if (data.version < 9) { - // remove old format spartito - data.spartito = null; - data.version = 9; - } - return data; -}; -const bitsToMask = (bits) => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0); -class Score extends SimpleClass { - constructor(data) { - super(); - this.version = VERSION; - super.assign(upgradeScoreData(data)); - this.pages = this.pages || []; - this.headers = this.headers || {}; - this.instrumentDict = this.instrumentDict || {}; - this.pageSize = this.pageSize || { - // A4 paper - width: 794, - height: 1122, - }; - this.unitSize = this.unitSize || null; - this.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(',')); - } - get systems() { - return [].concat(...this.pages.map((page) => page.systems)); - } - get measureCount() { - return this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0); - } - get imageKeys() { - return [ - ...this.pages.map((page) => page.source?.url), - ...this.systems.map((system) => system.backgroundImage), - ...[].concat(...this.systems.map((system) => [...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean))), - ].filter(Boolean); + this.doubtingTimesig = this.partialTimeSignature; + break; + } } - get breakSystemIndices() { - const indices = []; - let systemCount = 0; - this.pages.forEach((page, i) => { - if (i < this.pages.length - 1) { - systemCount += page.systems.length; - indices.push(systemCount - 1); - } - }); - return indices; + resetMeasure() { + this.alters = []; + this.timeSigNumSet = false; + this.timeSigDenSet = false; } - get staffLayout() { - return parseCode(this.staffLayoutCode); + resetSystem() { + this.keyAlters = []; } - get measureLayoutCode() { - return this.spartito?.measureLayoutCode; + get keySignature() { + return this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0); } - get maxStavesCount() { - return Math.max(...this.systems.map((system) => system.staves.length), 0); + get partialTimeSignature() { + return !this.timeSigNumSet !== !this.timeSigDenSet; } - get sidBlackList() { - const ids = [].concat(...this.systems.map((system) => system.sidBlackList)); - return new Set(ids); + noteToY(note) { + return -note / 2 - this.clef - this.octaveShift * 3.5; } - get sidWhiteList() { - const ids = [].concat(...this.systems.map((system) => system.sidWhiteList)); - return new Set(ids); + pitchToNote(pitch, { preferredAlter = null } = {}) { + if (!preferredAlter) + preferredAlter = this.keySignature < 0 ? -1 : 1; + const group = Math.floor((pitch - MIDDLE_C) / 12); + const gp = mod12(pitch); + const alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter); + const gn = GROUP_N_TO_PITCH.indexOf(alteredGp); + this.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp); + const naturalNote = group * 7 + gn; + const alterValue = gp - alteredGp; + const keyAlterValue = this.keyAlters[gn] || 0; + const onAcc = Number.isInteger(this.alters[naturalNote]); + const alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue; + return { note: naturalNote, alter }; } - get semanticHash() { - const ids = [].concat(...this.systems.map((system) => [].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : []))))); - return sha1__default["default"](ids.join('')); + pitchToY(pitch, { preferredAlter = null } = {}) { + const { note, alter } = this.pitchToNote(pitch, { preferredAlter }); + const y = this.noteToY(note); + return { y, alter }; } - eventSystemsToTermStaves(eventSystems, logger = new DummyLogger()) { - // [staff] - const termStaves = Array(this.maxStavesCount) - .fill(null) - .map((_, staffIndex) => { - return { - // [system, measure] - rows: eventSystems.map((sys, i) => sys.columns.map((column, ii) => { - const measure = column.rows[staffIndex]; - console.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows); - const contexts = measure.contexts; - // prepend octave shift 0 at begin of every system - if (ii === 0) { - if (!contexts.some((term) => term.type === ContextType.OctaveShift)) { - contexts.unshift(new ContextedTerm({ - staff: staffIndex, - x: 0, - y: 0, - tokenType: TokenType.OctaveShift0, - tick: 0, - })); - } - } - const terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x); - const pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i); - return { - terms, - //xToTick: column.xToTick, - duration: column.duration, - pageBreak, - }; - })), - }; - }); - termStaves.forEach((staff) => processStaffContext(staff, logger)); - return termStaves; + yToNote(y) { + this.logger.assert(Number.isInteger(y * 2), 'invalid y:', y); + return (-y - this.octaveShift * 3.5 - this.clef) * 2; } - resetPageLayout(parameters) { - const { unitSize = this.unitSize, pageSize = this.pageSize } = parameters; - const newCenter = { - x: (pageSize.width * 0.5) / unitSize, - y: (pageSize.height * 0.5) / unitSize, - }; - this.pages.forEach((page) => { - const offsetX = newCenter.x - page.width / 2; - const offsetY = newCenter.y - page.height / 2; - page.systems.forEach((system) => { - system.left += offsetX; - system.top += offsetY; - }); - if (page.semantics) { - page.semantics.forEach((point) => { - point.x += offsetX; - point.y += offsetY; - }); - } - page.width = pageSize.width / unitSize; - page.height = pageSize.height / unitSize; - page.assemble({ textAnnotations: this.textAnnotations }); - }); - this.unitSize = unitSize; - this.pageSize = pageSize; + alterOnNote(note) { + if (Number.isInteger(this.alters[note])) + return this.alters[note]; + const gn = mod7(note); + if (Number.isInteger(this.keyAlters[gn])) + return this.keyAlters[gn]; + return 0; } - getMeasure(measureIndex) { - let index = measureIndex; - for (const system of this.systems) { - if (index < system.measureCount) { - const staff = system.staves[0]; - const measure = staff.measures[index]; - console.assert(measure, 'measure is null:', system.measureCount, index, staff.measures); - const measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]); - return { - measureIndex, - system, - localIndex: index, - left: measure.left, - right: measure.right, - measures, - }; - } - index -= system.measureCount; + noteToPitch(note) { + const group = Math.floor(note / 7); + const gn = mod7(note); + const pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note); + if (!Number.isFinite(pitch)) { + this.logger.warn('invalid pitch value:', pitch, note, group, gn); + return -1; } - return null; + return pitch; } - getRawCluster(measureIndex, threshold, { timeSignature } = {}) { - const position = this.getMeasure(measureIndex); - if (!position) - return null; - const { system, left, right } = position; - //console.log("measure:", system, left, right); - const elements = [BOS_ELEMENT]; - if (timeSignature) - elements.push(...fractionToElems(timeSignature)); - const systemY0 = system.staves[0].top + system.staves[0].staffY - 2; - system.staves.forEach((staff) => { - let points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right); - points = solveOverlapping(points); - // exlude tempo noteheads - const tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead); - tempoNhs.forEach((tempoNh) => { - const index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3); - if (index >= 0) - points.splice(index, 1); - }); - const y0 = staff.top + staff.staffY - systemY0; - points.forEach((point) => { - const type = SemanticElementType[point.semantic]; - if (type) { - let y1 = point.y; - let y2 = point.y; - if (type === SemanticElementType.vline_Stem) { - y1 = point.extension.y1; - y2 = point.extension.y2; - } - elements.push({ - id: point.id, - type, - staff: staff.index, - x: point.x - left, - y1: y1 + y0, - y2: y2 + y0, - }); - } - }); - }); - return new SemanticCluster({ - index: measureIndex, - elements, - }); + yToPitch(y) { + return this.noteToPitch(this.yToNote(y)); } - getRawClusters(threshold = 1) { - //const times = this.getMeasuresTime(); - return Array(this.measureCount) - .fill(null) - .map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/)); + yToPitchName(y) { + const note = this.yToNote(y); + const group = Math.floor(note / 7); + const gn = mod7(note); + let alter = this.alterOnNote(note); + if (!alter && !Number.isInteger(this.alters[note])) + alter = null; + return `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`; } - makeSpartito(logger = new DummyLogger()) { - let eventSystems = this.systems.map((system) => system.getEvents(this.maxStavesCount)); - /*if (this.topology) { - const clusters = this.topology.clusters; - - // [measure, staff, event] - const eventsColumns: ChordColumn[][][] = clusters - .filter((cluster) => cluster.index < this.measureCount) - .reduce((columns, cluster) => { - const { system, measures } = this.getMeasure(cluster.index); - const events = cluster.getEvents(); - - const systemY0 = system.staves[0].top + system.staves[0].staffY - 2; - const x0 = measures.filter(Boolean)[0].left; - - const staves = system.getStaffArray(this.maxStavesCount); - - // translate by staff & measure relative offset - events.forEach((event) => { - const staff = staves[event.staff]; - const y0 = staff.top + staff.staffY - systemY0; - event.ys = event.ys.map((y) => roundNumber(y - y0, 0.5)); - - event.left += x0; - event.right += x0; - }); - - const column = measures.map((measure, staffIndex) => { - if (!measure) return []; - - //console.log("m:", mi, "s:", staffIndex); - const localEvents = events.filter((event) => event.staff === staffIndex); - //measure.assignModifiersOnEvents(localEvents); - measure.assignAccessoriesOnEvents(localEvents); - - return localEvents; - }); - - columns[cluster.index] = column; - - return columns; - }, []); - - const breakSystemIndices = this.breakSystemIndices; - - const basicEventSystems = eventSystems; - eventSystems = []; - - let measures = 0; - for (const system of this.systems) { - const esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], { - useXMap: false, - }); - - const basicSys = basicEventSystems[system.index]; - //onst nullN = esys.columns.filter(c => !c).length; - //if (nullN) - // console.log("null:", nullN, esys.columns.length); - esys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i])); +} - const sysIndex = this.systems.indexOf(system); - const pageBreak = breakSystemIndices.includes(sysIndex); - const lastColumn = esys.columns[esys.columns.length - 1]; - if (lastColumn) { - lastColumn.break = true; - lastColumn.pageBreak = pageBreak; +const VERSION = 14; +const GRAND_STAFF_LAYOUT = '{-}'; +const processStaffContext = (staff, logger = new DummyLogger()) => { + const context = new StaffContext(); + context.logger = logger; + for (const row of staff.rows) { + for (const measure of row) { + const startEvent = measure.terms.find((term) => term instanceof EventTerm); + let tick = startEvent ? Math.min(startEvent.tick, 0) : 0; + measure.terms.forEach((term) => { + if (term instanceof ContextedTerm) { + term.tick = tick; // TODO: not working here because measure not regulated yet + context.change(term); + } + else if (term instanceof EventTerm) { + const endTick = term.tick + (term.duration || 0); + if (endTick > tick) + tick = endTick; + if (term.ys) { + term.pitches = term.ys.map((y) => { + const note = context.yToNote(y); + const alter = context.alterOnNote(note); + return { note, alter, octaveShift: context.octaveShift }; + }); + } } - - eventSystems.push(esys); - measures += system.measureCount; - } - }*/ - const staves = this.eventSystemsToTermStaves(eventSystems, logger); - // assign staff basics for columns - eventSystems.forEach((sys, ri) => { - sys.columns.forEach((column, mi) => { - column.basics = staves.map((staff) => { - const { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi]; - return { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig }; - }); - }); - }); - const clusters = null; //this.topology && this.topology.clusters; - const measures = [].concat(...eventSystems.map((esys) => esys.columns.map((column) => { - const measureIndex = column.measureIndex; - const { system, localIndex, left, right } = this.getMeasure(measureIndex); - const cluster = clusters ; - const staffYsFull = []; - system.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY)); - const patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex); - const events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull); - const barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length])); - const indent = localIndex === 0 && system.indent; - return new SpartitoMeasure({ - measureIndex, - staffMask: esys.staffMask, - position: { - systemIndex: system.index, - localIndex, - left, - right, - staffYs: system.staves.map((staff) => staff.top + staff.staffY), - staffYsFull, - }, - //startX: column.startX, - //width: column.width, - duration: patch ? patch.duration : column.duration, - events, - contexts: column.rows.map((row) => row.contexts), - marks: column.marks, - break: column.break, - pageBreak: column.pageBreak, - voltaBegin: column.voltaBegin, - voltaEnd: column.voltaEnd, - alternative: column.alternative, - barTypes, - indent, - basics: patch ? patch.basics : column.basics, - matrixH: cluster , - matrixV: cluster , - voices: patch ? patch.voices : null, - patched: !!patch, }); - }))); - const staffLayout = this.staffLayout; - const staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id))); - this.spartito = new Spartito({ - stavesCount: this.maxStavesCount, - staffGroups, - measures, - }); - return this.spartito; + measure.timeSignature = { ...context.timeSignature }; + measure.timeSigNumeric = context.timeSigNumeric; + measure.doubtfulTimesig = + context.doubtingTimesig || + !Number.isInteger(Math.log2(measure.timeSignature.denominator)) || + measure.timeSignature.numerator <= measure.timeSignature.denominator / 4; + measure.keySignature = context.keySignature; + // fill empty measure duration + if (measure.duration === 0) + measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator; + context.resetMeasure(); + } + context.resetSystem(); } - makeMusicSheet() { - const spartito = this.spartito || this.makeSpartito(); - if (!spartito.regulated) - console.warn('[makeMusicSheet] spartito not regulated.'); - const voiceStaves = spartito.makeVoiceStaves(); - const { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this; - const measureLayout = this.getMeasureLayout(); - return { - title, - pageSize, - unitSize, - measureLayout, - staffLayout, - paperOptions, - headers, - voiceStaves, - instrumentDict, +}; +const upgradeScoreData = (data) => { + if (data.version < 3) { + const { version, stavesCount, layoutTemplate, ...fields } = data; + let staffLayoutCode = stavesCount > 1 + ? Array(stavesCount - 1) + .fill(',') + .join('') + : ''; + // use graph staff by default for 2 staves score + if (stavesCount === 2) + staffLayoutCode = '{-}'; + data = { + version: 3, + staffLayoutCode, + ...fields, }; } - findPoint(sid) { - for (const system of this.systems) { - for (let si = 0; si < system.staves.length; ++si) { - const point = system.staves[si].semantics.find((point) => point.id === sid); - if (point) { - const pageIndex = this.pages.findIndex((page) => page.systems.includes(system)); - return { - point, - pageIndex, - systemIndex: system.index, - staffIndex: si, - }; - } - } - } - return null; - } - getMeasureSemantics(systemIndex, localIndex) { - const system = this.systems[systemIndex]; - if (!system) - return null; - const left = localIndex ? system.measureBars[localIndex - 1] : 0; - const right = system.measureBars[localIndex] || system.width; - return system.staves - .map((staff, si) => { - const staffY = staff.top + staff.staffY; - return staff.semantics - .filter((point) => point.x >= left && point.x < right) - .map((point) => { - const [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y]; - return { - ...point, - staff: si, - sy1: y1 + staffY, - sy2: y2 + staffY, - }; + if (data.version < 8) { + // upgrade system measure bar semantics + data.pages.forEach((page) => { + page.systems.forEach((system) => { + if (system.semantics) { + const bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure); + system.semantics = [].concat(...system.staves.map((staff) => { + const oy = staff.top + staff.staffY; + return bars.map((point) => ({ + ...point, + y: point.y + oy, + extension: { + ...point.extension, + y1: point.extension.y1 + oy, + y2: point.extension.y2 + oy, + }, + })); + })); + } }); - }) - .flat(1); - } - makeTimewiseGraph({ store = false } = {}) { - if (!this.spartito) - return null; - const measures = this.spartito.measures - .filter((measure) => measure.events.length > 0) - .map((measure) => { - const points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex); - const graph = { - measureIndex: measure.measureIndex, - left: measure.position.left, - right: measure.position.right, - points, - }; - if (store) - measure.graph = graph; - return graph; }); - return { measures }; + data.version = 8; } - getTokenMap() { - const map = new Map(); - this.systems.forEach((system) => system.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))); - return map; + if (data.version < 9) { + // remove old format spartito + data.spartito = null; + data.version = 9; } - assemble(confidenceThreshold = 1, logger = new DummyLogger()) { - const ids = new Map(); - const append = (systemIndex, staffIndex, point) => { - const id = hashSemanticPoint(systemIndex, staffIndex, point); - logger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id)); - ids.set(id, point); + return data; +}; +const bitsToMask = (bits) => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0); +class Score extends SimpleClass { + constructor(data) { + super(); + this.version = VERSION; + super.assign(upgradeScoreData(data)); + this.pages = this.pages || []; + this.headers = this.headers || {}; + this.instrumentDict = this.instrumentDict || {}; + this.pageSize = this.pageSize || { + // A4 paper + width: 794, + height: 1122, }; - this.pages.forEach((page, index) => (page.index = index)); - let measureIndex = 0; - this.systems.forEach((system, systemIndex) => { - system.index = systemIndex; - system.headMeasureIndex = measureIndex; - system.prev = this.systems[systemIndex - 1] || null; - system.next = this.systems[systemIndex + 1] || null; - if (system.semantics && system.semantics.length) - system.semantics.forEach((point) => append(systemIndex, null, point)); - system.assemble(confidenceThreshold, logger); - measureIndex += system.measureCount; - }); + this.unitSize = this.unitSize || null; + this.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(',')); + } + get systems() { + return [].concat(...this.pages.map((page) => page.systems)); + } + get measureCount() { + return this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0); + } + get imageKeys() { + return [ + ...this.pages.map((page) => page.source?.url), + ...this.systems.map((system) => system.backgroundImage), + ...[].concat(...this.systems.map((system) => [...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean))), + ].filter(Boolean); + } + get breakSystemIndices() { + const indices = []; + let systemCount = 0; this.pages.forEach((page, i) => { - page.systems.forEach((system) => (system.pageIndex = i)); - page.assemble({ textAnnotations: this.textAnnotations }, logger); + if (i < this.pages.length - 1) { + systemCount += page.systems.length; + indices.push(systemCount - 1); + } }); + return indices; } - assembleSystem(system, confidenceThreshold = 1) { - this.systems.forEach((system, si) => (system.index = si)); - const systemIndex = system.index; - if (system.semantics && system.semantics.length) { - system.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point)); - system.assemble(confidenceThreshold); - } + get staffLayout() { + return parseCode(this.staffLayoutCode); } - markVoices(staves) { - const tokenMap = this.getTokenMap(); - for (const token of tokenMap.values()) - token.voice = 0; - const vis = [] - .concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v]))) - .sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2) - .map(([s, v]) => `${s}|${v}`); - staves.forEach((staff, si) => (staff.voices || []).forEach((voice, vi) => voice.measures.forEach((measure) => { - const voiceIndex = vis.indexOf(`${si}|${vi}`); - const events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm); - events.forEach((event) => { - const notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : []; - const accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : []; - //console.log("notes:", si, vi, mi, event.noteIds, notes, accessories); - [...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex)); - if (event.timeWarp) - notes.forEach((note) => (note.timeWarped = true)); - }); - }))); + get measureLayoutCode() { + return this.spartito?.measureLayoutCode; } - async replaceImageKeys(proc) { - await Promise.all([ - ...this.pages.map(async (page) => { - if (page.source) - page.source.url = await proc(page.source.url); - }), - ...this.systems.map((system) => Promise.all([ - proc(system.backgroundImage).then((key) => (system.backgroundImage = key)), - ...system.staves.map(async (staff) => { - staff.backgroundImage = await proc(staff.backgroundImage); - staff.maskImage = await proc(staff.maskImage); - }), - ])), - ]); + get maxStavesCount() { + return Math.max(...this.systems.map((system) => system.staves.length), 0); } - inferenceStaffLayout() { - // inference the complete layout - const staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0); - this.staffLayoutCode = Array(staffTotal).fill('').join(','); - const completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance); - if (!completeSystems.length) - return; // no enough evidence - const candidateCodes = completeSystems - .map((system) => { - try { - const layout = parseCode(system.bracketsAppearance); - if (layout.staffIds.length !== system.staves.length) - return null; - return system.bracketsAppearance; - } - catch (_) { - return null; - } - }) - .filter(Boolean); - if (!candidateCodes.length) - return; // no valid layout - const codeCounting = candidateCodes.reduce((acc, code) => { - const count = acc[code] || 0; - acc[code] = count + 1; - return acc; - }, {}); - const maxCount = Math.max(...Object.values(codeCounting)); - const code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0]; - // added connection lines between braces {-} - const connectedCode = code.replace(/\{,*\}/g, (match) => match.replace(/,/g, '-')); - const layout = parseCode(connectedCode); - this.staffLayoutCode = connectedCode; - //console.log("complete code:", code); - // inference systems' mask - let lastSys = null; - for (const system of this.systems) { - if (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) { - system.staffMaskChanged = null; - continue; - } - if (system.staves.length < staffTotal && system.bracketsAppearance) { - // validate the system brackets code - try { - if (!parseCode(system.bracketsAppearance)) - continue; - } - catch (_) { - continue; - } - const search = (bits) => { - if (bits.length > layout.staffIds.length) - return null; - if (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) - return bitsToMask(bits); - for (const bit of [1, 0]) { - const bb = [...bits, bit]; - const code1 = layout.partialMaskCode(bb); - if (code1 === system.bracketsAppearance) - return bitsToMask(bb); - else if (system.bracketsAppearance.startsWith(code1)) { - const result = search(bb); - if (result) - return result; + get sidBlackList() { + const ids = [].concat(...this.systems.map((system) => system.sidBlackList)); + return new Set(ids); + } + get sidWhiteList() { + const ids = [].concat(...this.systems.map((system) => system.sidWhiteList)); + return new Set(ids); + } + get semanticHash() { + const ids = [].concat(...this.systems.map((system) => [].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : []))))); + return sha1__default["default"](ids.join('')); + } + eventSystemsToTermStaves(eventSystems, logger = new DummyLogger()) { + // [staff] + const termStaves = Array(this.maxStavesCount) + .fill(null) + .map((_, staffIndex) => { + return { + // [system, measure] + rows: eventSystems.map((sys, i) => sys.columns.map((column, ii) => { + const measure = column.rows[staffIndex]; + console.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows); + const contexts = measure.contexts; + // prepend octave shift 0 at begin of every system + if (ii === 0) { + if (!contexts.some((term) => term.type === ContextType.OctaveShift)) { + contexts.unshift(new ContextedTerm({ + staff: staffIndex, + x: 0, + y: 0, + tokenType: TokenType.OctaveShift0, + tick: 0, + })); } } - return null; + const terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x); + const pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i); + return { + terms, + //xToTick: column.xToTick, + duration: column.duration, + pageBreak, + }; + })), + }; + }); + termStaves.forEach((staff) => processStaffContext(staff, logger)); + return termStaves; + } + resetPageLayout(parameters) { + const { unitSize = this.unitSize, pageSize = this.pageSize } = parameters; + const newCenter = { + x: (pageSize.width * 0.5) / unitSize, + y: (pageSize.height * 0.5) / unitSize, + }; + this.pages.forEach((page) => { + const offsetX = newCenter.x - page.width / 2; + const offsetY = newCenter.y - page.height / 2; + page.systems.forEach((system) => { + system.left += offsetX; + system.top += offsetY; + }); + if (page.semantics) { + page.semantics.forEach((point) => { + point.x += offsetX; + point.y += offsetY; + }); + } + page.width = pageSize.width / unitSize; + page.height = pageSize.height / unitSize; + page.assemble({ textAnnotations: this.textAnnotations }); + }); + this.unitSize = unitSize; + this.pageSize = pageSize; + } + getMeasure(measureIndex) { + let index = measureIndex; + for (const system of this.systems) { + if (index < system.measureCount) { + const staff = system.staves[0]; + const measure = staff.measures[index]; + console.assert(measure, 'measure is null:', system.measureCount, index, staff.measures); + const measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]); + return { + measureIndex, + system, + localIndex: index, + left: measure.left, + right: measure.right, + measures, }; - const mask = search([]); - //console.log("mask:", system.bracketsAppearance, mask.toString(2)); - system.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null; } - lastSys = system; + index -= system.measureCount; } + return null; } - assignBackgroundForMeasure(measure) { - measure.backgroundImages = []; - const system = this.systems[measure.position.systemIndex]; - if (system.backgroundImage) { - measure.backgroundImages.push({ - url: system.backgroundImage, - position: system.imagePosition, - original: true, - }); - } + getRawCluster(measureIndex, threshold, { timeSignature } = {}) { + const position = this.getMeasure(measureIndex); + if (!position) + return null; + const { system, left, right } = position; + //console.log("measure:", system, left, right); + const elements = [BOS_ELEMENT]; + if (timeSignature) + elements.push(...fractionToElems(timeSignature)); + const systemY0 = system.staves[0].top + system.staves[0].staffY - 2; system.staves.forEach((staff) => { - if (!system.backgroundImage && staff.backgroundImage) - measure.backgroundImages.push({ - url: staff.backgroundImage.toString(), - position: { - ...staff.imagePosition, - y: staff.imagePosition.y + staff.top, - }, - original: true, - }); - if (staff.maskImage) { - measure.backgroundImages.push({ - url: staff.maskImage.toString(), - position: { - ...staff.imagePosition, - y: staff.imagePosition.y + staff.top, - }, + let points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right); + points = solveOverlapping(points); + // exlude tempo noteheads + const tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead); + tempoNhs.forEach((tempoNh) => { + const index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3); + if (index >= 0) + points.splice(index, 1); + }); + const y0 = staff.top + staff.staffY - systemY0; + points.forEach((point) => { + const type = SemanticElementType[point.semantic]; + if (type) { + let y1 = point.y; + let y2 = point.y; + if (type === SemanticElementType.vline_Stem) { + y1 = point.extension.y1; + y2 = point.extension.y2; + } + elements.push({ + id: point.id, + type, + staff: staff.index, + x: point.x - left, + y1: y1 + y0, + y2: y2 + y0, + }); + } + }); + }); + return new SemanticCluster({ + index: measureIndex, + elements, + }); + } + getRawClusters(threshold = 1) { + //const times = this.getMeasuresTime(); + return Array(this.measureCount) + .fill(null) + .map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/)); + } + makeSpartito(logger = new DummyLogger()) { + let eventSystems = this.systems.map((system) => system.getEvents(this.maxStavesCount)); + /*if (this.topology) { + const clusters = this.topology.clusters; + + // [measure, staff, event] + const eventsColumns: ChordColumn[][][] = clusters + .filter((cluster) => cluster.index < this.measureCount) + .reduce((columns, cluster) => { + const { system, measures } = this.getMeasure(cluster.index); + const events = cluster.getEvents(); + + const systemY0 = system.staves[0].top + system.staves[0].staffY - 2; + const x0 = measures.filter(Boolean)[0].left; + + const staves = system.getStaffArray(this.maxStavesCount); + + // translate by staff & measure relative offset + events.forEach((event) => { + const staff = staves[event.staff]; + const y0 = staff.top + staff.staffY - systemY0; + event.ys = event.ys.map((y) => roundNumber(y - y0, 0.5)); + + event.left += x0; + event.right += x0; + }); + + const column = measures.map((measure, staffIndex) => { + if (!measure) return []; + + //console.log("m:", mi, "s:", staffIndex); + const localEvents = events.filter((event) => event.staff === staffIndex); + //measure.assignModifiersOnEvents(localEvents); + measure.assignAccessoriesOnEvents(localEvents); + + return localEvents; + }); + + columns[cluster.index] = column; + + return columns; + }, []); + + const breakSystemIndices = this.breakSystemIndices; + + const basicEventSystems = eventSystems; + eventSystems = []; + + let measures = 0; + for (const system of this.systems) { + const esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], { + useXMap: false, }); + + const basicSys = basicEventSystems[system.index]; + //onst nullN = esys.columns.filter(c => !c).length; + //if (nullN) + // console.log("null:", nullN, esys.columns.length); + esys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i])); + + const sysIndex = this.systems.indexOf(system); + const pageBreak = breakSystemIndices.includes(sysIndex); + const lastColumn = esys.columns[esys.columns.length - 1]; + if (lastColumn) { + lastColumn.break = true; + lastColumn.pageBreak = pageBreak; + } + + eventSystems.push(esys); + measures += system.measureCount; } + }*/ + const staves = this.eventSystemsToTermStaves(eventSystems, logger); + // assign staff basics for columns + eventSystems.forEach((sys, ri) => { + sys.columns.forEach((column, mi) => { + column.basics = staves.map((staff) => { + const { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi]; + return { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig }; + }); + }); }); + const clusters = null; //this.topology && this.topology.clusters; + const measures = [].concat(...eventSystems.map((esys) => esys.columns.map((column) => { + const measureIndex = column.measureIndex; + const { system, localIndex, left, right } = this.getMeasure(measureIndex); + const cluster = clusters ; + const staffYsFull = []; + system.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY)); + const patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex); + const events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull); + const barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length])); + const indent = localIndex === 0 && system.indent; + return new SpartitoMeasure({ + measureIndex, + staffMask: esys.staffMask, + position: { + systemIndex: system.index, + localIndex, + left, + right, + staffYs: system.staves.map((staff) => staff.top + staff.staffY), + staffYsFull, + }, + //startX: column.startX, + //width: column.width, + duration: patch ? patch.duration : column.duration, + events, + contexts: column.rows.map((row) => row.contexts), + marks: column.marks, + break: column.break, + pageBreak: column.pageBreak, + voltaBegin: column.voltaBegin, + voltaEnd: column.voltaEnd, + alternative: column.alternative, + barTypes, + indent, + basics: patch ? patch.basics : column.basics, + matrixH: cluster , + matrixV: cluster , + voices: patch ? patch.voices : null, + patched: !!patch, + }); + }))); + const staffLayout = this.staffLayout; + const staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id))); + this.spartito = new Spartito({ + stavesCount: this.maxStavesCount, + staffGroups, + measures, + }); + return this.spartito; } - blackoutFakeNotes(scope = 'patched') { - if (!this.spartito) - return; - let inScope = (_) => true; - switch (scope) { - case 'patched': - inScope = (measure) => measure.patched; - break; - case 'perfect': - inScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect); - break; - } - const measures = this.spartito.measures.filter(inScope); - const fakeIds = measures.reduce((ids, measure) => { - if (!measure.regulated) - return; - const voicedIds = measure.voices.flat(1); - const fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id)); - fakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds)); - return ids; - }, []); - const fakeIdSet = new Set(fakeIds); - this.systems.forEach((system) => system.staves.forEach((staff) => { - const blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id); - system.sidBlackList.push(...blackIds); - })); - return fakeIds; - } - getMeasureLayout() { - const code = this.spartito && this.spartito.measureLayoutCode; - if (code) { - try { - return parseCode$1(code); - } - catch (err) { - console.debug('invalid measure layout code:', err); + makeMusicSheet() { + const spartito = this.spartito || this.makeSpartito(); + if (!spartito.regulated) + console.warn('[makeMusicSheet] spartito not regulated.'); + const voiceStaves = spartito.makeVoiceStaves(); + const { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this; + const measureLayout = this.getMeasureLayout(); + return { + title, + pageSize, + unitSize, + measureLayout, + staffLayout, + paperOptions, + headers, + voiceStaves, + instrumentDict, + }; + } + findPoint(sid) { + for (const system of this.systems) { + for (let si = 0; si < system.staves.length; ++si) { + const point = system.staves[si].semantics.find((point) => point.id === sid); + if (point) { + const pageIndex = this.pages.findIndex((page) => page.systems.includes(system)); + return { + point, + pageIndex, + systemIndex: system.index, + staffIndex: si, + }; + } } } return null; } - *splitToSingleScoresGen() { - this.assemble(); - const startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index); - if (!startSysIndices.length) { - yield this.deepCopy(); - return; - } - const templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined }); - // clear temporary objects before deep dopy - this.pages.forEach((page) => { - delete page.tokens; - page.systems.forEach((system) => { - delete system.tokens; - system.staves.forEach((staff) => { - staff.measures = []; - }); - }); - }); - let startSysIndex = 0; - for (const endSysIndex of [...startSysIndices, this.systems.length]) { - const sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex; - const pages = this.pages - .filter((page) => page.systems.some(sysInRange)) - .map((page) => { - const { systems, ...fields } = page; - return new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) }); + getMeasureSemantics(systemIndex, localIndex) { + const system = this.systems[systemIndex]; + if (!system) + return null; + const left = localIndex ? system.measureBars[localIndex - 1] : 0; + const right = system.measureBars[localIndex] || system.width; + return system.staves + .map((staff, si) => { + const staffY = staff.top + staff.staffY; + return staff.semantics + .filter((point) => point.x >= left && point.x < right) + .map((point) => { + const [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y]; + return { + ...point, + staff: si, + sy1: y1 + staffY, + sy2: y2 + staffY, + }; }); - const newScore = templateScore.deepCopy(); - newScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`; - newScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`; - //newScore.pages = pages.map((page) => page.deepCopy()); - newScore.pages = pages; - newScore.assemble(); - newScore.inferenceStaffLayout(); - startSysIndex = endSysIndex; - yield newScore; - } - } - splitToSingleScores() { - return [...this.splitToSingleScoresGen()]; - } -} -Score.className = 'Score'; - -class EditableEvent extends EventTerm { - constructor(data) { - super(data); + }) + .flat(1); } - get agent() { - return new Proxy(this, { - get(target, key) { - const self = target; - switch (key) { - case 'id': - case 'tick': - case 'duration': - case 'rest': - case 'division': - case 'dots': - case 'stemDirection': - case 'beam': - case 'tremolo': - case 'tremoloLink': - case 'arpeggioStyle': { - const value = self[key]; - return value === undefined ? null : value; - } - case 'tying': - case 'tied': - case 'glissando': { - const value = self[key]; - return value === undefined ? false : value; - } - case 'grace': - return !!self.grace; - case 'timeWarp': - return self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null; - case 'multiplier': - return self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null; - case 'pitches': - return self.pitches; - } - return undefined; - }, - set: (target, key, value) => { - const self = target; - switch (key) { - case 'tick': - case 'duration': - case 'rest': - case 'division': - case 'dots': - case 'stemDirection': - case 'tying': - case 'tied': - case 'beam': - case 'tremolo': - case 'tremoloLink': - case 'glissando': - case 'arpeggioStyle': - self[key] = value; - return true; - case 'grace': - self.grace = value ? GraceType.Grace : null; - return true; - case 'timeWarp': - self.timeWarp = null; - if (value && typeof value === 'string') { - const captures = value.match(/^(\d+)\/(\d+)/); - if (captures) { - self.timeWarp = { - numerator: parseInt(captures[1]), - denominator: parseInt(captures[2]), - }; - } - } - return true; - case 'multiplier': - self.multiplier = null; - if (value && typeof value === 'string') { - const captures = value.match(/^(\d+)\/(\d+)/); - if (captures) { - self.multiplier = { - numerator: parseInt(captures[1]), - denominator: parseInt(captures[2]), - }; - } - } - return true; - case 'id': - case 'pitches': - return true; - } - return false; - }, - ownKeys: () => [ - 'id', - 'duration', - 'rest', - 'division', - 'dots', - 'stemDirection', - 'tying', - 'tied', - 'beam', - 'timeWarp', - 'multiplier', - 'tremolo', - 'tremoloLink', - 'glissando', - 'arpeggioStyle', - 'tick', - 'grace', - 'pitches', - ], - getOwnPropertyDescriptor() { - return { enumerable: true, configurable: true }; - }, + makeTimewiseGraph({ store = false } = {}) { + if (!this.spartito) + return null; + const measures = this.spartito.measures + .filter((measure) => measure.events.length > 0) + .map((measure) => { + const points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex); + const graph = { + measureIndex: measure.measureIndex, + left: measure.position.left, + right: measure.position.right, + points, + }; + if (store) + measure.graph = graph; + return graph; }); + return { measures }; } -} -class EditableMeasure extends SpartitoMeasure { - constructor(data) { - super(data); - this.events = null; - this.events = data.events; - if (this.events?.some((event) => !(event instanceof EditableEvent))) - this.events = this.events.map((event) => new EditableEvent(event)); - if (this.voices) - this.syncVoiceToEvents(); + getTokenMap() { + const map = new Map(); + this.systems.forEach((system) => system.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))); + return map; } - syncVoiceToEvents() { - this.events.forEach((event) => (event.voice = -1)); - this.voices.forEach((voice, voiceIndex) => { - voice.forEach((id) => { - const event = this.events.find((event) => event.id === id); - if (event) - event.voice = voiceIndex; - else - console.warn('no event with id:', id, this.events.length); - }); + assemble(confidenceThreshold = 1, logger = new DummyLogger()) { + const ids = new Map(); + const append = (systemIndex, staffIndex, point) => { + const id = hashSemanticPoint(systemIndex, staffIndex, point); + logger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id)); + ids.set(id, point); + }; + this.pages.forEach((page, index) => (page.index = index)); + let measureIndex = 0; + this.systems.forEach((system, systemIndex) => { + system.index = systemIndex; + system.headMeasureIndex = measureIndex; + system.prev = this.systems[systemIndex - 1] || null; + system.next = this.systems[systemIndex + 1] || null; + if (system.semantics && system.semantics.length) + system.semantics.forEach((point) => append(systemIndex, null, point)); + system.assemble(confidenceThreshold, logger); + measureIndex += system.measureCount; }); - } - syncVoiceFromEvents() { - const voices = []; - this.events.forEach((event) => { - if (event?.voice >= 0) { - voices[event.voice] = voices[event.voice] || []; - voices[event.voice].push(event); - } + this.pages.forEach((page, i) => { + page.systems.forEach((system) => (system.pageIndex = i)); + page.assemble({ textAnnotations: this.textAnnotations }, logger); }); - voices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick)); - this.voices = voices.map((voice) => voice.map((event) => event.id)); } - get agent() { - return new Proxy(this, { - get: (target, key) => { - const self = target; - switch (key) { - case 'measureIndex': - case 'duration': - return self[key]; - case 'voices': - return self.voices?.map((voice) => voice.join(',')) || null; - case 'timeSignature': - case 'keySignature': - case 'doubtfulTimesig': - return self.basics[0][key]; - //case 'events': - // return self.events.map(eventUIAgent); - case 'toJSON': - return () => ({ - measureIndex: self.measureIndex, - voices: self.voices, - duration: self.duration, - timeSignature: self.basics[0].timeSignature, - keySignature: self.basics[0].keySignature, - }); - } - return undefined; - }, - set: (target, key, value) => { - //console.log('set:', key, value); - const self = target; - switch (key) { - case 'timeSignature': - case 'keySignature': - case 'doubtfulTimesig': - self.basics[0][key] = value; - self.basics = self.basics.map(() => self.basics[0]); - return true; - case 'duration': - self.duration = value; - return true; - case 'measureIndex': - case 'voices': - return true; - } - return false; - }, - ownKeys: () => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'], - getOwnPropertyDescriptor() { - return { enumerable: true, configurable: true }; - }, - }); + assembleSystem(system, confidenceThreshold = 1) { + this.systems.forEach((system, si) => (system.index = si)); + const systemIndex = system.index; + if (system.semantics && system.semantics.length) { + system.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point)); + system.assemble(confidenceThreshold); + } } - makeMIDI(bpm = 120) { - if (!this.regulated) - return null; - const microsecondsPerBeat = 60e6 / bpm; - const header = { formatType: 0, ticksPerBeat: 480 }; - const tracks = this.voices.map((ids, vi) => { - const events = ids - .map((id) => { - const event = this.events.find((event) => event.id === id); - if (event) { - const subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : []; - return [...subEvents, event]; - } - return []; - }) - .flat(1); - const startTime = 0; - const midiEvents = events - .filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration)) - .map((event) => event.pitches.map((pitch) => [ - { - id: event.id, - time: event.tick, - type: 'channel', - subtype: 'noteOn', - channel: event.staff, - noteNumber: noteToPitch(pitch), - velocity: 96, - }, - { - id: event.id, - time: event.tick + event.duration, - type: 'channel', - subtype: 'noteOff', - channel: event.staff, - noteNumber: noteToPitch(pitch), - }, - ])) - .flat(2); - midiEvents.sort(function (e1, e2) { - return e1.time - e2.time; + markVoices(staves) { + const tokenMap = this.getTokenMap(); + for (const token of tokenMap.values()) + token.voice = 0; + const vis = [] + .concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v]))) + .sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2) + .map(([s, v]) => `${s}|${v}`); + staves.forEach((staff, si) => (staff.voices || []).forEach((voice, vi) => voice.measures.forEach((measure) => { + const voiceIndex = vis.indexOf(`${si}|${vi}`); + const events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm); + events.forEach((event) => { + const notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : []; + const accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : []; + //console.log("notes:", si, vi, mi, event.noteIds, notes, accessories); + [...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex)); + if (event.timeWarp) + notes.forEach((note) => (note.timeWarped = true)); }); - if (vi === 0) { - midiEvents.unshift({ - time: startTime, - type: 'meta', - subtype: 'timeSignature', - numerator: this.timeSignature.numerator, - denominator: this.timeSignature.denominator, - thirtyseconds: 8, - }, { time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }); + }))); + } + async replaceImageKeys(proc) { + await Promise.all([ + ...this.pages.map(async (page) => { + if (page.source) + page.source.url = await proc(page.source.url); + }), + ...this.systems.map((system) => Promise.all([ + proc(system.backgroundImage).then((key) => (system.backgroundImage = key)), + ...system.staves.map(async (staff) => { + staff.backgroundImage = await proc(staff.backgroundImage); + staff.maskImage = await proc(staff.maskImage); + }), + ])), + ]); + } + inferenceStaffLayout() { + // inference the complete layout + const staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0); + this.staffLayoutCode = Array(staffTotal).fill('').join(','); + const completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance); + if (!completeSystems.length) + return; // no enough evidence + const candidateCodes = completeSystems + .map((system) => { + try { + const layout = parseCode(system.bracketsAppearance); + if (layout.staffIds.length !== system.staves.length) + return null; + return system.bracketsAppearance; + } + catch (_) { + return null; + } + }) + .filter(Boolean); + if (!candidateCodes.length) + return; // no valid layout + const codeCounting = candidateCodes.reduce((acc, code) => { + const count = acc[code] || 0; + acc[code] = count + 1; + return acc; + }, {}); + const maxCount = Math.max(...Object.values(codeCounting)); + const code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0]; + // added connection lines between braces {-} + const connectedCode = code.replace(/\{,*\}/g, (match) => match.replace(/,/g, '-')); + const layout = parseCode(connectedCode); + this.staffLayoutCode = connectedCode; + //console.log("complete code:", code); + // inference systems' mask + let lastSys = null; + for (const system of this.systems) { + if (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) { + system.staffMaskChanged = null; + continue; + } + if (system.staves.length < staffTotal && system.bracketsAppearance) { + // validate the system brackets code + try { + if (!parseCode(system.bracketsAppearance)) + continue; + } + catch (_) { + continue; + } + const search = (bits) => { + if (bits.length > layout.staffIds.length) + return null; + if (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) + return bitsToMask(bits); + for (const bit of [1, 0]) { + const bb = [...bits, bit]; + const code1 = layout.partialMaskCode(bb); + if (code1 === system.bracketsAppearance) + return bitsToMask(bb); + else if (system.bracketsAppearance.startsWith(code1)) { + const result = search(bb); + if (result) + return result; + } + } + return null; + }; + const mask = search([]); + //console.log("mask:", system.bracketsAppearance, mask.toString(2)); + system.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null; } - midiEvents.forEach((event) => { - event.ticks = Math.round(event.time - startTime); + lastSys = system; + } + } + assignBackgroundForMeasure(measure) { + measure.backgroundImages = []; + const system = this.systems[measure.position.systemIndex]; + if (system.backgroundImage) { + measure.backgroundImages.push({ + url: system.backgroundImage, + position: system.imagePosition, + original: true, }); - midiEvents.forEach((event, i) => { - event.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0); + } + system.staves.forEach((staff) => { + if (!system.backgroundImage && staff.backgroundImage) + measure.backgroundImages.push({ + url: staff.backgroundImage.toString(), + position: { + ...staff.imagePosition, + y: staff.imagePosition.y + staff.top, + }, + original: true, + }); + if (staff.maskImage) { + measure.backgroundImages.push({ + url: staff.maskImage.toString(), + position: { + ...staff.imagePosition, + y: staff.imagePosition.y + staff.top, + }, + }); + } + }); + } + blackoutFakeNotes(scope = 'patched') { + if (!this.spartito) + return; + let inScope = (_) => true; + switch (scope) { + case 'patched': + inScope = (measure) => measure.patched; + break; + case 'perfect': + inScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect); + break; + } + const measures = this.spartito.measures.filter(inScope); + const fakeIds = measures.reduce((ids, measure) => { + if (!measure.regulated) + return; + const voicedIds = measure.voices.flat(1); + const fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id)); + fakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds)); + return ids; + }, []); + const fakeIdSet = new Set(fakeIds); + this.systems.forEach((system) => system.staves.forEach((staff) => { + const blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id); + system.sidBlackList.push(...blackIds); + })); + return fakeIds; + } + getMeasureLayout() { + const code = this.spartito && this.spartito.measureLayoutCode; + if (code) { + try { + return parseCode$1(code); + } + catch (err) { + console.debug('invalid measure layout code:', err); + } + } + return null; + } + *splitToSingleScoresGen() { + this.assemble(); + const startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index); + if (!startSysIndices.length) { + yield this.deepCopy(); + return; + } + const templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined }); + // clear temporary objects before deep dopy + this.pages.forEach((page) => { + delete page.tokens; + page.systems.forEach((system) => { + delete system.tokens; + system.staves.forEach((staff) => { + staff.measures = []; + }); }); - midiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' }); - return midiEvents; }); - return { - header, - tracks, - }; + let startSysIndex = 0; + for (const endSysIndex of [...startSysIndices, this.systems.length]) { + const sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex; + const pages = this.pages + .filter((page) => page.systems.some(sysInRange)) + .map((page) => { + const { systems, ...fields } = page; + return new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) }); + }); + const newScore = templateScore.deepCopy(); + newScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`; + newScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`; + //newScore.pages = pages.map((page) => page.deepCopy()); + newScore.pages = pages; + newScore.assemble(); + newScore.inferenceStaffLayout(); + startSysIndex = endSysIndex; + yield newScore; + } + } + splitToSingleScores() { + return [...this.splitToSingleScoresGen()]; } } -EditableMeasure.className = 'EditableMeasure'; -EditableMeasure.blackKeys = []; +Score.className = 'Score'; var BeadType; (function (BeadType) { @@ -15499,67 +15499,24 @@ var beadSolver = /*#__PURE__*/Object.freeze({ var index = /*#__PURE__*/Object.freeze({ __proto__: null, beadSolver: beadSolver, + recoverJSON: recoverJSON, + SimpleClass: SimpleClass, + EditableEvent: EditableEvent, + EditableMeasure: EditableMeasure, + get EventElementType () { return EventElementType; }, + EventCluster: EventCluster, + EventClusterSet: EventClusterSet, get PageLayoutMethod () { return PageLayoutMethod; }, get TextType () { return TextType; }, - TokenTypes: TokenTypes, - TokenClefs: TokenClefs, - TokenTimesigs: TokenTimesigs, - TokenTimesigsC: TokenTimesigsC, - TokenTimesigsN: TokenTimesigsN, - TokenOctshifts: TokenOctshifts, - TokenNumbers: TokenNumbers, - TokenAccidentals: TokenAccidentals, - TokenNoteheads: TokenNoteheads, - TokenBareNoteheads: TokenBareNoteheads, - TokenDirectionalNoteheads: TokenDirectionalNoteheads, - TokenRests: TokenRests, - TokenFlags: TokenFlags, - TokenVolta: TokenVolta, - TokenDynamics: TokenDynamics, - TokenScripts: TokenScripts, - TokenPedals: TokenPedals, - TokenDots: TokenDots, - TokenArcs: TokenArcs, - TokenBeams: TokenBeams, - TokenWedges: TokenWedges, - TokenAccessories: TokenAccessories, - TokenDirectionless: TokenDirectionless, - TokenGlyphs: TokenGlyphs, - get TokenType () { return TokenType; }, - Token: Token, - TextToken: TextToken, - TOKEN_Y_ROUND: TOKEN_Y_ROUND, - TOKEN_Y_FIXED: TOKEN_Y_FIXED, + evaluateMeasure: evaluateMeasure, + PatchMeasure: PatchMeasure, VERSION: VERSION, Score: Score, Page: Page, System: System, Staff: Staff, Measure: Measure, - emptyVoiceFromStaffMeasure: emptyVoiceFromStaffMeasure, - SpartitoMeasure: SpartitoMeasure, - Spartito: Spartito, - EditableEvent: EditableEvent, - EditableMeasure: EditableMeasure, - Term: Term, - EventTerm: EventTerm, - ContextedTerm: ContextedTerm, - MarkTerm: MarkTerm, - TempoTerm: TempoTerm, - GlyphTerm: GlyphTerm, - TextTerm: TextTerm, - LyricTerm: LyricTerm, - CommandTerm: CommandTerm, - ChordmodeTerm: ChordmodeTerm, - get ContextType () { return ContextType; }, - get GraceType () { return GraceType; }, - get GlissandoStyle () { return GlissandoStyle; }, - get ArpeggioStyle () { return ArpeggioStyle; }, - get AccessoryDirection () { return AccessoryDirection; }, - WHOLE_DURATION: WHOLE_DURATION, - get StemBeam () { return StemBeam; }, - get TremoloLink () { return TremoloLink; }, - mod7: mod7, + SemanticGraph: SemanticGraph, get SemanticType () { return SemanticType; }, glyphSemanticMapping: glyphSemanticMapping, semanticPriorities: semanticPriorities, @@ -15572,7 +15529,6 @@ var index = /*#__PURE__*/Object.freeze({ STAMP_RECTS: STAMP_RECTS, hashSemanticPoint: hashSemanticPoint, hashPageSemanticPoint: hashPageSemanticPoint, - SemanticGraph: SemanticGraph, get SemanticElementType () { return SemanticElementType; }, SemanticCluster: SemanticCluster, SemanticClusterSet: SemanticClusterSet, @@ -15584,13 +15540,57 @@ var index = /*#__PURE__*/Object.freeze({ expandMatrixByMasks: expandMatrixByMasks, expandMatrixByMaskTriu: expandMatrixByMaskTriu, matrixFromGroups: matrixFromGroups, - get EventElementType () { return EventElementType; }, - EventCluster: EventCluster, - EventClusterSet: EventClusterSet, - recoverJSON: recoverJSON, - SimpleClass: SimpleClass, - PatchMeasure: PatchMeasure, - evaluateMeasure: evaluateMeasure + emptyVoiceFromStaffMeasure: emptyVoiceFromStaffMeasure, + SpartitoMeasure: SpartitoMeasure, + Spartito: Spartito, + mod7: mod7, + Term: Term, + EventTerm: EventTerm, + ContextedTerm: ContextedTerm, + MarkTerm: MarkTerm, + TempoTerm: TempoTerm, + GlyphTerm: GlyphTerm, + TextTerm: TextTerm, + LyricTerm: LyricTerm, + CommandTerm: CommandTerm, + ChordmodeTerm: ChordmodeTerm, + get ContextType () { return ContextType; }, + get GraceType () { return GraceType; }, + get GlissandoStyle () { return GlissandoStyle; }, + get ArpeggioStyle () { return ArpeggioStyle; }, + get AccessoryDirection () { return AccessoryDirection; }, + WHOLE_DURATION: WHOLE_DURATION, + get StemBeam () { return StemBeam; }, + get TremoloLink () { return TremoloLink; }, + TokenTypes: TokenTypes, + TokenClefs: TokenClefs, + TokenTimesigs: TokenTimesigs, + TokenTimesigsC: TokenTimesigsC, + TokenTimesigsN: TokenTimesigsN, + TokenOctshifts: TokenOctshifts, + TokenNumbers: TokenNumbers, + TokenAccidentals: TokenAccidentals, + TokenNoteheads: TokenNoteheads, + TokenBareNoteheads: TokenBareNoteheads, + TokenDirectionalNoteheads: TokenDirectionalNoteheads, + TokenRests: TokenRests, + TokenFlags: TokenFlags, + TokenVolta: TokenVolta, + TokenDynamics: TokenDynamics, + TokenScripts: TokenScripts, + TokenPedals: TokenPedals, + TokenDots: TokenDots, + TokenArcs: TokenArcs, + TokenBeams: TokenBeams, + TokenWedges: TokenWedges, + TokenAccessories: TokenAccessories, + TokenDirectionless: TokenDirectionless, + TokenGlyphs: TokenGlyphs, + get TokenType () { return TokenType; }, + Token: Token, + TextToken: TextToken, + TOKEN_Y_ROUND: TOKEN_Y_ROUND, + TOKEN_Y_FIXED: TOKEN_Y_FIXED }); // Here suppose sum of pvals equal to 1. @@ -16259,7 +16259,7 @@ const saveEditableMeasures = async (score, measureIndices, saveMeasure, { status }); }; -console.info(`%cstarry-omr%c v1.0.0 2026-04-23T11:21:15.791Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;'); +console.info(`%cstarry-omr%c v1.0.0 2026-04-30T10:34:16.090Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;'); exports.PyClients = PyClients; exports.abstractRegulationBeadStats = abstractRegulationBeadStats; diff --git a/backend/omr/dist/regulator.js.map b/backend/omr/dist/regulator.js.map index 9b88ec18bcd05e7ea48c3f9fc2fa2b0536306baf..89f75dec8947a0e9403c42132edb866d2883d530 100644 --- a/backend/omr/dist/regulator.js.map +++ b/backend/omr/dist/regulator.js.map @@ -1 +1 @@ -{"version":3,"file":"regulator.js","sources":["../../libs/browserComponents.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../src/starry/interfaces.ts","../../../src/starry/semanticPoint.ts","../../../src/starry/token.ts","../../../src/starry/aux_/typedJSON.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/measureLayout/parser.ts","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/logger.ts","../../../src/starry/utils.ts","../../../src/starry/term.ts","../../../src/starry/measureEvaluator.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/patch.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/beadSolver.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../../libs/util.ts","../src/regulator.ts"],"sourcesContent":["globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-23T11:21:15.791Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../libs/predictors';\nexport * from '../../libs/regulation';\nexport * from '../../libs/util';\nexport * as starry from '../../../src/starry';\n"],"names":["eventsModule","events","EventEmitter","Request","pack","unpack","getPortPromise","defaultsDeep","PythonShell","inherits_browserModule","inheritsModule","require$$0","require$$1","util","getPort","sha1","pick","parser","parse","parseCode","grammar","GROUP_N_TO_PITCH","MIDDLE_C","mod7","argmax","Token.TokenClefs","Token.TokenOctshifts","Token.TokenTimesigsC","Token.TokenTimesigsN","MIDI","MidiSequence","Notation","MusicNotation","MidiPlayer","Config","Node","Navigator","Matcher","MidiUtils","require$$2","require$$3","require$$4","undefined","require","EquationSolver.Solver","erf","staffLayout.parseCode","measureLayout.parseCode","WeakLRUCache","starry.beadSolver.solveMeasure","starry.evaluateMeasure","starry.beadSolver.estimateMeasure","starry.EditableMeasure","starry.Staff","starry.System","got","sharp","SparkMD5"],"mappings":"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AAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACxG,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACf,YAAA,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7F,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACb,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE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"} \ No newline at end of file +{"version":3,"file":"regulator.js","sources":["../../libs/browserComponents.ts","../../../node_modules/events/events.js","../../libs/async-queue.ts","../../libs/ZeroClient.ts","../../libs/PyProcessor.ts","../../../node_modules/util/support/isBuffer.js","../../../node_modules/util/node_modules/inherits/inherits_browser.js","../../../node_modules/util/node_modules/inherits/inherits.js","../../../node_modules/util/util.js","../../libs/predictors.ts","../../../src/starry/aux_/typedJSON.ts","../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/eventTopology.ts","../../../src/starry/patch.ts","../../../src/starry/token.ts","../../../src/starry/term.ts","../../../src/starry/spartitoMeasure.ts","../../../src/starry/editableMeasure.ts","../../../src/starry/interfaces.ts","../../../src/starry/measureEvaluator.ts","../../../src/measureLayout/measureLayout.ts","../../../src/measureLayout/grammar.jison.js","../../../src/measureLayout/parser.ts","../../../src/staffLayout/staffLayout.ts","../../../src/staffLayout/grammar.jison.js","../../../src/staffLayout/parser.ts","../../../src/starry/semanticGraph.ts","../../../src/starry/scoreComponents.ts","../../../src/starry/semanticTopology.ts","../../../src/performer/types.ts","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/stream.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifile.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/streamEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/midifileEx.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MIDI/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiSequence.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MusicNotation.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiPlayer.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/config.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/node.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/navigator.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/Matcher/index.js","../../../node_modules/@k-l-lambda/music-widgets/source/inc/MidiUtils.js","../../../node_modules/@k-l-lambda/music-widgets/index.js","../../../src/performer/notation.ts","../../../node_modules/crypto-js/core.js","../../../node_modules/crypto-js/sha256.js","../../../src/starry/hashVector.ts","../../../src/starry/spartito.ts","../../../src/starry/staffContext.ts","../../../src/starry/score.ts","../../../src/starry/beadSolver.ts","../../../src/starry/measureRectification.ts","../../libs/store.ts","../../libs/regulationBead.ts","../../libs/regulation.ts","../../libs/util.ts","../src/regulator.ts"],"sourcesContent":["globalThis.btoa = (str) => Buffer.from(str, 'binary').toString('base64');\nglobalThis.atob = (str) => Buffer.from(str, 'base64').toString('binary');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import { EventEmitter } from 'events';\n\ninterface DSPromiseOption {\n\ttimeout?: number;\n}\n\nexport function destructPromise(\n\toptions: DSPromiseOption = {}\n): [promise: Promise, resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void] {\n\tconst { timeout } = options;\n\tlet rs: (value: T | PromiseLike) => void;\n\tlet rj: (reason: any) => void;\n\n\treturn [\n\t\tnew Promise((resolve, reject) => {\n\t\t\trs = resolve;\n\t\t\trj = reject;\n\n\t\t\tif (timeout >= 0) setTimeout(rj, timeout, 'timeout');\n\t\t}),\n\t\trs,\n\t\trj,\n\t];\n}\n\ntype AsyncTask = [fn: (data: any) => Promise, payload: any, resolve: (data: any) => void, reject: (reason: any) => void];\n\nexport class AsyncQueue extends EventEmitter {\n\tprivate working = false;\n\n\ttasks: AsyncTask[];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.working = false;\n\t\tthis.tasks = [];\n\t\tprocess.nextTick(() => {\n\t\t\tthis.emit('idle');\n\t\t});\n\t}\n\n\tprivate async _digest(item: AsyncTask) {\n\t\tthis.working = true;\n\n\t\tconst [taskFn, payload, resolve, reject] = item;\n\t\tawait taskFn(payload).then(resolve, reject);\n\n\t\tif (this.tasks.length > 0) {\n\t\t\tawait this._digest(this.tasks.shift());\n\t\t} else {\n\t\t\tthis.working = false;\n\t\t\tthis.emit('idle');\n\t\t}\n\t}\n\n\t/**\n\t * 添加队列任务\n\t * @param task\n\t * @param options\n\t */\n\taddTask(task: [AsyncTask[0], AsyncTask[1]], { timeout = 600000 }: { timeout?: number } = {}): Promise {\n\t\tconst [promise, resolve, reject] = destructPromise({ timeout });\n\n\t\tif (this.working) {\n\t\t\tthis.tasks.push([...task, resolve, reject]);\n\t\t} else {\n\t\t\tthis._digest([...task, resolve, reject]);\n\t\t}\n\n\t\treturn promise;\n\t}\n}\n","import { pack, unpack } from 'msgpackr';\nimport { Request } from 'zeromq';\nimport { AsyncQueue } from './async-queue';\n\ninterface Response {\n\tcode: number;\n\tmsg: string;\n\tdata?: any;\n}\n\nexport interface Logger {\n\tinfo: (...data: any[]) => void;\n\terror: (...data: any[]) => void;\n}\n\ntype PyArgs = any[];\ntype PyKwargs = Record;\n\nexport default class ZeroClient {\n\tlogger: Logger;\n\tprivate socket: Request;\n\tprivate queue: AsyncQueue = new AsyncQueue();\n\n\tprivate url: string;\n\n\tconstructor(logger: Logger = console) {\n\t\tthis.logger = logger;\n\t}\n\n\tbind(url?: string) {\n\t\turl && (this.url = url);\n\t\tthis.socket = new Request({\n\t\t\tsendTimeout: 15e3,\n\t\t\treceiveTimeout: 300e3,\n\t\t});\n\n\t\tthis.socket.connect(this.url);\n\t}\n\n\tprivate __request(payload) {\n\t\tlet retryTimes = 0;\n\n\t\tconst req = async (data) => {\n\t\t\ttry {\n\t\t\t\tif (this.socket.closed) this.bind();\n\t\t\t\treturn await this.socket.send(pack(data)).then(() => this.socket.receive());\n\t\t\t} catch (err) {\n\t\t\t\tif (retryTimes < 2) {\n\t\t\t\t\tretryTimes++;\n\t\t\t\t\tconsole.log(`请求失败,${err.stack}`);\n\t\t\t\t\tconsole.error(`3s后重试第${retryTimes}次`);\n\t\t\t\t\tthis.socket.close();\n\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 3000));\n\t\t\t\t\treturn req(data);\n\t\t\t\t} else {\n\t\t\t\t\tthrow err;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\treturn req(payload);\n\t}\n\n\tasync request(method: string, args: PyArgs | PyKwargs = null, kwargs: PyKwargs = null): Promise {\n\t\tconst [args_, kwargs_] = Array.isArray(args) ? [args, kwargs] : [undefined, args];\n\t\tconst msg: any = { method };\n\t\tif (args_) msg.args = args_;\n\t\tif (kwargs_) msg.kwargs = kwargs_;\n\n\t\treturn this.queue.addTask([\n\t\t\tasync (opt) => {\n\t\t\t\tconst [result] = await this.__request(opt);\n\n\t\t\t\tconst obj = unpack(result) as Response;\n\n\t\t\t\tif (obj.code === 0) {\n\t\t\t\t\treturn obj.data;\n\t\t\t\t} else {\n\t\t\t\t\treturn Promise.reject(obj.msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tmsg,\n\t\t]);\n\t}\n}\n","import { getPortPromise } from 'portfinder';\nimport { Options, PythonShell } from 'python-shell';\nimport { defaultsDeep } from 'lodash';\nimport ZeroClient, { Logger } from './ZeroClient';\n\nexport default class PyProcessor extends ZeroClient {\n\tprivate readonly scriptPath: string;\n\tprivate readonly options: Options;\n\tprivate pyShell: PythonShell;\n\n\tprivate retryCount: number = 0;\n\tprivate retryDelay: number = 3000;\n\n\tconstructor(scriptPath: string, options: Options = {}, logger: Logger = console) {\n\t\tsuper(logger);\n\t\tthis.scriptPath = scriptPath;\n\t\tthis.options = options;\n\t}\n\n\tasync bind(port?: string | number) {\n\t\tconst freePort =\n\t\t\tport ||\n\t\t\t(await getPortPromise({\n\t\t\t\tport: 12022,\n\t\t\t\tstopPort: 12122,\n\t\t\t}));\n\n\t\t// \"./streamPredictor.py\", \"--inspect\"\n\t\tconst options = defaultsDeep(\n\t\t\t{\n\t\t\t\targs: [...(this.options.args || []), '-p', `${freePort}`],\n\t\t\t},\n\t\t\tthis.options\n\t\t);\n\n\t\tthis.logger.info(`[python-shell]: starting python shell. path: ${this.scriptPath}`);\n\n\t\tthis.pyShell = new PythonShell(this.scriptPath, options);\n\n\t\tthis.pyShell.stdout.on('data', (data) => this.logger.info(data));\n\n\t\tthis.pyShell.on('pythonError', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} pythonError:`, err));\n\t\tthis.pyShell.on('stderr', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} stderr:`, err));\n\t\tthis.pyShell.on('error', (err) => this.logger.error(`[python-shell]: ${this.scriptPath} error:`, err));\n\t\tthis.pyShell.on('close', () => {\n\t\t\t// python子进程关闭事件\n\t\t\tif (this.retryCount < 5) {\n\t\t\t\tthis.retryCount++;\n\t\t\t\tthis.logger.info(`[python-shell]: ${this.scriptPath} will retry ${this.retryCount}th time after 3 seconds`);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.bind();\n\t\t\t\t}, this.retryDelay);\n\t\t\t}\n\t\t});\n\n\t\tsuper.bind(`tcp://127.0.0.1:${freePort}`);\n\t}\n}\n","module.exports = function isBuffer(arg) {\n return arg instanceof Buffer;\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","try {\n var util = require('util');\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n module.exports = require('./inherits_browser.js');\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","import ZeroClient, { Logger } from './ZeroClient';\nimport * as starry from '../../src/starry';\nimport PyProcessor from './PyProcessor';\nimport { destructPromise } from './async-queue';\nimport { getPort } from 'portfinder';\nimport util from 'util';\nimport { Options } from 'python-shell';\n\nconst getPortPromise = util.promisify(getPort);\n\nexport interface LayoutResult {\n\tdetection: starry.PageLayout;\n\ttheta: number;\n\tinterval: number;\n\tsourceSize?: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n}\n\nexport interface PredictorInterface {\n\tlayout: (streams: Buffer[]) => LayoutResult[];\n\tlayout$reinforce: (streams: Buffer[], baseLayouts: LayoutResult[]) => LayoutResult[];\n\tgauge: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tmask: (streams: Buffer[]) => {\n\t\timage: Buffer;\n\t}[];\n\tsemantic: (streams: Buffer[]) => any[];\n\ttextLoc: (streams: Buffer[]) => any[];\n\ttextOcr: (params: { buffers: Buffer[]; location: any[] }) => any[];\n\tbrackets: (params: { buffers: Buffer[] }) => any[];\n\ttopo: (params: { clusters: starry.EventCluster[] }) => any[];\n\tgaugeRenderer: (params: [Buffer, Buffer, number]) => { buffer: Buffer; size: { width: number; height: number } };\n\tjianpu: (params: { buffers: Buffer[] }) => any[];\n\t// [source: Buffer, gauge: Buffer, baseY: number]\n}\n\ntype PredictorType = keyof PredictorInterface;\n\nexport type PyClientsConstructOptions = Partial>;\n\nexport class PyClients {\n\tclients = new Map>();\n\n\tconstructor(public readonly options: PyClientsConstructOptions, public readonly logger: Logger = console) {}\n\n\tasync getClient(type: PredictorType) {\n\t\tif (this.clients.has(type)) {\n\t\t\treturn this.clients.get(type);\n\t\t}\n\n\t\tconst [promise, resolve, reject] = destructPromise();\n\n\t\tconst opt = this.options[type];\n\n\t\tif (!opt) {\n\t\t\tthrow new Error(`no config for client \\`${type}\\` found`);\n\t\t}\n\n\t\ttry {\n\t\t\tif (typeof opt === 'string') {\n\t\t\t\tconst client = new ZeroClient();\n\t\t\t\tclient.bind(opt);\n\t\t\t\tresolve(client);\n\t\t\t} else {\n\t\t\t\tconst { scriptPath, ...option } = opt;\n\t\t\t\tconst client = new PyProcessor(scriptPath, option, this.logger);\n\t\t\t\tawait client.bind(`${await getPortPromise()}`);\n\t\t\t\tresolve(client);\n\t\t\t}\n\n\t\t\tthis.logger.info(`PyClients: ${type} started`);\n\t\t} catch (err) {\n\t\t\tthis.logger.error(`PyClients: ${type} start fail: ${JSON.stringify(err)}`);\n\t\t\treject(err);\n\t\t}\n\n\t\tthis.clients.set(type, promise);\n\n\t\treturn promise;\n\t}\n\n\tasync checkHost(type: PredictorType): Promise {\n\t\tconst client = await this.getClient(type);\n\n\t\treturn client.request('checkHost');\n\t}\n\n\tasync warmup() {\n\t\tconst opts = Object.keys(this.options) as PredictorType[];\n\t\tawait Promise.all(opts.map((type) => this.getClient(type)));\n\t}\n\n\t/**\n\t * 模型预测\n\t * @param type layout | mask | gauge | semantic\n\t * @param args\n\t */\n\tasync predictScoreImages(type: T, ...args: Parameters): Promise> {\n\t\tconst clientType = type.split('$')[0] as PredictorType;\n\t\tconst client = await this.getClient(clientType);\n\t\tlet res = null;\n\n\t\tthis.logger.info(`[predictor]: ${type} py start..`);\n\t\tconst start = Date.now();\n\n\t\tswitch (type) {\n\t\t\tcase 'layout':\n\t\t\t\tres = await client.request('predictDetection', args);\n\t\t\t\tbreak;\n\t\t\tcase 'layout$reinforce':\n\t\t\t\tres = await client.request('predictReinforce', args);\n\t\t\t\tbreak;\n\t\t\tcase 'gauge':\n\t\t\tcase 'mask':\n\t\t\t\tres = await client.request('predict', args, { by_buffer: true });\n\t\t\t\tbreak;\n\t\t\tcase 'semantic':\n\t\t\tcase 'textLoc':\n\t\t\t\tres = await client.request('predict', args);\n\t\t\t\tbreak;\n\t\t\tcase 'textOcr':\n\t\t\tcase 'brackets':\n\t\t\tcase 'topo':\n\t\t\tcase 'gaugeRenderer':\n\t\t\tcase 'jianpu':\n\t\t\t\tres = await client.request('predict', ...args);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.logger.error(`[predictor]: no predictor ${type}`);\n\t\t}\n\n\t\tthis.logger.info(`[predictor]: ${type} py duration: ${Date.now() - start}ms`);\n\n\t\treturn res;\n\t}\n}\n","import pick from 'lodash/pick';\n\nconst recoverJSON = (json: string | object, classDict): T => {\n\tif (typeof json === 'object') json = JSON.stringify(json);\n\n\treturn JSON.parse(json, (_, value) => {\n\t\tif (value && typeof value === 'object' && value.__prototype) {\n\t\t\tconst Class = classDict[value.__prototype];\n\t\t\tif (Class) {\n\t\t\t\tconst { __prototype, ...fields } = value;\n\t\t\t\treturn new Class(fields);\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t});\n};\n\nconst deepCopy = (o: any, dict: Map = null): any => {\n\tdict = dict || new Map();\n\tif (dict.get(o)) return dict.get(o);\n\n\tif (Array.isArray(o)) {\n\t\tconst result = [];\n\t\tdict.set(o, result);\n\n\t\to.forEach((e) => result.push(deepCopy(e, dict)));\n\n\t\treturn result;\n\t} else if (o && typeof o === 'object') {\n\t\tconst result = {};\n\t\tdict.set(o, result);\n\n\t\tObject.entries(o).forEach(([key, value]) => (result[key] = deepCopy(value, dict)));\n\t\tObject.setPrototypeOf(result, o.__proto__);\n\n\t\treturn result;\n\t}\n\n\treturn o;\n};\n\nclass SimpleClass {\n\tassign(data?: object) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\ttoJSON() {\n\t\tconst cls = this.constructor as any;\n\n\t\tconst serializedKeys = cls.serializedKeys || (cls.blackKeys && Object.keys(this).filter((key) => !cls.blackKeys.includes(key)));\n\t\tconst fields = serializedKeys ? pick(this, serializedKeys) : this;\n\n\t\treturn {\n\t\t\t__prototype: cls.className,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tdeepCopy(): this {\n\t\treturn deepCopy(this);\n\t}\n}\n\nexport { recoverJSON, SimpleClass };\n","var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import { EventFeature, BackgroundImage, EventPredisposition } from './interfaces';\nimport { StemBeam } from './term';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum EventElementType {\n\tPAD,\n\tBOS,\n\tEOS,\n\n\tCHORD,\n\tREST,\n}\n\ninterface EventElement {\n\thref?: string;\n\tdisposed?: boolean;\n\tindex?: number;\n\tvoice?: number;\n\n\ttype: EventElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\tfeature: EventFeature;\n\tpivotX?: number;\n\theadY?: number;\n\n\t// targets\n\ttick?: number;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: StemBeam;\n\tstemDirection?: string;\n\tgrace?: boolean;\n\ttremoloCatcher?: boolean;\n\ttimeWarped?: boolean;\n\tfullMeasure?: boolean; // full measure rest\n\tfake?: boolean;\n\n\torder?: number;\n\n\tpredisposition?: EventPredisposition;\n}\n\ntype Matrix = number[][];\n\ninterface Annotation {\n\tloss: number;\n\tgrant: boolean;\n\tpatched: boolean; // from manually solved measure\n}\n\nclass EventCluster extends SimpleClass {\n\tstatic className = 'EventCluster';\n\tstatic blackKeys = ['id'];\n\n\tid?: string; // for db access\n\tindex?: number;\n\tduration?: number;\n\tstaffY0?: number; // the first staff top + staffY\n\n\tsignatureDuration: number;\n\telements: EventElement[];\n\tmatrixH?: Matrix; // matrix N x N, [next][prev]\n\n\tbackgroundImages?: BackgroundImage[];\n\n\tannotation?: Annotation;\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget regular(): boolean {\n\t\treturn (\n\t\t\tthis.elements.some((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !elem.fake) &&\n\t\t\tthis.elements.every((elem) => [elem.x, elem.y1, elem.y2, elem.tick].every(Number.isFinite)) &&\n\t\t\tthis.elements\n\t\t\t\t.slice(1)\n\t\t\t\t.every(\n\t\t\t\t\t(elem, ei) =>\n\t\t\t\t\t\telem.fake ||\n\t\t\t\t\t\tthis.elements[ei].fake ||\n\t\t\t\t\t\telem.grace ||\n\t\t\t\t\t\tthis.elements[ei].grace ||\n\t\t\t\t\t\telem.fullMeasure ||\n\t\t\t\t\t\tthis.elements[ei].fullMeasure ||\n\t\t\t\t\t\telem.tick <= this.elements[ei].tick ||\n\t\t\t\t\t\telem.x > this.elements[ei].x\n\t\t\t\t)\n\t\t);\n\t}\n\n\tget grant(): boolean {\n\t\treturn this.annotation && this.annotation.grant;\n\t}\n\n\tget feature(): Partial {\n\t\treturn {\n\t\t\tindex: this.index,\n\t\t\telements: this.elements,\n\t\t};\n\t}\n\n\tget estimatedDuration(): number {\n\t\tconst endElem = this.elements.find((elem) => elem.type === EventElementType.EOS);\n\n\t\tconst tick = endElem?.predisposition ? endElem.predisposition?.tick : endElem?.tick;\n\n\t\treturn Number.isFinite(tick) ? tick : this.duration;\n\t}\n\n\tassignPrediction(prediction: any): void {\n\t\tconsole.assert(prediction.index === this.index, 'index mismatch:', prediction.index, this.index);\n\n\t\tthis.matrixH = prediction.matrixH;\n\t\tprediction.elements.forEach((pe) => {\n\t\t\tconst { index, ...predisposition } = pe;\n\t\t\tconst elem = this.elements.find((elem) => elem.index === index);\n\t\t\tconsole.assert(elem, 'element not found:', index);\n\n\t\t\tif (elem) elem.predisposition = predisposition;\n\t\t});\n\t}\n}\n\nclass EventClusterSet extends SimpleClass {\n\tstatic className = 'EventClusterSet';\n\n\tname?: string;\n\n\tclusters: EventCluster[];\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\ttrimIrregular(): number {\n\t\tlet ir = 0;\n\n\t\tthis.clusters = this.clusters.filter((cluster) => {\n\t\t\tconst regular = cluster.regular;\n\t\t\tif (!regular) {\n\t\t\t\tconsole.debug('irregular cluster:', cluster);\n\t\t\t\t++ir;\n\t\t\t}\n\n\t\t\treturn regular;\n\t\t});\n\n\t\tif (ir) console.debug('Irregular clusters trimmed:', `${ir}/${this.clusters.length + ir}`);\n\t\telse console.debug(`The EventClusterSet (${this.clusters.length}) is fine.`);\n\n\t\treturn ir;\n\t}\n}\n\nexport { EventElementType, EventElement, EventCluster, EventClusterSet };\n","import { SimpleClass } from './aux_/typedJSON';\nimport { StaffBasic } from './interfaces';\nimport { ContextedTerm, EventTerm, MarkTerm } from './term';\n\nclass PatchMeasure extends SimpleClass {\n\tstatic className = 'PatchMeasure';\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tbasic: StaffBasic;\n\n\t//points: SemanticPoint[];\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tvoices: number[][]; // [voice, id]\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tObject.assign(this, data);\n\t}\n\n\tget staffN(): number {\n\t\treturn Math.floor(Math.log2(this.staffMask)) + 1;\n\t}\n\n\tget basics(): StaffBasic[] {\n\t\treturn Array(this.staffN).fill(this.basic);\n\t}\n\n\tget duration(): number {\n\t\treturn Math.max(\n\t\t\t0,\n\t\t\t...(this.voices || []).map((ids) => {\n\t\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\n\t\t\t\treturn events.reduce((duration, event) => duration + event.duration, 0);\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport { PatchMeasure };\n","import { TextType } from './interfaces';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\n\nenum TokenType {\n\t// clefs\n\tClefG = 'clefs-G', // clefs.G_change\n\tClefF = 'clefs-F', // clefs.F_change\n\tClefC = 'clefs-C', // clefs.C_change\n\n\t// time signature\n\tTimesigC44 = 'timesig-C44',\n\tTimesigC22 = 'timesig-C22',\n\tTimesigZero = 'zero|timesig0',\n\tTimesigOne = 'one|timesig1',\n\tTimesigTwo = 'two|timesig2',\n\tTimesigThree = 'three|timesig3',\n\tTimesigFour = 'four|timesig4',\n\tTimesigFive = 'five|timesig5',\n\tTimesigSix = 'six|timesig6',\n\tTimesigSeven = 'seven|timesig7',\n\tTimesigEight = 'eight|timesig8',\n\tTimesigNine = 'nine|timesig9',\n\n\t// octave shifts\n\tOctaveShift8va = 'octave-a',\n\tOctaveShift8vb = 'octave-b',\n\tOctaveShift0 = 'octave-0',\n\n\t// numbers\n\tZero = 'zero|n0',\n\tOne = 'one|n1',\n\tTwo = 'two|n2',\n\tThree = 'three|n3',\n\tFour = 'four|n4',\n\tFive = 'five|n5',\n\tSix = 'six|n6',\n\tSeven = 'seven|n7',\n\tEight = 'eight|n8',\n\tNine = 'nine|n9',\n\n\t// accidentals\n\tAccNatural = 'accidentals-natural',\n\tAccSharp = 'accidentals-sharp',\n\tAccDoublesharp = 'accidentals-doublesharp',\n\tAccFlat = 'accidentals-flat',\n\tAccFlatflat = 'accidentals-flatflat',\n\tKeyNatural = 'accidentals-natural|key-natural',\n\tKeySharp = 'accidentals-sharp|key-sharp',\n\tKeyFlat = 'accidentals-flat|key-flat',\n\n\t// noteheads\n\tNoteheadS0 = 'noteheads-s0',\n\tNoteheadS1 = 'noteheads-s1',\n\tNoteheadS2 = 'noteheads-s2',\n\tNoteheadS1stemU = 'noteheads-s1|noteheads-s1-u',\n\tNoteheadS1stemD = 'noteheads-s1|noteheads-s1-d',\n\tNoteheadS2stemU = 'noteheads-s2|noteheads-s2-u',\n\tNoteheadS2stemD = 'noteheads-s2|noteheads-s2-d',\n\n\t// rests\n\tRest0 = 'rests-0o',\n\tRest1 = 'rests-1o',\n\tRest2 = 'rests-2',\n\tRest3 = 'rests-3',\n\tRest4 = 'rests-4',\n\tRest5 = 'rests-5',\n\tRest6 = 'rests-6',\n\tRest0W = 'rests-0',\n\tRestM1 = 'rests-M1',\n\n\t// flags\n\tFlag3 = 'flags-u3', // flags.d3\n\tFlag4 = 'flags-u4', // flags.d4\n\tFlag5 = 'flags-u5', // flags.d5\n\tFlag6 = 'flags-u6', // flags.d6\n\tFlag7 = 'flags-u7', // flags.d7\n\tFlag8 = 'flags-u8', // flags.d8\n\n\t// beams\n\tBeamLeft = '|beam-left',\n\tBeamRight = '|beam-right',\n\tBeamContinue = '|beam-continue',\n\n\t// tremolos\n\tTremoloLeft = '|tremolo-left',\n\tTremoloRight = '|tremolo-right',\n\tTremoloMiddle = '|tremolo-middle',\n\n\t// slur & tie\n\tSlurBegin = '|slur-begin',\n\tSlurEnd = '|slur-end',\n\tTieBegin = '|tie-begin',\n\tTieEnd = '|tie-end',\n\n\t// volta\n\tVoltaLeft = '|volta-left',\n\tVoltaRight = '|volta-right',\n\n\tVoltaAlternativeBegin = '|volta-alter-begin',\n\t//VoltaAlternativeEnd = \"|volta-alter-end\",\n\n\t// vertical bars\n\t//BarMeasure = \"|bar-measure\",\n\tBarTerminal = '|bar-terminal',\n\tBarSegment = '|bar-segment',\n\n\t// dots (duration)\n\tDot = '|dot',\n\tDotDot = '|dotdot',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\t//\n\tWedgeCrescendo = '|wedge-crescendo',\n\tWedgeDiminuendo = '|wedge-diminuendo',\n\tWedgeClose = '|wedge-close',\n\n\tCrescendoBegin = '|wedge-crescendo',\n\tDecrescendoBegin = '|wedge-diminuendo',\n\tCrescendoEnd = '|wedge-close',\n\tDecrescendoEnd = '|wedge-close',\n\n\t// scripts\n\tScriptFermata = 'scripts-ufermata', // scripts.dfermata\n\tScriptShortFermata = 'scripts-ushortfermata', // scripts.dshortfermata\n\tScriptSforzato = 'scripts-sforzato',\n\tScriptStaccato = 'scripts-staccato',\n\tScriptStaccatissimo = 'scripts-ustaccatissimo', // scripts.dstaccatissimo\n\tScriptTurn = 'scripts-turn',\n\tScriptTrill = 'scripts-trill',\n\tScriptSegno = 'scripts-segno',\n\tScriptCoda = 'scripts-coda',\n\tScriptArpeggio = 'scripts-arpeggio',\n\tScriptPrall = 'scripts-prall',\n\tScriptMordent = 'scripts-mordent',\n\tScriptMarcato = 'scripts-umarcato', // scripts.dmarcato\n\tScriptTenuto = 'scripts-tenuto',\n\tScriptPortato = 'scripts-uportato', // scripts.dportato\n\n\t// pedal\n\tPedalStar = 'pedal-star',\n\tPedalPed = 'pedal-Ped',\n\n\tText = '|text',\n\tGraceNotehead = '|grace-notehead',\n}\n\n// alias\nconst tt = TokenType;\n\nexport const TokenTypes = Object.values(TokenType);\nexport const TokenClefs = TokenTypes.filter((t) => /clefs-/.test(t));\nexport const TokenTimesigs = TokenTypes.filter((t) => /timesig/.test(t));\nexport const TokenTimesigsC = TokenTypes.filter((t) => /timesig-/.test(t));\nexport const TokenTimesigsN = TokenTypes.filter((t) => /timesig\\d/.test(t));\nexport const TokenOctshifts = TokenTypes.filter((t) => /octave-/.test(t));\nexport const TokenNumbers = TokenTypes.filter((t) => /n\\d/.test(t));\nexport const TokenAccidentals = TokenTypes.filter((t) => /accidentals-/.test(t));\nexport const TokenNoteheads = TokenTypes.filter((t) => /noteheads-/.test(t));\nexport const TokenBareNoteheads = [tt.NoteheadS0, tt.NoteheadS1, tt.NoteheadS2];\nexport const TokenDirectionalNoteheads = TokenTypes.filter((t) => /noteheads-.+-[ud]/.test(t));\nexport const TokenRests = TokenTypes.filter((t) => /rests-/.test(t));\nexport const TokenFlags = TokenTypes.filter((t) => /flags-/.test(t));\nexport const TokenVolta = TokenTypes.filter((t) => /volta-/.test(t));\nexport const TokenDynamics = TokenTypes.filter((t) => /^[a-z]$/.test(t));\nexport const TokenScripts = TokenTypes.filter((t) => /scripts-/.test(t));\nexport const TokenPedals = TokenTypes.filter((t) => /pedal-/.test(t));\nexport const TokenDots = [tt.Dot, tt.DotDot];\nexport const TokenArcs = [tt.SlurBegin, tt.SlurEnd, tt.TieBegin, tt.TieEnd];\nexport const TokenBeams = TokenTypes.filter((t) => /beam-/.test(t));\nexport const TokenWedges = TokenTypes.filter((t) => /wedge-/.test(t));\n\nexport const TokenAccessories = [\n\t...TokenNumbers,\n\t...TokenDynamics,\n\t...TokenWedges,\n\t...TokenPedals,\n\t...TokenArcs,\n\n\ttt.ScriptFermata,\n\ttt.ScriptShortFermata,\n\ttt.ScriptSforzato,\n\ttt.ScriptStaccato,\n\ttt.ScriptStaccatissimo,\n\ttt.ScriptTurn,\n\ttt.ScriptTrill,\n\ttt.ScriptPrall,\n\ttt.ScriptMordent,\n\ttt.ScriptMarcato,\n\ttt.ScriptTenuto,\n\ttt.ScriptPortato,\n];\n\nexport const TokenDirectionless = [...TokenPedals];\n\nexport const TokenGlyphs = [\n\t...TokenClefs,\n\t...TokenTimesigs,\n\t...TokenNumbers,\n\t...TokenAccidentals,\n\ttt.NoteheadS0,\n\ttt.NoteheadS1,\n\ttt.NoteheadS2,\n\t...TokenRests,\n\t...TokenDynamics,\n\t...TokenScripts,\n\t...TokenPedals,\n\t...TokenDots,\n];\n\nconst TOKEN_Y_ROUND = {} as Record;\nTokenClefs.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenTimesigsN.forEach((t) => (TOKEN_Y_ROUND[t] = 1));\nTokenAccidentals.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenNoteheads.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenRests.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\nTokenDots.forEach((t) => (TOKEN_Y_ROUND[t] = 0.5));\n\nconst TOKEN_Y_FIXED = {} as Record;\nTokenTimesigsC.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\nTokenVolta.forEach((t) => (TOKEN_Y_FIXED[t] = 0));\n\nclass Token {\n\tstatic className = 'Token';\n\n\tid: string;\n\ttype: TokenType;\n\tx: number;\n\ty: number;\n\tpivotX?: number;\n\n\tconfidence: number;\n\n\ttip?: { x: number; y: number };\n\n\tvoice?: number; // integer, every bit stand for a voice\n\ttimeWarped?: boolean;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tget typeId(): string {\n\t\treturn this.type.split('|').reverse()[0];\n\t}\n\n\tget isPredicted(): boolean {\n\t\treturn Number.isFinite(this.confidence);\n\t}\n\n\tget isNotehead(): boolean {\n\t\treturn TokenDirectionalNoteheads.includes(this.type) || this.type === TokenType.NoteheadS0;\n\t}\n\n\tget isContexted(): boolean {\n\t\treturn (\n\t\t\tTokenClefs.includes(this.type) || TokenTimesigs.includes(this.type) || TokenOctshifts.includes(this.type) || TokenAccidentals.includes(this.type)\n\t\t);\n\t}\n\n\tget isAccessory(): boolean {\n\t\treturn TokenNumbers.includes(this.type) || TokenDynamics.includes(this.type) || TokenScripts.includes(this.type) || TokenPedals.includes(this.type);\n\t}\n\n\tget division(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Flag3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Flag4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Flag5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Flag6:\n\t\t\t\treturn 6;\n\n\t\t\tcase tt.Flag7:\n\t\t\t\treturn 7;\n\n\t\t\tcase tt.Flag8:\n\t\t\t\treturn 8;\n\n\t\t\tcase tt.RestM1:\n\t\t\t\treturn -1;\n\n\t\t\tcase tt.Rest0:\n\t\t\t\treturn 0;\n\n\t\t\tcase tt.Rest1:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.Rest2:\n\t\t\t\treturn 2;\n\n\t\t\tcase tt.Rest3:\n\t\t\t\treturn 3;\n\n\t\t\tcase tt.Rest4:\n\t\t\t\treturn 4;\n\n\t\t\tcase tt.Rest5:\n\t\t\t\treturn 5;\n\n\t\t\tcase tt.Rest6:\n\t\t\t\treturn 6;\n\n\t\t\t// TODO:\n\t\t\t//case tt.Rest0W:\n\t\t\t//\treturn 0;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget dots(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.Dot:\n\t\t\t\treturn 1;\n\n\t\t\tcase tt.DotDot:\n\t\t\t\treturn 2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget direction(): 'u' | 'd' | null {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn 'u';\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn 'd';\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget width(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn NOTEHEAD_WIDTHS.NoteheadS2;\n\t\t}\n\t}\n\n\tget left(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x - this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x - this.width;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget right(): number {\n\t\tswitch (this.type) {\n\t\t\tcase tt.NoteheadS0:\n\t\t\t\treturn this.x + this.width / 2;\n\n\t\t\tcase tt.NoteheadS1stemU:\n\t\t\tcase tt.NoteheadS2stemU:\n\t\t\t\treturn this.x;\n\n\t\t\tcase tt.NoteheadS1stemD:\n\t\t\tcase tt.NoteheadS2stemD:\n\t\t\t\treturn this.x + this.width;\n\t\t}\n\n\t\treturn this.x;\n\t}\n\n\tget voiceIndices(): number[] {\n\t\tif (!this.voice || this.voice < 0) return [];\n\n\t\treturn Array(Math.floor(Math.log2(this.voice)) + 1)\n\t\t\t.fill(null)\n\t\t\t.reduce((indices, _, i) => (this.voice & (1 << i) ? [i + 1, ...indices] : indices), []);\n\t}\n}\n\nclass TextToken extends Token {\n\ttextType: TextType;\n\ttext: string;\n\ttextFeature?: Record;\n\twidth_: number;\n\tfontSize: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t\tObject.assign(this, data);\n\t}\n\n\tget width(): number {\n\t\treturn this.width_;\n\t}\n\n\tset width(value: number) {\n\t\tthis.width_ = value;\n\t}\n}\n\nexport { TokenType, Token, TextToken, TOKEN_Y_ROUND, TOKEN_Y_FIXED };\n","import { Fraction, Pitch, EventFeature, EventPredisposition } from './interfaces';\nimport { gcd, reducedFraction } from './utils';\nimport { TokenType } from './token';\nimport * as Token from './token';\nimport { SimpleClass } from './aux_/typedJSON';\n\nconst WHOLE_DURATION = 128 * 3 * 5;\nconst WHOLE_EXP2 = WHOLE_DURATION / 15;\n\nenum AccessoryDirection {\n\tUp = '^',\n\tDown = '_',\n\tMiddle = '-',\n}\n\nenum GraceType {\n\tGrace = 'grace',\n\tAfterGrace = 'afterGrace',\n\tAcciaccatura = 'acciaccatura',\n\tAppoggiatura = 'appoggiatura',\n\tSlashedGrace = 'slashedGrace',\n}\n\nenum StemBeam {\n\tOpen = 'Open',\n\tClose = 'Close',\n\tContinue = 'Continue',\n}\n\nenum TremoloLink {\n\tPitcher = 'Pitcher',\n\tCatcher = 'Catcher',\n\tPierced = 'Pierced',\n}\n\nenum GlissandoStyle {\n\tNormal = 'normal',\n\tDashedLine = 'dashed-line',\n\tDottedLine = 'dotted-line',\n\tZigzag = 'zigzag',\n\tTrill = 'trill',\n}\n\nenum ArpeggioStyle {\n\tNormal = 'Normal',\n\tBracket = 'Bracket',\n\tParenthesis = 'Parenthesis',\n\tParenthesisDashed = 'ParenthesisDashed',\n\tArrowDown = 'ArrowDown',\n}\n\ninterface Accessory {\n\tdirection?: AccessoryDirection;\n\tparenthesized?: boolean;\n\ttype: TokenType;\n\tid?: string;\n\tx: number;\n}\n\ninterface TermPitch extends Pitch {\n\ttying?: boolean;\n\ttied?: boolean;\n\tparenthesized?: boolean;\n\toctaveShift?: number;\n}\n\nclass Term extends SimpleClass {\n\tx: number;\n\tstaff?: number;\n}\n\ntype RestType = 'r' | 'R' | 's' | null;\n\ninterface DurationalTerm {\n\tdivision: number;\n\tdots: number;\n\tmultiplier?: Fraction;\n}\n\nconst SCALE_NAMES = 'CDEFGAB';\n\nclass EventTerm extends Term implements DurationalTerm {\n\tstatic className = 'EventTerm';\n\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\n\tsystem: number;\n\troundX: number; // for tick map, scheduler\n\tintX: number; // for measure hash\n\tintY: number;\n\tys: number[]; // order by ascending pitch, low (greater Y) to high (less Y)\n\tpitches?: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\taccessories: Accessory[];\n\tmultiplier: Fraction;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\trepetitionChord: boolean;\n\tgrace?: GraceType;\n\tbeam?: StemBeam;\n\ttimeWarp?: Fraction;\n\tparenthesized?: boolean;\n\ttremolo?: number; // like division, 'number of beams' + 2\n\ttremoloLink?: TremoloLink;\n\tglissando?: boolean;\n\tglissandoStyle?: GlissandoStyle;\n\tarpeggioStyle?: ArpeggioStyle;\n\ttip?: { x: number; y: number };\n\n\ttick: number;\n\n\t// for topology\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature: EventFeature;\n\tpredisposition: EventPredisposition;\n\n\tgraceIds?: number[];\n\tcatcherId?: number; // tremolo catcher event ID for tremolo pitcher event\n\n\tnoteIds?: string[]; // order by upwards\n\n\tstatic space({ tick, duration }: { tick: number; duration: number }): EventTerm {\n\t\tconst term = new EventTerm({\n\t\t\trest: 's',\n\t\t\ttick,\n\t\t\taccessories: [],\n\t\t});\n\t\tterm.duration = Math.round(duration);\n\n\t\treturn term;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tObject.assign(this, data);\n\n\t\tif (Number.isFinite(data.left) && Number.isFinite(data.right)) this.x = (this.left + this.right) / 2;\n\t\tif (!Number.isFinite(this.pivotX)) this.pivotX = this.x;\n\t\t//console.assert(Number.isFinite(this.x), \"EventTerm: invalid x,\", data);\n\t}\n\n\tget alignedTick(): number {\n\t\treturn this.grace ? this.tick + this.duration : this.tick;\n\t}\n\n\tget mainDuration(): number {\n\t\treturn WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t}\n\n\tget duration(): number {\n\t\tlet value = this.mainDuration;\n\t\tif (this.multiplier) value *= this.multiplier.numerator / this.multiplier.denominator;\n\t\tif (this.timeWarp) value *= this.timeWarp.numerator / this.timeWarp.denominator;\n\n\t\treturn this.grace ? value / 8 : value;\n\t}\n\n\tset duration(value: number) {\n\t\tconsole.assert(Number.isFinite(value), 'invalid duration value:', value);\n\n\t\tconst divider = gcd(value, WHOLE_EXP2);\n\t\tconst division = Math.log2(WHOLE_EXP2 / divider);\n\t\tconst multiplier = reducedFraction(value * 2 ** division, WHOLE_DURATION);\n\n\t\tthis.division = division;\n\t\tthis.dots = 0;\n\n\t\tif (multiplier.numerator !== multiplier.denominator) this.multiplier = multiplier;\n\t\telse this.multiplier = undefined;\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget times(): string {\n\t\tif (!this.timeWarp) return null;\n\n\t\treturn `${this.timeWarp.numerator}/${this.timeWarp.denominator}`;\n\t}\n\n\tget fullMeasureRest(): boolean {\n\t\treturn this.rest === 'R';\n\t}\n\n\tget tipX(): number {\n\t\treturn this.tip ? this.tip.x : this.x;\n\t}\n\n\tget tipY(): number {\n\t\treturn this.tip ? this.tip.y : this.ys ? this.ys[0] : 0;\n\t}\n\n\tget tremoloCatcher(): boolean {\n\t\treturn this.tremoloLink === TremoloLink.Catcher;\n\t}\n\n\tget scaleChord(): string {\n\t\treturn this.pitches.map((pitch) => SCALE_NAMES[(pitch.note + 700) % 7]).join('');\n\t}\n\n\tget zeroHolder(): boolean {\n\t\treturn !!this.grace || this.tremoloCatcher;\n\t}\n}\n\nenum ContextType {\n\tClef,\n\tKeyAcc,\n\tAcc,\n\tOctaveShift,\n\tTimeSignatureC,\n\tTimeSignatureN,\n}\n\nclass ContextedTerm extends Term {\n\tstatic className = 'ContextedTerm';\n\n\ty: number;\n\ttokenType: TokenType;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget type(): ContextType {\n\t\tif (Token.TokenClefs.includes(this.tokenType)) return ContextType.Clef;\n\t\tif (/\\|key-/.test(this.tokenType)) return ContextType.KeyAcc;\n\t\tif (/accidentals-/.test(this.tokenType)) return ContextType.Acc;\n\t\tif (Token.TokenOctshifts.includes(this.tokenType)) return ContextType.OctaveShift;\n\t\tif (Token.TokenTimesigsC.includes(this.tokenType)) return ContextType.TimeSignatureC;\n\t\tif (Token.TokenTimesigsN.includes(this.tokenType)) return ContextType.TimeSignatureN;\n\n\t\treturn null;\n\t}\n\n\tget staffLevel(): boolean {\n\t\treturn [ContextType.OctaveShift, ContextType.Clef, ContextType.KeyAcc].includes(this.type);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.1;\n\t}\n\n\tget clef(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.ClefG:\n\t\t\t\treturn -this.y - 2;\n\n\t\t\tcase TokenType.ClefF:\n\t\t\t\treturn -this.y + 2;\n\n\t\t\tcase TokenType.ClefC:\n\t\t\t\treturn -this.y;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget alter() {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.AccNatural:\n\t\t\tcase TokenType.KeyNatural:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.AccSharp:\n\t\t\tcase TokenType.KeySharp:\n\t\t\t\treturn 1;\n\n\t\t\tcase TokenType.AccFlat:\n\t\t\tcase TokenType.KeyFlat:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.AccDoublesharp:\n\t\t\t\treturn 2;\n\n\t\t\tcase TokenType.AccFlatflat:\n\t\t\t\treturn -2;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget octaveShift(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.OctaveShift8va:\n\t\t\t\treturn -1;\n\n\t\t\tcase TokenType.OctaveShift0:\n\t\t\t\treturn 0;\n\n\t\t\tcase TokenType.OctaveShift8vb:\n\t\t\t\treturn 1;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget number(): number {\n\t\tswitch (this.tokenType) {\n\t\t\tcase TokenType.TimesigZero:\n\t\t\t\treturn 0;\n\t\t\tcase TokenType.TimesigOne:\n\t\t\t\treturn 1;\n\t\t\tcase TokenType.TimesigTwo:\n\t\t\t\treturn 2;\n\t\t\tcase TokenType.TimesigThree:\n\t\t\t\treturn 3;\n\t\t\tcase TokenType.TimesigFour:\n\t\t\t\treturn 4;\n\t\t\tcase TokenType.TimesigFive:\n\t\t\t\treturn 5;\n\t\t\tcase TokenType.TimesigSix:\n\t\t\t\treturn 6;\n\t\t\tcase TokenType.TimesigSeven:\n\t\t\t\treturn 7;\n\t\t\tcase TokenType.TimesigEight:\n\t\t\t\treturn 8;\n\t\t\tcase TokenType.TimesigNine:\n\t\t\t\treturn 9;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\n//class BreakTerm extends Term {\n//};\n\nclass MarkTerm extends Term {\n\tstatic className = 'MarkTerm';\n\n\ttick: number;\n\n\tget prior(): number {\n\t\treturn this.tick + 0.01;\n\t}\n}\n\nconst MUSIC_NOTES = Array(7)\n\t.fill(0)\n\t.map((_, i) => String.fromCodePoint(0x1d15d + i));\n\nclass TempoTerm extends MarkTerm {\n\tstatic className = 'TempoTerm';\n\n\tduration: string;\n\tbeats: string;\n\n\tstatic fromNumeralText(text: string): TempoTerm {\n\t\tif (/.+=.*\\d+/.test(text)) {\n\t\t\tconst [symbol, value] = text.split('=');\n\t\t\tlet division = MUSIC_NOTES.findIndex((n) => symbol.includes(n));\n\t\t\tdivision = division >= 0 ? division : 2;\n\t\t\tlet duration = (2 ** division).toString();\n\t\t\tif (symbol.includes('.')) duration += '.';\n\n\t\t\treturn new TempoTerm({ tick: 0, duration, beats: value });\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick - 0.01;\n\t}\n\n\t// a whole note equal to 1920\n\tget durationMagnitude(): number {\n\t\tconst [_, den, dot] = this.duration.match(/^(\\d+)(\\.)?$/);\n\t\tconst magnitude = (WHOLE_DURATION / Number(den)) * (dot ? 1.5 : 1);\n\n\t\treturn magnitude;\n\t}\n\n\t// beats per minute, suppose 1 beat = 480 ticks\n\tget bpm(): number {\n\t\tconst [number] = this.beats.match(/\\d+/) || [90];\n\t\tconst beats = Number(number);\n\n\t\treturn (beats * this.durationMagnitude * 4) / WHOLE_DURATION;\n\t}\n\n\tisValid(range = [10, 400]): boolean {\n\t\tconst bpm = this.bpm;\n\n\t\treturn Number.isFinite(this.bpm) && bpm >= range[0] && bpm < range[1];\n\t}\n}\n\nclass GlyphTerm extends MarkTerm {\n\tstatic className = 'GlyphTerm';\n\n\tglyph: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass TextTerm extends MarkTerm {\n\tstatic className = 'TextTerm';\n\n\tdirection?: AccessoryDirection;\n\ttext: string;\n\tbold: boolean;\n\titalic: boolean;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass LyricTerm extends MarkTerm {\n\tstatic className = 'LyricTerm';\n\n\ttext: string;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass CommandTerm extends MarkTerm {\n\tstatic className = 'CommandTerm';\n\n\tcommand: string;\n\tparameters: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n}\n\nclass ChordmodeTerm extends Term implements DurationalTerm {\n\tstatic className = 'ChordmodeTerm';\n\n\tpitch: Pitch;\n\tbasePitch?: Pitch;\n\tmodifier?: string;\n\n\tdivision: number;\n\tdots: number;\n\tmultiplier: Fraction;\n\n\ttick: number;\n\n\tconstructor(data: any) {\n\t\tsuper();\n\n\t\tObject.assign(this, data);\n\t}\n\n\tget prior(): number {\n\t\treturn this.tick;\n\t}\n\n\tget duration(): number {\n\t\tconst value = WHOLE_DURATION * 2 ** -this.division * (2 - 2 ** -this.dots);\n\t\tif (this.multiplier) return (value * this.multiplier.numerator) / this.multiplier.denominator;\n\n\t\treturn value;\n\t}\n}\n\nexport {\n\tTerm,\n\tEventTerm,\n\tContextedTerm,\n\t//BreakTerm,\n\tMarkTerm,\n\tTempoTerm,\n\tGlyphTerm,\n\tTextTerm,\n\tLyricTerm,\n\tCommandTerm,\n\tChordmodeTerm,\n\tDurationalTerm,\n\tContextType,\n\tGraceType,\n\tTermPitch,\n\tRestType,\n\tGlissandoStyle,\n\tArpeggioStyle,\n\tAccessory,\n\tAccessoryDirection,\n\tWHOLE_DURATION,\n\tStemBeam,\n\tTremoloLink,\n};\n","import sha1 from 'js-sha1';\nimport erf from 'math-erf';\n\nimport { SimpleClass } from './aux_/typedJSON';\nimport * as EquationSolver from './equationSolver';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport {\n\tBackgroundImage,\n\tEventMeasure,\n\tFraction,\n\tMeasureBarType,\n\tRegulationOptions,\n\tRegulationSolution,\n\tRegulationSolutionEvent,\n\tStaffBasic,\n} from './interfaces';\nimport type { MeasureRectification } from './measureRectification';\nimport { PatchMeasure } from './patch';\nimport { NOTEHEAD_WIDTHS } from './semanticPoint';\nimport { ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, StemBeam, TremoloLink, WHOLE_DURATION } from './term';\nimport type { GraphMeasure } from './timewiseGraph';\nimport { argmax, frac, fractionMul, roundNumber } from './utils';\n\nnamespace SimplePolicy {\n\tconst constructXMap = (measure: SpartitoMeasure): Map => {\n\t\tconst xMap = new Map();\n\n\t\t// mark full measure rests\n\t\tmeasure.rows.forEach((row) => {\n\t\t\tif (row.events.length === 1) {\n\t\t\t\tconst event = row.events[0];\n\t\t\t\tif (event.rest && event.division === 0) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst x = Math.round(event.pivotX * 10) / 10;\n\t\t\tlet key = 0;\n\t\t\tif (event.fullMeasureRest) key = Math.min(x, ...xMap.keys());\n\t\t\telse {\n\t\t\t\tkey =\n\t\t\t\t\t[...xMap.keys()].find((k) => {\n\t\t\t\t\t\t// check if the event is aligned with the current chord\n\t\t\t\t\t\tconst es = xMap.get(k);\n\t\t\t\t\t\tconst left = Math.min(...es.map((e) => e.left));\n\t\t\t\t\t\tconst right = Math.max(...es.map((e) => e.right));\n\n\t\t\t\t\t\tconst overlaySize = Math.min(right, event.right) - Math.max(left, event.left);\n\n\t\t\t\t\t\treturn overlaySize > NOTEHEAD_WIDTHS.NoteheadS1 * 0.62;\n\t\t\t\t\t}) || x;\n\t\t\t}\n\t\t\tevent.roundX = key;\n\n\t\t\tconst es = xMap.get(key) || [];\n\t\t\txMap.set(key, es);\n\n\t\t\tes.push(event);\n\t\t});\n\n\t\treturn xMap;\n\t};\n\n\texport const computeMeasureTicks = (measure: SpartitoMeasure): void => {\n\t\tconst xMap = constructXMap(measure);\n\n\t\tlet tick = 0;\n\t\tconst ts = new Set([tick]);\n\t\tconst eventGroups = [...xMap.entries()].sort(([x1], [x2]) => x1 - x2); //.map(entry => entry[1]);\n\t\tfor (const [x, events] of eventGroups) {\n\t\t\tvoid x;\n\n\t\t\tevents.forEach((event: EventTerm) => {\n\t\t\t\tif (event.predisposition) {\n\t\t\t\t\tevent.rest = event.rest && event.predisposition.fullMeasure > 0.5 ? 'R' : event.rest;\n\t\t\t\t\tevent.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t\tevent.division = argmax(event.predisposition.divisionVector);\n\t\t\t\t\tevent.dots = argmax(event.predisposition.dotsVector);\n\t\t\t\t\tif (event.predisposition.timeWarped > 0.5) event.timeWarp = frac(2, 3);\n\t\t\t\t}\n\n\t\t\t\tif (event.fullMeasureRest) event.tick = 0;\n\t\t\t\telse {\n\t\t\t\t\tif (event.zeroHolder) tick -= event.duration;\n\n\t\t\t\t\tif (!event.zeroHolder && event.predisposition && Number.isInteger(event.predisposition.tick)) event.tick = event.predisposition.tick;\n\t\t\t\t\telse event.tick = tick;\n\t\t\t\t\tts.add(event.tick + event.duration);\n\t\t\t\t}\n\t\t\t\t//console.log(\"append tick:\", event.tick + event.duration, event);\n\t\t\t});\n\t\t\tts.delete(tick);\n\n\t\t\t//column.xToTick[x] = tick;\n\n\t\t\tif (ts.size) tick = Math.min(...ts);\n\t\t}\n\n\t\tif (Number.isInteger(measure.estimatedDuration)) measure.duration = measure.estimatedDuration;\n\t\telse measure.duration = Math.max(...ts, 0);\n\t};\n\n\texport const computeMeasureVoices = (measure: SpartitoMeasure): void => {\n\t\tmeasure.voices = [];\n\t\tfor (const row of measure.rows) {\n\t\t\tconst events = row.events.filter(\n\t\t\t\t(event) => !event.grace && !event.tremoloCatcher && !event.fullMeasureRest && !(event.predisposition && event.predisposition.fake > 0.5)\n\t\t\t);\n\t\t\tconst eventSet = new Set(events);\n\n\t\t\twhile (eventSet.size) {\n\t\t\t\tlet tick = 0;\n\n\t\t\t\tconst voice = [];\n\t\t\t\tconst pushEvent = (e: EventTerm) => {\n\t\t\t\t\tvoice.push(e.id);\n\t\t\t\t\tif (!e.zeroHolder) tick += e.duration;\n\t\t\t\t\teventSet.delete(e);\n\t\t\t\t};\n\n\t\t\t\tconst e0 = events.find((e) => eventSet.has(e));\n\t\t\t\tif (e0.alignedTick > 0) {\n\t\t\t\t\t//voice.tickMap[tick] = EventTerm.space({ tick, duration: e0.alignedTick });\n\t\t\t\t\ttick = e0.alignedTick;\n\t\t\t\t}\n\t\t\t\tpushEvent(e0);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// TODO: consider slur pair\n\t\t\t\t\tconst e = events.find((e) => eventSet.has(e) && e.alignedTick === tick);\n\t\t\t\t\tif (!e) break;\n\n\t\t\t\t\tpushEvent(e);\n\t\t\t\t}\n\n\t\t\t\t//if (tick < measure.duration)\n\t\t\t\t//\tvoice.tickMap[tick] = EventTerm.space({ tick, duration: staff.duration - tick });\n\n\t\t\t\tmeasure.voices.push(voice);\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst solveGraceEvents = (measure: SpartitoMeasure): void => {\n\tconst graceEvents = measure.events.filter((event) => event.grace /*&& !Number.isFinite(event.tick)*/);\n\tif (!graceEvents.length) return;\n\n\tconst tickMap = measure.tickMap;\n\tconst staffMap = [...tickMap.entries()].reduce((smap, [tick, events]) => {\n\t\tevents.forEach((event) => {\n\t\t\tif (!event.grace) {\n\t\t\t\tsmap[event.staff] = smap[event.staff] || {};\n\n\t\t\t\tconst oldEvent = smap[event.staff][tick];\n\t\t\t\tsmap[event.staff][tick] = !oldEvent || oldEvent.x > event.x ? event : oldEvent;\n\t\t\t}\n\t\t});\n\n\t\treturn smap;\n\t}, {} as { [staff: number]: { [tick: number]: EventTerm } });\n\n\ttype Position = { tick: number; preTick: number; graces: EventTerm[]; event: EventTerm };\n\tconst staffPositions = Object.entries(staffMap).reduce((map, [staff, emap]) => {\n\t\tmap[staff] = Object.entries(emap)\n\t\t\t.map(([t, event]) => ({ event, tick: Number(t), preTick: -240, graces: [] }))\n\t\t\t.sort((p1, p2) => p1.event.x - p2.event.x);\n\t\tmap[staff].push({ tick: measure.duration, event: measure.endEvent, preTick: 0, graces: [] }); // terminal bar\n\n\t\tlet tick = 0;\n\t\tmap[staff].forEach((position) => {\n\t\t\tif (position.tick > tick) {\n\t\t\t\tposition.preTick = tick;\n\t\t\t\ttick = position.tick;\n\t\t\t}\n\t\t});\n\n\t\treturn map;\n\t}, {} as { [staff: number]: Position[] });\n\n\t// append grace events into positions\n\tgraceEvents.forEach((event) => {\n\t\tconst staff = staffPositions[event.staff];\n\t\tif (staff) {\n\t\t\tconst position = staff.find((p) => p.event.x > event.x);\n\t\t\tif (position) position.graces.push(event);\n\t\t\tevent.roundX = event.x;\n\t\t\t//if (position.tick >= measure.duration)\n\t\t\t//\tevent.grace = GraceType.AfterGrace;\n\t\t}\n\t});\n\n\tObject.values(staffPositions).forEach((staff) =>\n\t\tstaff.forEach((position) => {\n\t\t\tif (position.graces.length) {\n\t\t\t\tposition.event.graceIds = position.graces.map((e) => e.id);\n\n\t\t\t\tconst totalDuration = position.graces.reduce((t, e) => t + e.duration, 0);\n\t\t\t\tconst duration = Math.min(totalDuration, position.tick - position.preTick);\n\t\t\t\tconst warp = duration / totalDuration;\n\n\t\t\t\tlet tick = position.tick;\n\t\t\t\t[...position.graces].reverse().forEach((event) => {\n\t\t\t\t\tevent.tick = Math.round(tick - event.duration * warp);\n\t\t\t\t\ttick = event.tick;\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t);\n};\n\nconst solveTremoloPairs = (measure: SpartitoMeasure): void => {\n\tconst catchers = measure.events.filter((event) => event.tremoloCatcher && !event.grace);\n\tconst pitchers = measure.events.filter((event) => event.tremoloLink === TremoloLink.Pitcher && !event.grace);\n\n\tcatchers.forEach((catcher) => {\n\t\tlet candidates = pitchers.filter((event) => event.division === catcher.division && event.x < catcher.x);\n\t\tif (!candidates.length)\n\t\t\tcandidates = measure.events.filter(\n\t\t\t\t(event) =>\n\t\t\t\t\tNumber.isFinite(event.tick) &&\n\t\t\t\t\t!event.grace &&\n\t\t\t\t\t!event.rest &&\n\t\t\t\t\tevent.division === catcher.division &&\n\t\t\t\t\tevent.dots === catcher.dots &&\n\t\t\t\t\tevent.x < catcher.x\n\t\t\t);\n\t\tcandidates.sort((c1, c2) => c2.x - c1.x);\n\t\tif (candidates.length) {\n\t\t\tconst pitcher = candidates[0];\n\t\t\tpitcher.catcherId = catcher.id;\n\t\t\tconst tremolo = Math.max(pitcher.tremolo || 3, catcher.tremolo || 3);\n\t\t\tpitcher.tremolo = tremolo;\n\t\t\tcatcher.tremolo = tremolo;\n\n\t\t\tif (!catcher.tick) catcher.tick = pitcher.tick + pitcher.duration / 2;\n\n\t\t\tconst pi = pitchers.indexOf(pitcher);\n\t\t\tif (pi >= 0) pitchers.splice(pi, 1);\n\t\t}\n\t});\n};\n\nnamespace EquationPolicy {\n\ttype EventID = number;\n\ttype Time = number;\n\n\tconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\n\tconst CHORDS_SEAM_SIGMA = 0.6;\n\tconst NEIGHBOR_CHORDS_SIGMA = 1.6;\n\tconst Y_DECAY_SIGMA = 16;\n\tconst STAFF_DECAY_FACTOR = 2;\n\tconst STEM_DIRECTION_DECAY = 0.9;\n\tconst ILL_BEAMS_PENALTY = 0.2;\n\n\tconst INVERT_SQRT2 = 0.7071067811865475;\n\n\tconst MATRIX_H_WEIGHT = 3;\n\n\tconst FINE_BEAMS = [\n\t\t[null, null],\n\t\t[null, StemBeam.Open],\n\t\t[StemBeam.Open, StemBeam.Continue],\n\t\t[StemBeam.Open, StemBeam.Close],\n\t\t[StemBeam.Continue, StemBeam.Continue],\n\t\t[StemBeam.Continue, StemBeam.Close],\n\t\t[StemBeam.Close, null],\n\t\t[StemBeam.Close, StemBeam.Open],\n\t].map((bb) => bb.join('-'));\n\n\tinterface Event {\n\t\tid: EventID;\n\t\tstaff: number;\n\t\tx: number;\n\t\ty: number;\n\t\tduration: Time;\n\t\tconfidence: number;\n\t\tshrinkness: number;\n\t}\n\n\texport interface StaffGroup {\n\t\tevents: Event[];\n\t\texpectedDuration: Time;\n\t\tmeasureShrinkness: number;\n\t\tendX: number;\n\t\tmatrixH: Matrix;\n\t\tmatrixV: Matrix;\n\n\t\tids?: EventID[];\n\t}\n\n\tinterface EventResult {\n\t\tid: EventID;\n\t\ttick: Time;\n\t\tendTick: Time;\n\t\ttickGroup: number;\n\t\ttimeWarp?: Fraction;\n\t}\n\n\texport interface StaffGroupSolution {\n\t\tevents: EventResult[];\n\t\tvoices: EventID[][];\n\t\tduration: number;\n\n\t\tloss?: number;\n\t\tcredits?: number;\n\t\ttimes?: number;\n\t}\n\n\texport interface RegulatorOptions extends EquationSolver.SolverOptions {\n\t\tsolver?: (staffGroup: StaffGroup, options: EquationSolver.SolverOptions) => Promise;\n\t}\n\n\tconst solveStaffGroup = (staffGroup: StaffGroup, options: EquationSolver.SolverOptions): StaffGroupSolution => {\n\t\tif (!staffGroup.events.length) {\n\t\t\treturn {\n\t\t\t\tevents: [],\n\t\t\t\tvoices: [],\n\t\t\t\tduration: 0,\n\t\t\t};\n\t\t}\n\n\t\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\t\treturn solver.solve();\n\t};\n\n\texport const estiamteMeasure = (measure: SpartitoMeasure): StaffGroup => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => ({\n\t\t\t\tid: event.id,\n\t\t\t\tstaff: event.staff,\n\t\t\t\tx: event.x,\n\t\t\t\ttickEstimated: event.predisposition && Number.isFinite(event.predisposition.tick) ? event.predisposition.tick : event.x,\n\t\t\t\ttipX: event.tipX,\n\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\tduration: (event.mainDuration * DURATION_MULTIPLIER) / WHOLE_DURATION,\n\t\t\t\tdivision: event.division,\n\t\t\t\tdots: event.dots,\n\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\tbeam: event.beam,\n\t\t\t\trest: event.rest,\n\t\t\t\t// the possibility of full measure rest\n\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\tshrinkness: event.predisposition ? event.predisposition.timeWarped : null,\n\t\t\t}));\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: Number.isFinite(e.shrinkness) ? e.shrinkness : Math.tanh((e.division - e.dots * 0.1) / 4),\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\t//const hp = (dx: number): number => 1 - erf(((dx / NEIGHBOR_CHORDS_SIGMA) ** 0.6) * INVERT_SQRT2);\n\t\tconst hp = (dx: number): number => erf(dx / NEIGHBOR_CHORDS_SIGMA) * erf(NEIGHBOR_CHORDS_SIGMA / dx);\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\tif (e1.staffGroup !== e2.staffGroup) matrixH[e1.id][e2.id] = 0;\n\t\t\t\t// prohibit voice crossing staff groups\n\t\t\t\telse if (e1.x <= e2.x) matrixH[e1.id][e2.id] = 0;\n\t\t\t\telse {\n\t\t\t\t\tconst staffDecay = Math.exp(-Math.abs(e1.staff - e2.staff) * STAFF_DECAY_FACTOR);\n\t\t\t\t\tconst yDecay = e1.staff === e2.staff ? Math.exp(-Math.abs(e1.y - e2.y) / Y_DECAY_SIGMA) : 1;\n\t\t\t\t\tconst dx = e1.x - e2.x;\n\t\t\t\t\tconst dtx = e1.tipX - e2.tipX;\n\t\t\t\t\tmatrixH[e1.id][e2.id] = (staffDecay * yDecay * Math.min(hp(dx), hp(dtx))) ** (1 / MATRIX_H_WEIGHT);\n\t\t\t\t}\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\t\t\t\tmatrixH[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\n\t\t\t\t// weaken inconsistent stem directions\n\t\t\t\tif (e1.stemDirection && e2.stemDirection && e1.stemDirection !== e2.stemDirection) matrixH[e1.id][e2.id] *= STEM_DIRECTION_DECAY;\n\n\t\t\t\t// ill beams penalty\n\t\t\t\tif (!e1.rest && !e2.rest && !FINE_BEAMS.includes([e2.beam, e1.beam].join('-'))) matrixH[e1.id][e2.id] *= ILL_BEAMS_PENALTY;\n\t\t\t}\n\n\t\t\t// H possibility of e1 and end of measure\n\t\t\tmatrixH[ids.length][e1.id] = hp(measure.width - e1.x) ** (1 / MATRIX_H_WEIGHT);\n\t\t}\n\n\t\treturn {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness: 0,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t};\n\n\texport const regulateMeasure = async (measure: SpartitoMeasure, { solver = null, ...options }: RegulatorOptions): Promise => {\n\t\tconst env = estiamteMeasure(measure);\n\t\tconst { ids, matrixH, matrixV } = env;\n\n\t\t// copy matrices values from measure topology data\n\t\tif (measure.matrixH) {\n\t\t\tconsole.assert(\n\t\t\t\tmeasure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t\t'matrix shape mismatch:',\n\t\t\t\tids.length,\n\t\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t\t);\n\t\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t\t}\n\t\t}\n\t\tif (measure.matrixV) {\n\t\t\tmatrixV.forEach((row, i) =>\n\t\t\t\trow.forEach((_, j) => {\n\t\t\t\t\tconst mp = measure.matrixV[ids[i]][ids[j]];\n\t\t\t\t\tif (Number.isFinite(mp)) matrixV[i][j] = mp;\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\tenv.measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tif (options.logger) options.logger.info('--- MEASURE', measure.measureIndex, '---', env);\n\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\t\tconst resultEvents = solution.events.map((e) => ({\n\t\t\t...e,\n\t\t\tid: env.ids[e.id], // decode compact ids\n\t\t}));\n\t\tresultEvents.forEach((e) => {\n\t\t\tconst event = measure.events.find((e0) => e0.id === e.id);\n\t\t\tevent.tick = Number.isFinite(e.tick) ? Math.round((e.tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : null;\n\t\t\tevent.tickGroup = e.tickGroup;\n\t\t\tevent.timeWarp = e.timeWarp;\n\t\t});\n\n\t\tmeasure.duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\t\tmeasure.voices = solution.voices.map((voice) => voice.map((id) => env.ids[id]));\n\n\t\tmeasure.solutionStat = {\n\t\t\tloss: solution.loss,\n\t\t\tsolverCredits: solution.credits,\n\t\t\tsolverTimes: solution.times,\n\t\t};\n\n\t\t// full measure rests\n\t\tmeasure.events.forEach((event) => {\n\t\t\tconst result = resultEvents.find((e) => e.id === event.id);\n\t\t\tif (!result) return;\n\t\t\telse if (!Number.isFinite(result.tick) && event.rest === 'r' && event.division === 0) {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.rest = 'R';\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t} else if (event.rest === 'R') {\n\t\t\t\tevent.tick = 0;\n\t\t\t\tevent.tickGroup = 0;\n\t\t\t\tevent.duration = measure.duration;\n\t\t\t\tmeasure.voices.push([event.id]);\n\t\t\t}\n\t\t});\n\t};\n\n\texport const regulateMeasureWithRectification = async (\n\t\tmeasure: SpartitoMeasure,\n\t\trectification: MeasureRectification,\n\t\t{ solver = null, ...options }: RegulatorOptions\n\t): Promise => {\n\t\tconst allEvents = measure.events\n\t\t\t.filter((event) => !event.zeroHolder)\n\t\t\t.map((event) => {\n\t\t\t\tconst re = rectification.events.find((e) => e && e.id === event.id);\n\t\t\t\tconst division = Number.isFinite(re?.division) ? re.division : event.division;\n\t\t\t\tconst dots = Number.isFinite(re?.dots) ? re.dots : event.dots;\n\t\t\t\tconst duration = DURATION_MULTIPLIER * 2 ** -division * (2 - 2 ** -dots);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: event.id,\n\t\t\t\t\tstaff: event.staff,\n\t\t\t\t\tx: event.x,\n\t\t\t\t\ttickEstimated: event.predisposition?.tick,\n\t\t\t\t\ty: event.tipY + event.staff * 100, // TODO: refine y by event term tipY\n\t\t\t\t\tduration,\n\t\t\t\t\t// the possibility of full measure rest\n\t\t\t\t\tpR: event.rest === 'R' ? 1 : event.rest === 'r' && event.division === 0 ? Math.tanh(event.x - measure.eventStartX) : 0,\n\t\t\t\t\tfakeP: event.predisposition ? event.predisposition.fakeP || 0 : 0,\n\t\t\t\t\tshrinkness: event.predisposition?.timeWarped || 0,\n\t\t\t\t};\n\t\t\t});\n\t\tlet expectedDuration = (DURATION_MULTIPLIER * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\t\tif (Number.isFinite(measure.estimatedDuration))\n\t\t\texpectedDuration = Math.max(expectedDuration, roundNumber(measure.estimatedDuration, DURATION_MULTIPLIER / 4));\n\n\t\tconst staffGroupMap = measure.staffGroups.reduce((map, staves, group) => {\n\t\t\tstaves.forEach((staff) => (map[staff] = group));\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst ids = [0, ...allEvents.map((e) => e.id)]; // compact ids\n\t\tconst ievents = allEvents.map((e) => ({\n\t\t\t...e,\n\t\t\tid: ids.indexOf(e.id),\n\t\t\tx: e.x - measure.startX,\n\t\t\tconfidence: (1 - e.pR) * (1 - e.fakeP),\n\t\t\tshrinkness: e.shrinkness,\n\t\t\tstaffGroup: staffGroupMap[e.staff],\n\t\t}));\n\n\t\t// estimate topology matrices\n\t\tconst matrixH = Array(ids.length + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\t\tconst matrixV = Array(ids.length)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(ids.length).fill(0));\n\n\t\tfor (const e1 of ievents) {\n\t\t\tfor (const e2 of ievents) {\n\t\t\t\tmatrixV[e1.id][e2.id] =\n\t\t\t\t\te1 !== e2 && e1.tickEstimated >= e2.tickEstimated ? 1 - erf(((e1.tickEstimated - e2.tickEstimated) * INVERT_SQRT2) / CHORDS_SEAM_SIGMA) : 0;\n\n\t\t\t\t// weaken full measure rest connections\n\t\t\t\tconst nR = (1 - e1.pR) * (1 - e2.pR);\n\t\t\t\tmatrixV[e1.id][e2.id] *= nR;\n\n\t\t\t\tif (matrixV[e1.id][e2.id] < 1e-2) matrixV[e1.id][e2.id] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// copy matrices values from measure topology data\n\t\tconsole.assert(\n\t\t\tmeasure.matrixH && measure.matrixH.length > ids[ids.length - 1] && measure.matrixH[0].length > ids[ids.length - 1],\n\t\t\t'matrix shape mismatch:',\n\t\t\tids.length,\n\t\t\t`${measure.matrixH.length}x${measure.matrixH[0].length}`,\n\t\t\t`${matrixH.length}x${matrixH[0].length}`\n\t\t);\n\t\tfor (let i = 0; i < ids.length + 1; i++) {\n\t\t\tconst ii = i < ids.length ? ids[i] : measure.matrixH.length - 1;\n\t\t\tfor (let j = 1; j < ids.length; j++) matrixH[i][j] = measure.matrixH[ii][ids[j]];\n\t\t}\n\n\t\tlet measureShrinkness = 0;\n\t\tif (Number.isFinite(measure.estimatedDuration)) measureShrinkness = Math.tanh(Math.log(Math.min(1, measure.estimatedDuration / measure.duration)) * -3);\n\n\t\tconst env = {\n\t\t\tids,\n\t\t\tevents: ievents,\n\t\t\texpectedDuration,\n\t\t\tmeasureShrinkness,\n\t\t\tendX: measure.position.right,\n\t\t\tmatrixH,\n\t\t\tmatrixV,\n\t\t};\n\t\tconst solution = solver ? await solver(env, options) : solveStaffGroup(env, options);\n\n\t\tconst priority = -solution.loss;\n\n\t\tconst events = solution.events.map(({ id, tick, tickGroup, timeWarp }) => {\n\t\t\tconst re = rectification.events.find((e) => e && e.id === id);\n\t\t\tconst tickN = Number.isFinite(tick) ? Math.round((tick * WHOLE_DURATION) / DURATION_MULTIPLIER) : tick;\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttick: tickN,\n\t\t\t\ttickGroup,\n\t\t\t\ttimeWarp,\n\t\t\t\tdivision: re?.division,\n\t\t\t\tdots: re?.dots,\n\t\t\t};\n\t\t});\n\n\t\tconst duration = Math.round((solution.duration * WHOLE_DURATION) / DURATION_MULTIPLIER);\n\n\t\treturn {\n\t\t\tevents,\n\t\t\tvoices: solution.voices,\n\t\t\tduration,\n\t\t\tpriority,\n\t\t};\n\t};\n}\n\ntype Matrix = number[][];\n\ntype TickMap = Map;\n\ninterface SolutionStatistics {\n\tloss?: number;\n\tsolverCredits?: number;\n\tsolverTimes?: number;\n}\n\nclass SpartitoMeasure extends SimpleClass {\n\tstatic className = 'SpartitoMeasure';\n\tstatic blackKeys = ['staffGroups', 'solutionStat', 'measureNumber', 'deposit'];\n\n\tmeasureIndex: number;\n\tstaffMask: number;\n\tstaffGroups: number[][];\n\toriginalRegulationHash?: string;\n\tmeasureNumber?: number; // count from the last indent measure, head partial measure is zero, skip empty measures\n\n\tpatched: boolean;\n\tdiscard: boolean;\n\n\tposition: {\n\t\tsystemIndex: number;\n\t\tlocalIndex: number; // the measure local index in its system\n\t\tleft: number;\n\t\tright: number;\n\t\tstaffYs?: number[];\n\t\tstaffYsFull?: number[];\n\t};\n\n\tbackgroundImages: BackgroundImage[];\n\n\tevents: EventTerm[];\n\tendEvent: Partial; // the placeholder for end tick\n\tcontexts: ContextedTerm[][]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n\tindent: boolean;\n\n\tsolutionStat?: SolutionStatistics;\n\n\tmatrixH: Matrix; // matrix N x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n\testimatedDuration: number;\n\n\tgraph: GraphMeasure;\n\n\tdeposit: Record;\n\n\tstatic reorderEvents(events: EventTerm[], staffYsFull: number[]): EventTerm[] {\n\t\tconst HALF_NOTEHEAD = 0.7;\n\n\t\tconst ys = [];\n\n\t\tconst es = events.map((e) => ({\n\t\t\tid: e.id,\n\t\t\tstaff: e.staff,\n\t\t\tx: e.x / HALF_NOTEHEAD,\n\t\t\trx: 0,\n\t\t\try: staffYsFull[e.staff] + e.tipY,\n\t\t\ttipY: e.tipY,\n\t\t\tprior: 0,\n\t\t}));\n\t\tes.sort((e1, e2) => e1.x - e2.x);\n\t\tes.slice(1).forEach((e, i) => {\n\t\t\tconst dx = Math.min(Math.round(e.x - es[i].x), 2);\n\t\t\te.rx = es[i].rx + dx;\n\t\t});\n\t\tes.forEach((e) => {\n\t\t\te.prior = e.staff * 1e4 + e.rx + e.tipY * 0.01;\n\n\t\t\tif (!ys.includes(e.ry)) ys.push(e.ry);\n\t\t});\n\t\tes.sort((e1, e2) => e1.prior - e2.prior);\n\t\tys.sort((y1, y2) => y1 - y2);\n\n\t\tlet yi = 0;\n\t\tconst yis = ys.map((y, i) => {\n\t\t\tif (!i || ys[i] - ys[i - 1] < 0.5) return yi;\n\n\t\t\t++yi;\n\t\t\treturn yi;\n\t\t});\n\n\t\tconst result = es.map((e) => new EventTerm({ ...events.find((ev) => ev.id === e.id), intX: e.rx, intY: yis[ys.indexOf(e.ry)] }));\n\t\tresult.forEach((e, i) => (e.id = i + 1));\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tif (!this.originalRegulationHash && !this.regulated) this.originalRegulationHash = this.regulationHash;\n\n\t\tthis.barTypes = this.barTypes || {};\n\n\t\t// Ensure postRegulate runs for measures deserialized with voices (e.g. from patches/JSON)\n\t\t// to set endEvent and roundX needed for playback cursor positioning.\n\t\tif (this.regulated && this.position) this.postRegulate();\n\t}\n\n\tget timeSignature(): Fraction {\n\t\treturn this.basics && this.basics[0].timeSignature;\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.basics && this.basics[0].keySignature;\n\t}\n\n\tget timeSignatureChanged(): boolean {\n\t\treturn this.contexts.filter(Boolean)[0].some((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type));\n\t}\n\n\tget doubtfulTimesig(): boolean {\n\t\treturn this.basics && this.basics[0].doubtfulTimesig;\n\t}\n\n\tget regulated(): boolean {\n\t\treturn !!this.voices;\n\t}\n\n\tget validRegulated(): boolean {\n\t\tif (!this.voices) return false;\n\n\t\treturn this.voices.flat(1).every((id) => Number.isFinite(this.events.find((e) => e.id === id)?.tick));\n\t}\n\n\tget rows(): EventMeasure[] {\n\t\treturn this.contexts.map((contexts, si) => {\n\t\t\tconst events = this.events.filter((e) => e.staff === si);\n\n\t\t\treturn {\n\t\t\t\tevents,\n\t\t\t\tcontexts,\n\t\t\t};\n\t\t});\n\t}\n\n\tget eventStartX(): number {\n\t\treturn this.events.length ? Math.min(...this.events.map((e) => e.x)) : this.startX;\n\t}\n\n\tget startX(): number {\n\t\treturn this.position.left;\n\t}\n\n\tget width(): number {\n\t\treturn this.position.right - this.position.left;\n\t}\n\n\tget tickMap(): TickMap {\n\t\treturn this.events\n\t\t\t.concat([this.endEvent as EventTerm])\n\t\t\t.filter(Boolean)\n\t\t\t.reduce((map, event) => {\n\t\t\t\tif (Number.isFinite(event.tick)) {\n\t\t\t\t\tif (!map.has(event.tick)) map.set(event.tick, []);\n\n\t\t\t\t\tmap.get(event.tick).push(event);\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}, new Map());\n\t}\n\n\tget tickToX(): { [tick: number]: number } {\n\t\treturn [...this.tickMap.entries()].reduce((map, [tick, events]) => {\n\t\t\tevents = events.filter((e) => !e.fullMeasureRest && !e.grace);\n\t\t\tif (events.length) {\n\t\t\t\tconst x = Math.min(...events.map((e) => e.x));\n\t\t\t\tmap[tick] = x;\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget tickRates(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tevents.sort((e1, e2) => e1.x - e2.x);\n\n\t\treturn events.slice(0, events.length - 1).map((e1, i) => {\n\t\t\tconst e2 = events[i + 1];\n\n\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t});\n\t}\n\n\tget tickRatesInStaves(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(sevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickRatesInGroups(): number[] {\n\t\tconst events = this.events.filter((event) => Number.isFinite(event.tick) && !event.fullMeasureRest);\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst rates = Object.values(gevents).map((es) =>\n\t\t\tes\n\t\t\t\t.sort((e1, e2) => e1.x - e2.x)\n\t\t\t\t.slice(0, es.length - 1)\n\t\t\t\t.map((e1, i) => {\n\t\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\t\treturn (e2.tick - e1.tick) / Math.max(e2.x - e1.x, 1e-3);\n\t\t\t\t})\n\t\t);\n\n\t\treturn [].concat(...rates);\n\t}\n\n\tget tickTwist(): number {\n\t\tif (!this.duration || !this.staffGroups) return undefined;\n\n\t\tconst events = this.events.filter(\n\t\t\t(event) => Number.isFinite(event.tick) && !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !(event.rest && event.division === 0)\n\t\t); // ignore rest0\n\t\tconst gevents: Record = events.reduce((map, event) => {\n\t\t\tconst groupIndex = this.staffGroups.findIndex((group) => group.includes(event.staff));\n\t\t\tmap[groupIndex] = map[groupIndex] || [];\n\t\t\tmap[groupIndex].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\n\t\tconst twists = Object.values(gevents).map((es) => {\n\t\t\tconst eventsXOrder = [...es].sort((e1, e2) => e1.pivotX - e2.pivotX);\n\t\t\tconst xSpan = this.position.right - eventsXOrder[0].x;\n\t\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\t\tconst e1 = eventsXOrder[i];\n\t\t\t\tconst dx = e2.pivotX - e1.pivotX;\n\t\t\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\t\t\tif (!dt) return dx / xSpan;\n\n\t\t\t\tconst rate = Math.atan2(dt / this.duration, dx / xSpan);\n\n\t\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t\t});\n\n\t\t\treturn Math.max(0, ...tickTwists);\n\t\t});\n\n\t\treturn Math.max(0, ...twists);\n\t}\n\n\tget eventMap(): Record {\n\t\treturn this.events.reduce((map, event) => {\n\t\t\tmap[event.id] = event;\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget empty(): boolean {\n\t\treturn !this.events?.length || !this.voices?.length;\n\t}\n\n\tget hasIllEvent(): boolean {\n\t\tconst voicedEventIds = this.voices.flat(1);\n\t\tconst eventMap = this.eventMap;\n\t\treturn (\n\t\t\tthis.regulated &&\n\t\t\tvoicedEventIds.some((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\treturn !event.zeroHolder && !Number.isFinite(event.tick) && !event.fullMeasureRest;\n\t\t\t})\n\t\t);\n\t}\n\n\tget brief(): string {\n\t\tconst timesig = `${this.timeSignature.numerator}/${this.timeSignature.denominator}`;\n\t\tconst eventBrieves = this.events.map((e) =>\n\t\t\t[\n\t\t\t\te.staff,\n\t\t\t\te.intX,\n\t\t\t\tMath.round(e.tip ? e.tip.y : e.ys?.[0] ?? 0),\n\t\t\t\te.fullMeasureRest ? 0 : e.division,\n\t\t\t\te.fullMeasureRest ? 0 : e.dots,\n\t\t\t\te.rest ? 'r' : '',\n\t\t\t\te.grace || '',\n\t\t\t\te.stemDirection,\n\t\t\t\te.beam || '',\n\t\t\t].join('|')\n\t\t);\n\n\t\treturn [timesig, ...eventBrieves].join('\\n');\n\t}\n\n\tget regulationHash(): string {\n\t\treturn sha1(this.brief);\n\t}\n\n\t// prefer use originalRegulationHash\n\tget regulationHash0(): string {\n\t\treturn this.originalRegulationHash || this.regulationHash;\n\t}\n\n\tget regulationHashes(): string[] {\n\t\treturn Array.from(new Set([this.originalRegulationHash, this.regulationHash].filter(Boolean)));\n\t}\n\n\tget featureWords(): string[][] | null {\n\t\tif (!this.regulated || !this.voices || !this.voices.length) return null;\n\n\t\tconst invalid = this.tickRatesInStaves.some((rate) => rate < 0);\n\n\t\tconst mainEvents = this.events.filter((event) => !event.zeroHolder && !event.rest);\n\n\t\tconst ys = mainEvents\n\t\t\t.map((event) => event.ys)\n\t\t\t.flat(1)\n\t\t\t.map((y) => `Y${-y * 2}`);\n\t\tconst uys = Array.from(new Set(ys));\n\t\tif (this.keySignature) uys.push(`K${this.keySignature}`);\n\n\t\tconst voices = this.voices\n\t\t\t.map((ids) => ids.map((id) => this.events.find((e) => e.id === id)).filter((event) => !event.zeroHolder && !event.rest))\n\t\t\t.filter((voice) => voice.length);\n\n\t\tconst melodies = invalid ? [] : voices.map((es) => es.map((e) => e.scaleChord).join('-'));\n\n\t\tconst rhythm = invalid ? [] : voices.map((es) => es.map((e) => e.division).join(''));\n\t\tif (this.timeSignature) rhythm.push(`T${this.timeSignature.numerator}/${this.timeSignature.denominator}`);\n\n\t\treturn [uys, melodies, rhythm];\n\t}\n\n\tget barType(): MeasureBarType {\n\t\tif (this.voltaEnd) return 'VoltaRight';\n\n\t\tconst typeEntris = Object.entries(this.barTypes).sort((e1, e2) => e2[1] - e1[1]);\n\t\tif (typeEntris[0] && typeEntris[0][1] >= 1) return typeEntris[0][0] as MeasureBarType;\n\n\t\treturn null;\n\t}\n\n\tget partialDuration(): boolean {\n\t\tif (!Number.isFinite(this.duration)) return false;\n\n\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\treturn this.duration < signatureDuration;\n\t}\n\n\tpostRegulate(): void {\n\t\tthis.endEvent = new EventTerm({ tick: this.duration, x: this.position.right });\n\n\t\tthis.updateRoundX();\n\t\tsolveGraceEvents(this);\n\t\tsolveTremoloPairs(this);\n\t\tthis.updateContextTick();\n\t}\n\n\tupdateRoundX(): void {\n\t\tconst tickToX = this.tickToX;\n\t\tif (tickToX)\n\t\t\tthis.events.forEach((event) => {\n\t\t\t\tconst x = tickToX[event.tick];\n\t\t\t\tif (Number.isFinite(x)) event.roundX = x;\n\t\t\t});\n\t}\n\n\tupdateContextTick(): void {\n\t\tif (!this.staffGroups) return;\n\t\tconst contexts = this.contexts.flat(1);\n\t\tthis.staffGroups.flat(1).forEach((staffIndex) => {\n\t\t\tconst terms = [...this.events.filter((e) => e.staff === staffIndex), ...contexts.filter((c) => c.staff === staffIndex)];\n\t\t\tterms.sort((t1, t2) => t2.x - t1.x); // order by x from right to left\n\n\t\t\tlet tick = this.duration;\n\t\t\tterms.forEach((term) => {\n\t\t\t\tif (term instanceof EventTerm) {\n\t\t\t\t\tif (!term.fullMeasureRest && !term.zeroHolder) tick = term.tick;\n\t\t\t\t} else if (term instanceof ContextedTerm) term.tick = tick;\n\t\t\t});\n\t\t});\n\t}\n\n\tasSolution(ref: SpartitoMeasure = undefined): RegulationSolution {\n\t\tif (!this.regulated) return null;\n\n\t\t//let timeSignature = undefined;\n\t\t//if (ref && printFraction(ref.timeSignature) !== printFraction(this.timeSignature)) timeSignature = this.timeSignature;\n\n\t\treturn {\n\t\t\t//timeSignature,\n\t\t\tevents: this.events.map((e) => {\n\t\t\t\tconst se = {\n\t\t\t\t\tid: e.id,\n\t\t\t\t\ttick: e.tick,\n\t\t\t\t\ttickGroup: e.tickGroup,\n\t\t\t\t\ttimeWarp: e.timeWarp,\n\t\t\t\t} as RegulationSolutionEvent;\n\n\t\t\t\tif (ref) {\n\t\t\t\t\tconst refEvent = ref.events.find((re) => re.id === e.id);\n\t\t\t\t\tif (refEvent) {\n\t\t\t\t\t\tif (e.division !== refEvent.division) se.division = e.division;\n\t\t\t\t\t\tif (e.dots !== refEvent.dots) se.dots = e.dots;\n\t\t\t\t\t\tif (e.grace !== refEvent.grace) se.grace = !!e.grace;\n\t\t\t\t\t\tif (e.beam !== refEvent.beam) se.beam = e.beam;\n\t\t\t\t\t\tif (e.fullMeasureRest !== refEvent.fullMeasureRest) se.fullMeasure = e.fullMeasureRest;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn se;\n\t\t\t}),\n\t\t\tvoices: this.voices,\n\t\t\tduration: this.duration,\n\t\t\tpriority: -this.solutionStat?.loss,\n\t\t};\n\t}\n\n\tapplySolution(solution: RegulationSolution): void {\n\t\tif (solution.timeSignature) {\n\t\t\tthis.basics.forEach((basic) => {\n\t\t\t\tbasic.timeSignature = solution.timeSignature;\n\t\t\t\tbasic.doubtfulTimesig = false;\n\t\t\t});\n\t\t}\n\n\t\tthis.voices = solution.voices;\n\t\tthis.duration = solution.duration;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.timeWarp = null;\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\n\t\t\tconst se = solution.events?.find((e) => e.id === event.id);\n\t\t\tif (se) {\n\t\t\t\tevent.tick = se.tick;\n\t\t\t\tevent.timeWarp = se.timeWarp;\n\t\t\t\tevent.tickGroup = se.tickGroup;\n\n\t\t\t\tif (Number.isFinite(se.division)) event.division = se.division;\n\t\t\t\tif (Number.isFinite(se.dots)) event.dots = se.dots;\n\t\t\t\tif (se.beam !== undefined) event.beam = se.beam as StemBeam;\n\t\t\t\tif (se.grace !== undefined) event.grace = se.grace ? GraceType.Grace : undefined;\n\t\t\t\tif (se.fullMeasure) event.rest = 'R';\n\t\t\t}\n\t\t});\n\n\t\tif (Number.isFinite(solution.priority)) this.solutionStat = { loss: -solution.priority };\n\n\t\tthis.postRegulate();\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.voices = null;\n\t\tthis.duration = null;\n\t\tthis.events.forEach((event) => {\n\t\t\tevent.tick = null;\n\t\t\tevent.tickGroup = null;\n\t\t\tevent.timeWarp = null;\n\t\t});\n\t}\n\n\tregulateTest(): void {\n\t\tthis.duration = 0;\n\t\tthis.voices = this.rows.map((row) => row.events.map((e) => e.id));\n\t\tthis.voices.forEach((ids) => {\n\t\t\tlet tick = 0;\n\t\t\tconst events = ids.map((id) => this.events.find((e) => e.id === id));\n\t\t\tevents.forEach((e, index) => {\n\t\t\t\te.tickGroup = index;\n\t\t\t\te.tick = tick;\n\n\t\t\t\ttick += e.duration;\n\t\t\t});\n\n\t\t\tthis.duration = Math.max(this.duration, tick);\n\t\t});\n\t}\n\n\tregulateSimple(): void {\n\t\tSimplePolicy.computeMeasureTicks(this);\n\t\tSimplePolicy.computeMeasureVoices(this);\n\t}\n\n\tasync regulateEquations(options: EquationPolicy.RegulatorOptions): Promise {\n\t\tawait EquationPolicy.regulateMeasure(this, options);\n\t}\n\n\t// compute event.tick, event.tickGroup, event.timeWarp, voices, duration\n\tasync regulate({ policy = 'advanced', ...options }: RegulationOptions = {}): Promise {\n\t\tswitch (policy) {\n\t\t\tcase 'test':\n\t\t\t\tthis.regulateTest();\n\n\t\t\t\tbreak;\n\t\t\tcase 'equations':\n\t\t\tcase 'advanced':\n\t\t\t\tawait this.regulateEquations(options);\n\n\t\t\t\tbreak;\n\t\t\tcase 'simple':\n\t\t\tdefault:\n\t\t\t\tthis.regulateSimple();\n\t\t}\n\n\t\tthis.postRegulate();\n\t}\n\n\tcreatePatch(): PatchMeasure {\n\t\treturn new PatchMeasure({\n\t\t\tmeasureIndex: this.measureIndex,\n\t\t\tstaffMask: this.staffMask,\n\t\t\tbasic: this.basics[0],\n\t\t\t//points: [],\n\t\t\tevents: this.events,\n\t\t\tcontexts: this.contexts,\n\t\t\tmarks: this.marks,\n\t\t\tvoices: this.voices,\n\t\t});\n\t}\n\n\tcreateClusters(): EventCluster[] {\n\t\tconst trueEventIds = this.voices && new Set(this.voices.flat(1));\n\n\t\treturn this.staffGroups\n\t\t\t.filter((idx) => idx.length)\n\t\t\t.map((staffIndices) => {\n\t\t\t\tconst staffY0 = this.position.staffYs[0];\n\t\t\t\tconst staffYn = (n) => this.position.staffYs[staffIndices.indexOf(n)] - staffY0;\n\n\t\t\t\tconst events = this.events.filter((event) => staffIndices.includes(event.staff));\n\t\t\t\tif (!events.length) return null;\n\n\t\t\t\tconst elements: EventElement[] = events.map((event) => ({\n\t\t\t\t\tindex: event.id,\n\t\t\t\t\tvoice: (this.voices || []).findIndex((voice) => voice.includes(event.id)),\n\t\t\t\t\ttype: event.rest ? EventElementType.REST : EventElementType.CHORD,\n\t\t\t\t\tstaff: staffIndices.indexOf(event.staff),\n\t\t\t\t\tx: event.tipX,\n\t\t\t\t\tpivotX: event.pivotX,\n\t\t\t\t\ty1: staffYn(event.staff) + (event.stemDirection === 'u' ? event.tipY : event.ys[event.ys.length - 1]),\n\t\t\t\t\ty2: staffYn(event.staff) + (event.stemDirection === 'u' ? event.ys[0] : event.tipY),\n\t\t\t\t\theadY: event.stemDirection === 'u' ? event.ys[0] : event.ys[event.ys.length - 1],\n\t\t\t\t\tfeature: event.feature,\n\t\t\t\t\tdivision: event.division,\n\t\t\t\t\tdots: event.dots,\n\t\t\t\t\tbeam: event.beam || null,\n\t\t\t\t\tstemDirection: event.stemDirection,\n\t\t\t\t\tgrace: !!event.grace,\n\t\t\t\t\ttremoloCatcher: event.tremoloCatcher,\n\t\t\t\t\ttimeWarped: !!event.timeWarp,\n\t\t\t\t\tfullMeasure: event.fullMeasureRest,\n\t\t\t\t\ttick: event.tick || 0,\n\t\t\t\t\tfake: !event.fullMeasureRest && !event.grace && this.voices && !trueEventIds.has(event.id), // tremoloCatcher deemed as fake\n\t\t\t\t}));\n\t\t\t\tif (!elements.some((elem) => !elem.fake)) return null;\n\n\t\t\t\tconst signatureDuration = fractionMul(WHOLE_DURATION, this.timeSignature);\n\n\t\t\t\t// BOS & EOS\n\t\t\t\telements.unshift({\n\t\t\t\t\tindex: 0,\n\t\t\t\t\ttype: EventElementType.BOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.left,\n\t\t\t\t\tpivotX: this.position.left,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: this.duration < signatureDuration,\n\t\t\t\t\ttick: 0,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\t\t\t\telements.push({\n\t\t\t\t\tindex: -1,\n\t\t\t\t\ttype: EventElementType.EOS,\n\t\t\t\t\tstaff: null,\n\t\t\t\t\tdivision: null,\n\t\t\t\t\tbeam: null,\n\t\t\t\t\tdots: null,\n\t\t\t\t\tstemDirection: null,\n\t\t\t\t\tgrace: false,\n\t\t\t\t\ttremoloCatcher: false,\n\t\t\t\t\tfullMeasure: false,\n\t\t\t\t\tx: this.position.right,\n\t\t\t\t\tpivotX: this.position.right,\n\t\t\t\t\ty1: 0,\n\t\t\t\t\ty2: 0,\n\t\t\t\t\theadY: 0,\n\t\t\t\t\tfeature: null,\n\t\t\t\t\ttimeWarped: false,\n\t\t\t\t\ttick: this.duration,\n\t\t\t\t\tfake: false,\n\t\t\t\t});\n\n\t\t\t\tlet matrixH = null;\n\t\t\t\tif (this.voices) {\n\t\t\t\t\tmatrixH = elements.map(() => elements.map(() => 0));\n\n\t\t\t\t\tthis.voices.forEach((voice) => {\n\t\t\t\t\t\tlet tar = 0;\n\t\t\t\t\t\tvoice.forEach((id) => {\n\t\t\t\t\t\t\tconst src = elements.findIndex((e) => e.index === id);\n\t\t\t\t\t\t\tif (src > 0 && tar >= 0) matrixH[src][tar] = 1;\n\t\t\t\t\t\t\ttar = src;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (tar >= 0) matrixH[elements.length - 1][tar] = 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst annotation = { ...this.solutionStat, patched: this.patched };\n\n\t\t\t\tconst backgroundImages =\n\t\t\t\t\tthis.backgroundImages &&\n\t\t\t\t\tthis.backgroundImages.map(({ url, position }) => ({\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\t...position,\n\t\t\t\t\t\t\ty: position.y - staffY0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}));\n\n\t\t\t\treturn new EventCluster({\n\t\t\t\t\tindex: this.measureIndex,\n\t\t\t\t\tduration: this.duration,\n\t\t\t\t\tsignatureDuration,\n\t\t\t\t\tstaffY0,\n\t\t\t\t\telements,\n\t\t\t\t\tmatrixH,\n\t\t\t\t\tannotation,\n\t\t\t\t\tbackgroundImages,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n\n\tapplyClusters(clusters: EventCluster[]): void {\n\t\tconst id_max = this.events.reduce((max, event) => Math.max(max, event.id), 0) + 1;\n\t\tthis.matrixH = Array(id_max + 1)\n\t\t\t.fill(null)\n\t\t\t.map(() => Array(id_max).fill(0));\n\n\t\tclusters.forEach((cluster) => {\n\t\t\tconst ids = cluster.elements.map((e) => e.index);\n\t\t\tconsole.assert(cluster.matrixH.length === ids.length - 1, 'unexpected matrixH size:', cluster.matrixH.length, ids.length);\n\n\t\t\tfor (let is = 1; is < ids.length; ++is) {\n\t\t\t\tfor (let it = 0; it < ids.length - 1; ++it) {\n\t\t\t\t\tconst srcId = ids[is] < 0 ? id_max : ids[is];\n\t\t\t\t\tconst tarId = ids[it];\n\n\t\t\t\t\tthis.matrixH[srcId][tarId] = cluster.matrixH[is - 1][it];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// event predisposition\n\t\t\tcluster.elements.forEach((elem) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === elem.index);\n\t\t\t\tif (event) {\n\t\t\t\t\tevent.predisposition = elem.predisposition;\n\t\t\t\t\tif (event.predisposition.grace !== undefined) event.grace = event.predisposition.grace ? GraceType.Grace : null;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// estimated measure duration\n\t\tthis.estimatedDuration = clusters.reduce((sum, cluster) => sum + cluster.estimatedDuration, 0) / clusters.length;\n\t}\n}\n\nexport { SpartitoMeasure, EquationPolicy };\n","import { MIDI } from '@k-l-lambda/music-widgets';\n\nimport { Fraction } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ArpeggioStyle, EventTerm, GraceType, RestType, StemBeam, TermPitch, TremoloLink } from './term';\nimport { noteToPitch } from './utils';\n\n// NOTE: 'JSONEditor.onEditable' determine whether a field is editable, here 'readonly' modifier has no effect to UI\n\ninterface EventUIAgent {\n\treadonly id: number;\n\treadonly duration: number;\n\n\t//ys: number[];\n\tpitches: TermPitch[];\n\trest: RestType;\n\tdivision: number;\n\tdots: number;\n\tstemDirection: string;\n\ttying: boolean;\n\ttied: boolean;\n\tgrace: boolean; //\n\tbeam: StemBeam;\n\ttimeWarp: string; //\n\ttremolo: number;\n\ttremoloLink: TremoloLink;\n\tglissando: boolean;\n\tarpeggioStyle: ArpeggioStyle;\n\ttick: number;\n}\n\ninterface MeasureUIAgent {\n\treadonly measureIndex: number;\n\ttimeSignature: Fraction;\n\tdoubtfulTimesig: boolean;\n\tkeySignature: number;\n\t//readonly events: EventUIAgent[];\n\tduration: number;\n\treadonly voices: number[][];\n}\n\nclass EditableEvent extends EventTerm {\n\tvoice: number;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\t}\n\n\tget agent(): EventUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget(target, key): any {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'arpeggioStyle': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? null : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'glissando': {\n\t\t\t\t\t\tconst value = self[key];\n\t\t\t\t\t\treturn value === undefined ? false : value;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\treturn !!self.grace;\n\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\treturn self.timeWarp ? `${self.timeWarp.numerator}/${self.timeWarp.denominator}` : null;\n\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\treturn self.multiplier ? `${self.multiplier.numerator}/${self.multiplier.denominator}` : null;\n\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn self.pitches;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\tconst self = target as any as EditableEvent;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'tick':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\tcase 'rest':\n\t\t\t\t\tcase 'division':\n\t\t\t\t\tcase 'dots':\n\t\t\t\t\tcase 'stemDirection':\n\t\t\t\t\tcase 'tying':\n\t\t\t\t\tcase 'tied':\n\t\t\t\t\tcase 'beam':\n\t\t\t\t\tcase 'tremolo':\n\t\t\t\t\tcase 'tremoloLink':\n\t\t\t\t\tcase 'glissando':\n\t\t\t\t\tcase 'arpeggioStyle':\n\t\t\t\t\t\t(self as any)[key] = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'grace':\n\t\t\t\t\t\tself.grace = value ? GraceType.Grace : null;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'timeWarp':\n\t\t\t\t\t\tself.timeWarp = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.timeWarp = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'multiplier':\n\t\t\t\t\t\tself.multiplier = null;\n\t\t\t\t\t\tif (value && typeof value === 'string') {\n\t\t\t\t\t\t\tconst captures = value.match(/^(\\d+)\\/(\\d+)/);\n\t\t\t\t\t\t\tif (captures) {\n\t\t\t\t\t\t\t\tself.multiplier = {\n\t\t\t\t\t\t\t\t\tnumerator: parseInt(captures[1]),\n\t\t\t\t\t\t\t\t\tdenominator: parseInt(captures[2]),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'id':\n\t\t\t\t\tcase 'pitches':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => [\n\t\t\t\t'id',\n\t\t\t\t'duration',\n\t\t\t\t'rest',\n\t\t\t\t'division',\n\t\t\t\t'dots',\n\t\t\t\t'stemDirection',\n\t\t\t\t'tying',\n\t\t\t\t'tied',\n\t\t\t\t'beam',\n\t\t\t\t'timeWarp',\n\t\t\t\t'multiplier',\n\t\t\t\t'tremolo',\n\t\t\t\t'tremoloLink',\n\t\t\t\t'glissando',\n\t\t\t\t'arpeggioStyle',\n\t\t\t\t'tick',\n\t\t\t\t'grace',\n\t\t\t\t'pitches',\n\t\t\t],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n}\n\nclass EditableMeasure extends SpartitoMeasure {\n\tstatic className = 'EditableMeasure';\n\tstatic blackKeys = [];\n\n\tevents: EditableEvent[] = null;\n\n\tconstructor(data: any) {\n\t\tsuper(data);\n\n\t\tthis.events = data.events;\n\t\tif (this.events?.some((event) => !(event instanceof EditableEvent))) this.events = this.events.map((event) => new EditableEvent(event));\n\n\t\tif (this.voices) this.syncVoiceToEvents();\n\t}\n\n\tsyncVoiceToEvents(): void {\n\t\tthis.events.forEach((event) => (event.voice = -1));\n\t\tthis.voices.forEach((voice, voiceIndex) => {\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\tif (event) event.voice = voiceIndex;\n\t\t\t\telse console.warn('no event with id:', id, this.events.length);\n\t\t\t});\n\t\t});\n\t}\n\n\tsyncVoiceFromEvents(): void {\n\t\tconst voices: EditableEvent[][] = [];\n\t\tthis.events.forEach((event) => {\n\t\t\tif (event?.voice >= 0) {\n\t\t\t\tvoices[event.voice] = voices[event.voice] || [];\n\t\t\t\tvoices[event.voice].push(event);\n\t\t\t}\n\t\t});\n\n\t\tvoices.forEach((voice) => voice.sort((e1, e2) => e1.tick - e2.tick));\n\n\t\tthis.voices = voices.map((voice) => voice.map((event) => event.id));\n\t}\n\n\tget agent(): MeasureUIAgent {\n\t\treturn new Proxy(this as any, {\n\t\t\tget: (target, key): any => {\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\treturn self[key];\n\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn self.voices?.map((voice) => voice.join(',')) || null;\n\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\treturn self.basics[0][key];\n\t\t\t\t\t//case 'events':\n\t\t\t\t\t//\treturn self.events.map(eventUIAgent);\n\t\t\t\t\tcase 'toJSON':\n\t\t\t\t\t\treturn () => ({\n\t\t\t\t\t\t\tmeasureIndex: self.measureIndex,\n\t\t\t\t\t\t\tvoices: self.voices,\n\t\t\t\t\t\t\tduration: self.duration,\n\t\t\t\t\t\t\ttimeSignature: self.basics[0].timeSignature,\n\t\t\t\t\t\t\tkeySignature: self.basics[0].keySignature,\n\t\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t},\n\n\t\t\tset: (target, key, value): boolean => {\n\t\t\t\t//console.log('set:', key, value);\n\t\t\t\tconst self = target as any as EditableMeasure;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase 'timeSignature':\n\t\t\t\t\tcase 'keySignature':\n\t\t\t\t\tcase 'doubtfulTimesig':\n\t\t\t\t\t\t(self.basics[0][key] as any) = value;\n\t\t\t\t\t\tself.basics = self.basics.map(() => self.basics[0]);\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'duration':\n\t\t\t\t\t\tself.duration = value;\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tcase 'measureIndex':\n\t\t\t\t\tcase 'voices':\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\townKeys: (): string[] => ['measureIndex', 'timeSignature', 'doubtfulTimesig', 'keySignature', 'duration', 'voices'],\n\n\t\t\tgetOwnPropertyDescriptor() {\n\t\t\t\treturn { enumerable: true, configurable: true };\n\t\t\t},\n\t\t});\n\t}\n\n\tmakeMIDI(bpm: number = 120): MIDI.MidiData {\n\t\tif (!this.regulated) return null;\n\n\t\tconst microsecondsPerBeat = 60e6 / bpm;\n\n\t\tconst header = { formatType: 0, ticksPerBeat: 480 };\n\t\tconst tracks = this.voices.map((ids, vi) => {\n\t\t\tconst events = ids\n\t\t\t\t.map((id) => {\n\t\t\t\t\tconst event = this.events.find((event) => event.id === id);\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tconst subEvents = event.graceIds ? event.graceIds.map((id) => this.events.find((event) => event.id === id)) : [];\n\n\t\t\t\t\t\treturn [...subEvents, event];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn [];\n\t\t\t\t})\n\t\t\t\t.flat(1);\n\n\t\t\tconst startTime = 0;\n\n\t\t\ttype Event = MIDI.MidiEvent & { [key: string]: any };\n\t\t\tconst midiEvents: Event[] = events\n\t\t\t\t.filter((event) => !event.rest && Number.isFinite(event.tick) && event.tick >= 0 && Number.isFinite(event.duration))\n\t\t\t\t.map((event) =>\n\t\t\t\t\tevent.pitches.map((pitch) => [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t\tvelocity: 96,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\t\ttime: event.tick + event.duration,\n\t\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\t\tchannel: event.staff,\n\t\t\t\t\t\t\tnoteNumber: noteToPitch(pitch),\n\t\t\t\t\t\t},\n\t\t\t\t\t])\n\t\t\t\t)\n\t\t\t\t.flat(2);\n\n\t\t\tmidiEvents.sort(function (e1, e2) {\n\t\t\t\treturn e1.time - e2.time;\n\t\t\t});\n\n\t\t\tif (vi === 0) {\n\t\t\t\tmidiEvents.unshift(\n\t\t\t\t\t{\n\t\t\t\t\t\ttime: startTime,\n\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\tsubtype: 'timeSignature',\n\t\t\t\t\t\tnumerator: this.timeSignature.numerator,\n\t\t\t\t\t\tdenominator: this.timeSignature.denominator,\n\t\t\t\t\t\tthirtyseconds: 8,\n\t\t\t\t\t},\n\t\t\t\t\t{ time: startTime, type: 'meta', subtype: 'setTempo', microsecondsPerBeat }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tmidiEvents.forEach((event) => {\n\t\t\t\tevent.ticks = Math.round(event.time - startTime);\n\t\t\t});\n\t\t\tmidiEvents.forEach((event, i) => {\n\t\t\t\tevent.deltaTime = event.ticks - (i > 0 ? midiEvents[i - 1].ticks : 0);\n\t\t\t});\n\n\t\t\tmidiEvents.push({ deltaTime: 0, type: 'meta', subtype: 'endOfTrack' });\n\n\t\t\treturn midiEvents;\n\t\t});\n\n\t\treturn {\n\t\t\theader,\n\t\t\ttracks,\n\t\t};\n\t}\n}\n\nexport { EditableEvent, EditableMeasure };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { Term, EventTerm, ContextedTerm, ChordmodeTerm, MarkTerm, Accessory, GraceType, TremoloLink } from './term';\nimport { HashVector } from './hashVector';\nimport { StaffLayout } from '../staffLayout';\nimport * as measureLayout from '../measureLayout';\n\ninterface Rect {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n}\n\ninterface ChordRect {\n\tx: number;\n\tstemX: number;\n\twidth: number;\n\ttop: number;\n\tbottom: number;\n\tstemDirection: string;\n\ttip?: { x: number; y: number };\n}\n\ninterface VLine {\n\tx: number;\n\ty1: number;\n\ty2: number;\n}\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ntype DivisionVecotor = [number, number, number, number, number, number, number, number, number]; // [0, 1, 2, 3, 4, 5, 6, 7, 8]\n\ntype MeasureBarType = null | 'Terminal' | 'Segment' | 'VoltaRight';\n\ninterface EventFeature {\n\tdivisions: DivisionVecotor;\n\tdots: [number, number]; // [1, 2]\n\tbeams: [number, number, number]; // ['Open', 'Continue', 'Close']\n\tstemDirections: [number, number]; // ['u', 'd']\n\tgrace: number;\n\ttremoloCatcher: number;\n}\n\ninterface EventPredisposition {\n\tgrace: boolean;\n\ttimeWarped: number;\n\tfullMeasure: number;\n\tfake: number;\n\tfakeP: number;\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tdivisionVector: DivisionVecotor;\n\tdotsVector: [number, number, number]; // [0, 1, 2]\n\tbeamVector: [number, number, number, number]; // [null, open, continue, close]\n\tstemDirectionVector: [number, number, number]; // [null, up, down]\n}\n\ninterface ChordColumn {\n\tleft: number;\n\tright: number;\n\tpivotX: number;\n\tys: number[];\n\tnoteIds: string[]; // order by upwards\n\tdivision: number;\n\tdots: number;\n\trest: boolean;\n\tstemDirection: string;\n\taccessories?: Accessory[];\n\tgrace?: GraceType;\n\ttremolo?: number;\n\ttremoloLink?: TremoloLink;\n\tbeam?: string;\n\ttip?: { x: number; y: number };\n\n\t//stemTipY?: number;\n\n\t// for topology\n\tstaff?: number;\n\tid?: number;\n\tprevId?: number;\n\ttickGroup?: number;\n\n\tfeature?: EventFeature;\n}\n\ninterface EventMeasure {\n\tevents: EventTerm[];\n\tcontexts: ContextedTerm[];\n}\n\ninterface StaffBasic {\n\ttimeSignature: Fraction;\n\ttimeSigNumeric: boolean;\n\tkeySignature: number;\n\tdoubtfulTimesig: boolean;\n}\n\ninterface EventMeasureColumn {\n\tmeasureIndex: number;\n\t//startX: number;\n\t//width: number;\n\n\trows: EventMeasure[]; // [staff]\n\tmarks: MarkTerm[];\n\tduration: number;\n\n\tvoices?: number[][]; // [voice, id]\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbasics?: StaffBasic[]; // [staff]\n\txMap?: Map;\n\tregularLoss?: number;\n\tvoltaBegin: boolean;\n\tvoltaEnd: boolean;\n\talternative: boolean;\n\tbarTypes: Record;\n}\n\ninterface EventSystem {\n\tstaffMask: number;\n\tcolumns: EventMeasureColumn[]; // [measure]\n}\n\ninterface TermMeasure extends Partial {\n\tterms: Term[];\n\tduration: number;\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n}\n\ntype TermRow = TermMeasure[];\n\ninterface TermStaff {\n\trows: TermRow[]; // [system]\n}\n\ninterface Pitch {\n\tnote: number;\n\talter: number;\n}\n\nenum PageLayoutMethod {\n\tByLines = 'ByLines',\n\tByBlocks = 'ByBlocks',\n}\n\ninterface RecognitionSettings {\n\tenabledGauge: boolean; // staves straighten\n\tpageLayoutMethod: PageLayoutMethod;\n\tsemanticConfidenceThreshold: number;\n}\n\ninterface Crop {\n\taspect?: number | undefined;\n\tx?: number | undefined;\n\ty?: number | undefined;\n\twidth?: number | undefined;\n\theight?: number | undefined;\n\tunit?: 'px' | '%' | undefined;\n}\n\n//\t0 2 4\t\t\tr r tx\n//\t1 3 5\t\t\tr r ty\ntype Matrix2x3 = [number, number, number, number, number, number];\n\ninterface SourceImageFile {\n\tname: string;\n\tsize: number;\n\turl: string;\n\tcrop?: Crop;\n\tmatrix: Matrix2x3;\n\tdimensions: {\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tinterval: number;\n\tneedGauge?: boolean;\n}\n\ninterface Area extends Rect {\n\tstaves: {\n\t\tinterval: number;\n\t\tmiddleRhos: number[];\n\t\tphi1: number;\n\t\tphi2: number;\n\t};\n}\n\ninterface PageLayout {\n\tareas: Area[];\n}\n\ninterface MeasureBrief {\n\ttimeSignature: Fraction;\n}\n\ninterface VoiceMeasure {\n\ttickMap: { [key: number]: EventTerm | ChordmodeTerm };\n\tduration: number;\n\n\ttimeSignature?: Fraction;\n\ttimeSigNumeric?: boolean;\n\tkeySignature?: number;\n\n\tcontextedTerms: ContextedTerm[];\n\tmarks: MarkTerm[];\n\n\tbreak?: boolean;\n\tpageBreak?: boolean;\n\tbar?: string;\n\n\tempty?: boolean;\n\n\theadStaff?: number;\n\ttailStaff?: number;\n\n\ttrait?: HashVector;\n\tvoiceIndex?: number;\n}\n\ninterface TermVoice {\n\tmode: string;\n\tmeasures: VoiceMeasure[];\n}\n\ninterface VoicesStaff {\n\tcontext?: string;\n\tname?: string;\n\tvoices: TermVoice[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n\tslashSystemSeparator: boolean;\n}\n\ninterface MusicHeaders {\n\ttitle: string;\n\tsubtitle: string;\n\tsubsubtitle: string;\n\tcomposer: string;\n\tpoet: string;\n\tarranger: string;\n\topus: string;\n\tcopyright: string;\n\tinstrument: string;\n\tdedication: string;\n\ttagline: string;\n}\n\ninterface MusicSheet {\n\ttitle: string;\n\tpageSize: {\n\t\t// in pixels\n\t\twidth: number;\n\t\theight: number;\n\t};\n\tunitSize: number;\n\tmeasureLayout?: measureLayout.MeasureLayout;\n\tstaffLayout: StaffLayout;\n\tpaperOptions?: Partial;\n\theaders: Partial;\n\n\tvoiceStaves: VoicesStaff[];\n\tinstrumentDict: { [key: string]: string };\n}\n\ninterface Performing {\n\tnotation: MetaNotation;\n\ttokenMap: Map;\n}\n\ntype RegulationPolicy = 'test' | 'simple' | 'equations' | 'advanced';\n\ninterface RegulationOptions {\n\tpolicy?: RegulationPolicy;\n\tquota?: number;\n\t[key: string]: any;\n}\n\ninterface ScoreData {\n\tversion?: number;\n\t[key: string]: any;\n}\n\ninterface AdditionalLineStack {\n\tleft: number;\n\tright: number;\n\tn: number;\n}\n\ninterface RegulationSolutionEvent {\n\tid: number;\n\ttick: number;\n\ttickGroup: number;\n\ttimeWarp: Fraction;\n\tdivision?: number;\n\tdots?: number;\n\tbeam?: string;\n\tgrace?: boolean;\n\tfullMeasure?: boolean;\n}\n\ninterface RegulationSolution {\n\tevents: RegulationSolutionEvent[];\n\tvoices: number[][];\n\tduration: number;\n\tpriority?: number;\n\testimatedDuration?: number;\n\ttimeSignature?: Fraction;\n}\n\ninterface BackgroundImage {\n\turl: string;\n\tposition: Rect;\n\toriginal?: boolean;\n}\n\nenum TextType { //\tLEVEL\t\t\tCHARSET\n\tTitle = 'Title', // page\t\t\t\tgeneral\n\tAuthor = 'Author', // page\t\t\t\tgeneral\n\tTempoText = 'TempoText', // measure\t\t\tspecific vocabulary\n\tTempoNumeral = 'TempoNumeral', // measure\t\t\tsymbolic and numeric\n\tTextualMark = 'TextualMark', // term\t\t\t\tspecific vocabulary\n\tLyric = 'Lyric', // term\t\t\t\tgeneral\n\tInstrument = 'Instrument', // system\t\t\tspecific vocabulary\n\tMeasureNumber = 'MeasureNumber', // system\t\t\tnumeric\n\tTimes = 'Times', // staff\t\t\tnumeric\n\tAlternation1 = 'Alternation1', // measure\t\t\tnumeric\n\tAlternation2 = 'Alternation2', // measure\t\t\tnumeric\n\tChord = 'Chord', // measure\t\t\tspecific domian\n\tPageMargin = 'PageMargin', // page\t\t\t\tgeneral\n\tOther = 'Other', // page\t\t\t\tgeneral\n}\n\nexport {\n\tRect,\n\tChordRect,\n\tVLine,\n\tFraction,\n\tMeasureBarType,\n\tEventFeature,\n\tEventPredisposition,\n\tChordColumn,\n\tEventMeasure,\n\tEventMeasureColumn,\n\tEventSystem,\n\tTermMeasure,\n\tTermRow,\n\tTermStaff,\n\tPitch,\n\tPageLayoutMethod,\n\tRecognitionSettings,\n\tSourceImageFile,\n\tPageLayout,\n\tStaffBasic,\n\tVoiceMeasure,\n\tVoicesStaff,\n\tTermVoice,\n\tMeasureBrief,\n\tAdditionalLineStack,\n\tTextType,\n\tMusicSheet,\n\tPerforming,\n\tRegulationOptions,\n\tScoreData,\n\tMusicHeaders,\n\tMatrix2x3,\n\tRegulationSolutionEvent,\n\tRegulationSolution,\n\tBackgroundImage,\n};\n","import { SpartitoMeasure } from './spartitoMeasure';\nimport { StemBeam, WHOLE_DURATION } from './term';\nimport { fractionMul, gcd } from './utils';\n\nexport interface MeasureEvaluation {\n\tevents: number;\n\tvalidEvents: number;\n\tvoiceRugged: boolean;\n\tnullEvents: number;\n\tfakeEvents: number;\n\twarpedEvents: number;\n\tcomplicatedTimewarp: boolean;\n\tspaceTime: number;\n\tsurplusTime: number;\n\tdurationRate: number;\n\tbeamBroken: boolean;\n\tfractionalWarp: boolean;\n\tirregularWarpsN: number;\n\tirregularTick: boolean;\n\ttickTwist: number;\n\ttickOverlapped: boolean;\n\tgraceInVoice: boolean;\n\tgraceN: number;\n\tgraceDominant: boolean;\n\tperfect: boolean;\n\tfine: boolean;\n\terror: boolean;\n\tqualityScore: number;\n}\n\nconst BEAM_STATUS = {\n\t[StemBeam.Open]: 1,\n\t[StemBeam.Continue]: 0,\n\t[StemBeam.Close]: -1,\n};\n\nexport const evaluateMeasure = (measure: SpartitoMeasure): MeasureEvaluation => {\n\tif (!measure.regulated) return undefined;\n\n\tconst eventMap = measure.eventMap;\n\n\tconst events = measure.events.length;\n\tconst validEvents = measure.voices.flat(1).length;\n\tconst warpedEvents = measure.events.filter((e) => e.timeWarp).length;\n\tconst warps = new Set(\n\t\tmeasure.events.filter((e) => e.timeWarp && !(e.rest && e.division === 0)).map((e) => `${e.timeWarp!.numerator}/${e.timeWarp!.denominator}`)\n\t);\n\tconst irregularWarps = new Set(warps);\n\tirregularWarps.delete('2/3');\n\n\tconst fractionalWarp = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tif (!events.some((e) => e.timeWarp)) return false;\n\n\t\tlet denominator = 0;\n\t\tlet tickSum = 0;\n\t\tlet eventN = 0;\n\t\treturn events.some((event, i) => {\n\t\t\tconst d = event.timeWarp ? event.timeWarp.denominator : 0;\n\t\t\tif (d !== denominator) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\n\t\t\t\ttickSum = 0;\n\t\t\t\teventN = 0;\n\t\t\t}\n\n\t\t\tdenominator = d;\n\t\t\ttickSum += event.duration;\n\t\t\t++eventN;\n\n\t\t\tif (i === events.length - 1) {\n\t\t\t\tif (denominator > 0 && (tickSum % denominator || eventN < 2)) return true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst tickOverlapped = measure.voices.some((voice) => {\n\t\tconst events = voice.map((id) => eventMap[id]);\n\t\tlet tick = 0;\n\t\treturn events.some((event) => {\n\t\t\tif (event.grace) return false;\n\n\t\t\tif (event.tick < tick) return true;\n\t\t\ttick = event.tick + event.duration;\n\n\t\t\treturn false;\n\t\t});\n\t});\n\n\tconst fractionalTimes = new Set(measure.events.filter((e) => e.timeWarp && e.timeWarp.denominator > 3).map((e) => e.duration));\n\tconst complicatedTimewarp = fractionalTimes.size > 1;\n\n\tconst literalDuration = fractionMul(WHOLE_DURATION, measure.timeSignature);\n\tconst sigDuration = measure.doubtfulTimesig ? measure.duration : literalDuration;\n\n\tconst inVoiceEvents = measure.voices.flat(1).map((id) => eventMap[id]);\n\n\t// Guard: detect corrupted event data in voices (e.g. missing division, NaN tick)\n\tconst corruptedVoiceEvent = inVoiceEvents.some(\n\t\t(event) =>\n\t\t\t!event ||\n\t\t\t!Number.isFinite(event.tick) ||\n\t\t\t!Number.isFinite(event.division) ||\n\t\t\tevent.division < 0 ||\n\t\t\t!Number.isFinite(event.duration) ||\n\t\t\tevent.duration <= 0\n\t);\n\n\tconst overranged = inVoiceEvents.reduce((over, event) => over || event.tick < 0 || event.tick + event.duration > sigDuration, false);\n\tconst overDuration = measure.duration > literalDuration;\n\tconst graceInVoice = inVoiceEvents.some((event) => event.grace);\n\tconst graceN = measure.events.filter((e) => e.grace).length;\n\tconst graceDominant = graceN >= inVoiceEvents.length;\n\n\tconst irregularTick = inVoiceEvents.some((event) => {\n\t\tlet t = event.tick * 2 ** (event.division + 2);\n\t\tif (event.timeWarp) t *= event.timeWarp.denominator;\n\n\t\tif (!Number.isFinite(t)) return true;\n\n\t\tconst fragment = gcd(Math.round(t), WHOLE_DURATION);\n\t\t//if (fragment < WHOLE_DURATION)\n\t\t//\tconsole.log(\"irregularTick:\", event.tick, fragment);\n\t\treturn fragment < WHOLE_DURATION;\n\t});\n\n\tconst beamStatus = measure.voices!.map((voice) =>\n\t\tvoice.reduce(\n\t\t\t({ status, broken }, ei, evi) => {\n\t\t\t\tconst event = eventMap[ei];\n\t\t\t\tif (event.beam) {\n\t\t\t\t\t// allow an open beam at beginning of a voice\n\t\t\t\t\tif (evi === 0 && [StemBeam.Continue, StemBeam.Close].includes(event.beam)) status = 1;\n\n\t\t\t\t\tstatus += BEAM_STATUS[event.beam];\n\t\t\t\t\tbroken = broken || !(status >= 0 && status <= 1);\n\t\t\t\t} else if (!event.rest) broken = broken || status !== 0;\n\n\t\t\t\treturn { status, broken };\n\t\t\t},\n\t\t\t{ status: 0, broken: false }\n\t\t)\n\t);\n\tconst beamBroken = beamStatus.some(({ broken }) => broken); // allow an open beam at the end of a voice (status == 1)\n\tlet spaceTime = 0;\n\tlet surplusTime = 0;\n\tmeasure.voices!.forEach((voice) => {\n\t\tconst eventDuration = voice.reduce((sum, ei) => sum + eventMap[ei].duration, 0);\n\t\tspaceTime += Math.max(0, measure.duration - eventDuration);\n\t\tsurplusTime += Math.max(0, eventDuration - measure.duration);\n\t});\n\tspaceTime /= WHOLE_DURATION;\n\tconst nullEvents = measure.events.filter(\n\t\t(e) => !e.grace && !e.fullMeasureRest && !e.tremoloCatcher && (!e.predisposition || e.predisposition.fakeP < 0.1) && !Number.isFinite(e.tick)\n\t).length;\n\n\tconst fakeEvents = measure.events.filter(\n\t\t(event) => !event.fullMeasureRest && !event.grace && !event.tremoloCatcher && !inVoiceEvents.includes(event)\n\t).length;\n\n\tconst { voiceRugged } = measure.voices!.flat(1).reduce(\n\t\t(result, ei) => {\n\t\t\tif (!result.voiceRugged) {\n\t\t\t\tif (result.es.has(ei)) return { voiceRugged: true, es: result.es };\n\t\t\t}\n\n\t\t\tresult.es.add(ei);\n\n\t\t\treturn result;\n\t\t},\n\t\t{ voiceRugged: false, es: new Set() }\n\t);\n\n\tconst tickTwist = measure.tickTwist || 0;\n\n\tconst error =\n\t\tcorruptedVoiceEvent ||\n\t\ttickTwist >= 1 ||\n\t\ttickOverlapped ||\n\t\tvoiceRugged ||\n\t\tmeasure.tickRatesInStaves.some((rate) => rate < 0) ||\n\t\tnullEvents > 2 ||\n\t\t!measure.timeSignature ||\n\t\toverranged ||\n\t\tmeasure.duration > sigDuration ||\n\t\tmeasure.events.some((event) => event.timeWarp && event.timeWarp.numerator / event.timeWarp.denominator <= 0.5);\n\tconst perfect =\n\t\t!error &&\n\t\t!overDuration &&\n\t\ttickTwist < 0.2 &&\n\t\t!fractionalWarp &&\n\t\t!irregularWarps.size &&\n\t\t!irregularTick &&\n\t\t!spaceTime &&\n\t\t!surplusTime &&\n\t\t!!measure.voices!.length &&\n\t\t!beamBroken &&\n\t\t!graceInVoice &&\n\t\t!graceDominant &&\n\t\t(measure.duration === sigDuration || (Number.isFinite(measure.estimatedDuration) && measure.estimatedDuration <= sigDuration * 0.75));\n\tconst fine = !error && !overDuration && tickTwist < 0.3 && !fractionalWarp && !irregularTick && !surplusTime && !beamBroken && !graceInVoice;\n\n\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\tconst durationRate = measure.duration / expectDuration;\n\n\tlet qualityScore = 0;\n\tif (measure.patched && !corruptedVoiceEvent) qualityScore = 1;\n\telse if (!error) {\n\t\tconst spaceLoss = Math.tanh(Math.abs(spaceTime / Math.max(1, measure.voices.length)) * 1);\n\n\t\tlet expectDuration = Math.min(sigDuration, WHOLE_DURATION * 2);\n\t\tif (Number.isFinite(measure.estimatedDuration)) expectDuration = Math.max(0, Math.min(expectDuration, measure.estimatedDuration));\n\t\tconst durationLoss = expectDuration ? Math.max(0, 1 - durationRate) ** 2 : 0;\n\t\tconst warpsLoss = Math.tanh(irregularWarps.size);\n\n\t\tqualityScore = (1 - spaceLoss) * (1 - durationLoss) * (1 - warpsLoss) * (1 - tickTwist ** 2);\n\t}\n\n\treturn {\n\t\tevents,\n\t\tvalidEvents,\n\t\tvoiceRugged,\n\t\tnullEvents,\n\t\tfakeEvents,\n\t\twarpedEvents,\n\t\tcomplicatedTimewarp,\n\t\tspaceTime,\n\t\tsurplusTime,\n\t\tdurationRate,\n\t\tbeamBroken,\n\t\tfractionalWarp,\n\t\tirregularWarpsN: irregularWarps.size,\n\t\tirregularTick,\n\t\ttickTwist,\n\t\ttickOverlapped,\n\t\tgraceInVoice,\n\t\tgraceN,\n\t\tgraceDominant,\n\t\tperfect,\n\t\tfine,\n\t\terror,\n\t\tqualityScore,\n\t};\n};\n","import { SimpleClass } from '../starry/aux_/typedJSON';\n\nenum LayoutType {\n\tOrdinary = 'ordinary',\n\tFull = 'full',\n\tConservative = 'conservative',\n\tOnce = 'once',\n}\n\ninterface MeasureLayout {\n\tserialize(type: LayoutType): number[];\n\n\tseq: MeasureSeq;\n\tcode: string;\n}\n\nexport type MeasureSeq = MeasureLayout[];\n\nconst spreadMeasureSeq = (seq: MeasureSeq, type: LayoutType = LayoutType.Ordinary): number[] => [].concat(...seq.map((layout) => layout.serialize(type)));\n\nconst seqToCode = (seq: MeasureSeq, { withBrackets = false }: { withBrackets?: boolean } = {}): string => {\n\t//const code = seq.map(layout => layout.code).join(\", \");\n\tlet code = '';\n\tlet inRange = false;\n\n\tfor (let i = 0; i < seq.length; ++i) {\n\t\tconst middle = seq[i - 1] instanceof SingleMLayout && seq[i] instanceof SingleMLayout && seq[i + 1] instanceof SingleMLayout;\n\t\tif (middle) {\n\t\t\tif (!inRange) {\n\t\t\t\tcode += '..';\n\t\t\t\tinRange = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (i > 0 && !inRange) code += ', ';\n\n\t\t\tinRange = false;\n\n\t\t\tcode += seq[i].code;\n\t\t}\n\t}\n\n\treturn withBrackets ? `[${code}]` : code;\n};\n\nclass SingleMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'SingleMLayout';\n\n\tmeasure: number;\n\n\tstatic from(measure: number) {\n\t\tconst layout = new SingleMLayout();\n\t\tlayout.measure = measure;\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(): number[] {\n\t\treturn [this.measure];\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this];\n\t}\n\n\tget code(): string {\n\t\treturn this.measure.toString();\n\t}\n}\n\nclass BlockMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'BlockMLayout';\n\n\tseq: MeasureSeq;\n\n\tstatic trimSeq(seq: MeasureSeq): MeasureSeq {\n\t\tconst seq2 = [];\n\t\tfor (const layout of seq) {\n\t\t\tif (layout instanceof BlockMLayout) {\n\t\t\t\tfor (const sub of layout.seq) seq2.push(sub);\n\t\t\t} else seq2.push(layout);\n\t\t}\n\n\t\t// reduce duplicated or backwards single measures\n\t\tconst seq3 = [];\n\t\tlet measure = null;\n\t\tfor (const layout of seq2) {\n\t\t\tif (layout instanceof SingleMLayout) {\n\t\t\t\tif (layout.measure > measure) {\n\t\t\t\t\tseq3.push(layout);\n\t\t\t\t\tmeasure = layout.measure;\n\t\t\t\t}\n\t\t\t} else seq3.push(layout);\n\t\t}\n\n\t\treturn seq3;\n\t}\n\n\tstatic fromSeq(seq: MeasureSeq): BlockMLayout {\n\t\tconst layout = new BlockMLayout();\n\t\tlayout.seq = BlockMLayout.trimSeq(seq);\n\n\t\treturn layout;\n\t}\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\treturn spreadMeasureSeq(this.seq, type);\n\t}\n\n\tget code(): string {\n\t\treturn seqToCode(this.seq, { withBrackets: true });\n\t}\n}\n\nclass VoltaMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'VoltaMLayout';\n\n\ttimes: number;\n\tbody: MeasureSeq;\n\talternates: MeasureSeq[];\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst bodySeq = spreadMeasureSeq(this.body);\n\n\t\tif (this.alternates) {\n\t\t\tconst alternateSeqs = this.alternates.map((seq) => spreadMeasureSeq(seq));\n\t\t\tconst lastAlternateSeq = alternateSeqs[alternateSeqs.length - 1];\n\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\t\treturn bodySeq.concat(...alternateSeqs);\n\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Full: {\n\t\t\t\t\tconst priorSeq = [].concat(\n\t\t\t\t\t\t...Array(this.times - 1)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map((_, i) => [...bodySeq, ...alternateSeqs[i % (this.times - 1)]])\n\t\t\t\t\t);\n\n\t\t\t\t\treturn [...priorSeq, ...bodySeq, ...lastAlternateSeq];\n\t\t\t\t}\n\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn [...bodySeq, ...lastAlternateSeq];\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (type) {\n\t\t\t\tcase LayoutType.Ordinary:\n\t\t\t\tcase LayoutType.Conservative:\n\t\t\t\tcase LayoutType.Once:\n\t\t\t\t\treturn bodySeq;\n\n\t\t\t\tcase LayoutType.Full:\n\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t...Array(this.times)\n\t\t\t\t\t\t\t.fill(null)\n\t\t\t\t\t\t\t.map(() => bodySeq)\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconsole.warn('the current case not handled:', type, this);\n\t}\n\n\tget seq(): MeasureSeq {\n\t\tconst alternates = this.alternates ? this.alternates[this.alternates.length - 1] : [];\n\n\t\treturn [...this.body, ...alternates];\n\t}\n\n\tget code(): string {\n\t\tconst body = seqToCode(this.body, { withBrackets: true });\n\n\t\tlet code = `${this.times}*${body}`;\n\t\tif (this.alternates) code += '{' + this.alternates.map((seq) => seqToCode(seq, { withBrackets: seq.length > 1 })).join(', ') + '}';\n\n\t\treturn code;\n\t}\n}\n\nclass ABAMLayout extends SimpleClass implements MeasureLayout {\n\tstatic className = 'ABAMLayout';\n\n\tmain: MeasureLayout;\n\trest: MeasureSeq;\n\n\tconstructor(data: any = undefined) {\n\t\tsuper();\n\t\tthis.assign(data);\n\t}\n\n\tserialize(type: LayoutType): number[] {\n\t\tconst seqA = this.main.serialize(type);\n\t\tconst seqA_ = spreadMeasureSeq(this.main.seq, LayoutType.Once);\n\t\tconst seqB = spreadMeasureSeq(this.rest, type);\n\n\t\tswitch (type) {\n\t\t\tcase LayoutType.Ordinary: // A B\n\t\t\t\treturn [...seqA, ...seqB];\n\n\t\t\tcase LayoutType.Once: // B A'\n\t\t\t\treturn [...seqB, ...seqA_];\n\n\t\t\tcase LayoutType.Conservative: // A B A'\n\t\t\tcase LayoutType.Full: // A B A'\n\t\t\t\treturn [...seqA, ...seqB, ...seqA_];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('the current case not handled:', type, this);\n\t\t}\n\t}\n\n\tget seq(): MeasureSeq {\n\t\treturn [this.main, ...this.rest];\n\t}\n\n\tget code(): string {\n\t\treturn '<' + this.main.code + ', ' + seqToCode(this.rest) + '>';\n\t}\n}\n\nexport { LayoutType, MeasureLayout, SingleMLayout, BlockMLayout, VoltaMLayout, ABAMLayout };\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 13],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 15],\n\t\t$V3 = [1, 26],\n\t\t$V4 = [1, 29],\n\t\t$V5 = [1, 28],\n\t\t$V6 = [1, 30],\n\t\t$V7 = [5, 13, 22, 27, 29],\n\t\t$V8 = [2, 15],\n\t\t$V9 = [1, 32],\n\t\t$Va = [5, 14, 21, 22, 27, 28, 29];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tmeasure_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tindex_wise_measure_layout: 6,\n\t\t\t'i:': 7,\n\t\t\t's:': 8,\n\t\t\tsegment_wise_measure_layout: 9,\n\t\t\tiw_sequence: 10,\n\t\t\tiw_item: 11,\n\t\t\trange: 12,\n\t\t\t',': 13,\n\t\t\tUNSIGNED: 14,\n\t\t\t'..': 15,\n\t\t\tsingle: 16,\n\t\t\tiw_block_item: 17,\n\t\t\tiw_volta: 18,\n\t\t\tiw_aba: 19,\n\t\t\tiw_block: 20,\n\t\t\t'[': 21,\n\t\t\t']': 22,\n\t\t\t'*': 23,\n\t\t\tiw_optional_alternates: 24,\n\t\t\tiw_alternates: 25,\n\t\t\t'{': 26,\n\t\t\t'}': 27,\n\t\t\t'<': 28,\n\t\t\t'>': 29,\n\t\t\tsw_sequence: 30,\n\t\t\tsw_item: 31,\n\t\t\tsegment: 32,\n\t\t\tsw_block_item: 33,\n\t\t\tsw_volta: 34,\n\t\t\tsw_aba: 35,\n\t\t\tsw_block: 36,\n\t\t\tsw_optional_alternates: 37,\n\t\t\tsw_alternates: 38,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: {\n\t\t\t2: 'error',\n\t\t\t5: 'EOF',\n\t\t\t7: 'i:',\n\t\t\t8: 's:',\n\t\t\t13: ',',\n\t\t\t14: 'UNSIGNED',\n\t\t\t15: '..',\n\t\t\t21: '[',\n\t\t\t22: ']',\n\t\t\t23: '*',\n\t\t\t26: '{',\n\t\t\t27: '}',\n\t\t\t28: '<',\n\t\t\t29: '>',\n\t\t},\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[4, 2],\n\t\t\t[4, 2],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 3],\n\t\t\t[10, 3],\n\t\t\t[12, 3],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[11, 1],\n\t\t\t[16, 1],\n\t\t\t[17, 1],\n\t\t\t[20, 3],\n\t\t\t[18, 4],\n\t\t\t[24, 0],\n\t\t\t[24, 1],\n\t\t\t[25, 3],\n\t\t\t[19, 5],\n\t\t\t[9, 1],\n\t\t\t[30, 1],\n\t\t\t[30, 2],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[31, 1],\n\t\t\t[32, 1],\n\t\t\t[33, 1],\n\t\t\t[36, 3],\n\t\t\t[34, 4],\n\t\t\t[37, 0],\n\t\t\t[37, 1],\n\t\t\t[38, 3],\n\t\t\t[35, 4],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.$ = root(null, $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = root('index-wise', $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tthis.$ = root('segment-wise', serialize($$[$0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\tcase 23:\n\t\t\t\t\tif ($$[$0].length === 1 && $$[$0][0].__prototype === 'BlockMLayout') this.$ = $$[$0][0];\n\t\t\t\t\telse this.$ = blockLayout($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 6:\n\t\t\t\tcase 24:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 7:\n\t\t\t\tcase 11:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\tcase 14:\n\t\t\t\tcase 20:\n\t\t\t\tcase 27:\n\t\t\t\tcase 28:\n\t\t\t\tcase 29:\n\t\t\t\tcase 35:\n\t\t\t\t\tthis.$ = $$[$0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9:\n\t\t\t\t\tthis.$ = [...$$[$0 - 2], ...$$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 10:\n\t\t\t\t\tthis.$ = range($$[$0 - 2], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = singleLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\tcase 31:\n\t\t\t\t\tthis.$ = blockLayout($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 17:\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 18:\n\t\t\t\tcase 33:\n\t\t\t\t\tthis.$ = voltaBlock($$[$0 - 3], $$[$0 - 1], $$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 19:\n\t\t\t\tcase 34:\n\t\t\t\t\tthis.$ = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 36:\n\t\t\t\t\tthis.$ = alternates($$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 3], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\t\tthis.$ = blockLayout([$$[$0]]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 30:\n\t\t\t\t\tthis.$ = segment($$[$0]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37:\n\t\t\t\t\tthis.$ = abaBlock($$[$0 - 2], $$[$0 - 1]);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 6: 3, 7: [1, 4], 8: [1, 5], 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 17] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 6: 18, 10: 6, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 9: 19, 14: $V3, 21: $V4, 28: $V5, 30: 20, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 5: [2, 5], 13: $V6 },\n\t\t\to($V7, [2, 6]),\n\t\t\to($V7, [2, 7]),\n\t\t\to($V7, [2, 11]),\n\t\t\to($V7, [2, 12]),\n\t\t\to($V7, [2, 13]),\n\t\t\to($V7, [2, 14]),\n\t\t\to($V7, $V8, { 15: [1, 31], 23: $V9 }),\n\t\t\to($V7, [2, 16]),\n\t\t\t{ 11: 33, 14: [1, 34], 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 10: 35, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 1: [2, 1] },\n\t\t\t{ 5: [2, 3] },\n\t\t\t{ 5: [2, 4] },\n\t\t\t{ 5: [2, 23], 14: $V3, 21: $V4, 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 24]),\n\t\t\to($Va, [2, 26]),\n\t\t\to($Va, [2, 27]),\n\t\t\to($Va, [2, 28]),\n\t\t\to($Va, [2, 29]),\n\t\t\to($Va, [2, 30], { 23: [1, 37] }),\n\t\t\to($Va, [2, 31]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 31: 38, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 39, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 11: 40, 12: 41, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 14: [1, 42] },\n\t\t\t{ 20: 43, 21: $V1 },\n\t\t\t{ 13: [1, 44] },\n\t\t\t{ 13: $V8, 23: $V9 },\n\t\t\t{ 13: $V6, 22: [1, 45] },\n\t\t\to($Va, [2, 25]),\n\t\t\t{ 21: $V4, 36: 46 },\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 47, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\t{ 14: $V3, 21: $V4, 22: [1, 48], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 8]),\n\t\t\to($V7, [2, 9]),\n\t\t\to($V7, [2, 10]),\n\t\t\to($V7, [2, 19], { 24: 49, 25: 50, 26: [1, 51] }),\n\t\t\t{ 10: 52, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\to([5, 13, 22, 26, 27, 29], [2, 17]),\n\t\t\to($Va, [2, 34], { 37: 53, 38: 54, 26: [1, 55] }),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 29: [1, 56], 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to([5, 14, 21, 22, 26, 27, 28, 29], [2, 32]),\n\t\t\to($V7, [2, 18]),\n\t\t\to($V7, [2, 20]),\n\t\t\t{ 10: 57, 11: 7, 12: 8, 14: $V0, 16: 9, 17: 10, 18: 11, 19: 12, 20: 14, 21: $V1, 28: $V2 },\n\t\t\t{ 13: $V6, 29: [1, 58] },\n\t\t\to($Va, [2, 33]),\n\t\t\to($Va, [2, 35]),\n\t\t\t{ 14: $V3, 21: $V4, 28: $V5, 30: 59, 31: 21, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($Va, [2, 37]),\n\t\t\t{ 13: $V6, 27: [1, 60] },\n\t\t\to($V7, [2, 22]),\n\t\t\t{ 14: $V3, 21: $V4, 27: [1, 61], 28: $V5, 31: 36, 32: 22, 33: 23, 34: 24, 35: 25, 36: 27 },\n\t\t\to($V7, [2, 21]),\n\t\t\to($Va, [2, 36]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 17: [2, 1], 18: [2, 3], 19: [2, 4] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tconst root = (type, data) => ({ __prototype: 'MesaureLayout', type, data });\n\n\tconst singleLayout = (n) => ({ __prototype: 'SingleMLayout', measure: Number(n) });\n\tconst blockLayout = (seq) => ({ __prototype: 'BlockMLayout', seq });\n\tconst voltaBlock = (times, body, alternates) => ({ __prototype: 'VoltaMLayout', times: Number(times), body, alternates });\n\tconst abaBlock = (main, rest) => ({ __prototype: 'ABAMLayout', main, rest });\n\n\tconst segment = (n) => ({ segment: true, length: Number(n) });\n\n\tconst alternates = (items) =>\n\t\titems.map((item) => {\n\t\t\tif (item.__prototype === 'BlockMLayout') return item.seq;\n\n\t\t\treturn [item];\n\t\t});\n\n\tconst range = (start, end) => {\n\t\tstart = Number(start);\n\t\tend = Number(end);\n\n\t\tif (!(end >= start)) throw new Error(`invalid measure range: ${start}..${end}`);\n\n\t\treturn Array(end + 1 - start)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => singleLayout(start + i));\n\t};\n\n\tconst serializeSeq = (item, options) => {\n\t\tif (item.segment) {\n\t\t\tconst index = options.index;\n\t\t\toptions.index += item.length;\n\n\t\t\treturn Array(item.length)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => singleLayout(index + i));\n\t\t}\n\n\t\treturn [serialize(item, options)];\n\t};\n\n\tconst serialize = (item, options = { index: 1 }) => {\n\t\tconst speard = (seq) => [].concat(...seq.map((it) => serializeSeq(it, options)));\n\n\t\tswitch (item.__prototype) {\n\t\t\tcase 'BlockMLayout':\n\t\t\t\titem.seq = speard(item.seq);\n\n\t\t\t\tbreak;\n\t\t\tcase 'VoltaMLayout':\n\t\t\t\titem.body = speard(item.body);\n\t\t\t\titem.alternates = item.alternates && item.alternates.map(speard);\n\n\t\t\t\tbreak;\n\t\t\tcase 'ABAMLayout':\n\t\t\t\titem.main = serialize(item.main, options);\n\t\t\t\titem.rest = speard(item.rest);\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn item;\n\t};\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 14;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([*,\\[\\]<>{}]))/, /^(?:(([1-9])([0-9])*))/, /^(?:(([a-z])+):)/, /^(?:\\.\\.)/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3, 4, 5], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import type { MeasureLayout } from './measureLayout';\nimport * as measureLayout from './measureLayout';\nimport grammar from './grammar.jison';\nimport { recoverJSON } from '../starry/aux_/typedJSON';\n\nconst parseCode = (code: string): MeasureLayout => {\n\tconst raw = grammar.parse(code);\n\n\tif (raw?.data) return recoverJSON(raw.data, measureLayout);\n\n\treturn null;\n};\n\nexport { parseCode };\n","export interface RawItem {\n\tid: string;\n\tleftBounds: string[];\n\trightBounds: string[];\n\tconjunction: string;\n}\n\nexport enum StaffGroupType {\n\tDefault,\n\tBrace, // {}\n\tBracket, // <>\n\tSquare, // []\n}\n\nexport enum StaffConjunctionType {\n\tBlank,\n\tDashed,\n\tSolid,\n}\n\ntype StaffID = string;\n\nexport interface StaffGroup {\n\ttype: StaffGroupType;\n\tsubs?: StaffGroup[];\n\tstaff?: StaffID;\n\tlevel?: number;\n\tgrand?: boolean;\n}\n\ninterface StaffGroupTrait {\n\tgroup: StaffGroup;\n\trange: [number, number];\n\tkey: string;\n}\n\nconst singleGroup = (id: string) => ({ type: StaffGroupType.Default, staff: id });\n\nconst BOUNDS_TO_GROUPTYPE: { [bound: string]: StaffGroupType } = {\n\t'{': StaffGroupType.Brace,\n\t'}': StaffGroupType.Brace,\n\t'<': StaffGroupType.Bracket,\n\t'>': StaffGroupType.Bracket,\n\t'[': StaffGroupType.Square,\n\t']': StaffGroupType.Square,\n};\n\nconst OPEN_BOUNDS = '{<[';\nconst CLOSE_BOUNDS = '}>]';\n\nconst CONJUNCTIONS_MAP: { [conj: string]: StaffConjunctionType } = {\n\t',': StaffConjunctionType.Blank,\n\t'-': StaffConjunctionType.Solid,\n\t'.': StaffConjunctionType.Dashed,\n};\n\nconst bracketCode = (type: StaffGroupType, partial: boolean = false): ((inner: string) => string) => {\n\tif (type === StaffGroupType.Default) return (inner) => inner;\n\n\tif (partial) {\n\t\tswitch (type) {\n\t\t\tcase StaffGroupType.Brace:\n\t\t\t\treturn (inner) => `{${inner}`;\n\t\t\tcase StaffGroupType.Bracket:\n\t\t\t\treturn (inner) => `<${inner}`;\n\t\t\tcase StaffGroupType.Square:\n\t\t\t\treturn (inner) => `[${inner}`;\n\t\t\tdefault:\n\t\t\t\treturn (inner) => inner;\n\t\t}\n\t}\n\n\tswitch (type) {\n\t\tcase StaffGroupType.Brace:\n\t\t\treturn (inner) => `{${inner}}`;\n\t\tcase StaffGroupType.Bracket:\n\t\t\treturn (inner) => `<${inner}>`;\n\t\tcase StaffGroupType.Square:\n\t\t\treturn (inner) => `[${inner}]`;\n\t\tdefault:\n\t\t\treturn (inner) => inner;\n\t}\n};\n\nconst randomB64 = (): string => {\n\tconst code = btoa(Math.random().toString().substr(2)).replace(/=/g, '');\n\n\treturn code.split('').reverse().slice(0, 6).join('');\n};\n\nconst makeUniqueName = (set: Set, index: number, prefix?: string): string => {\n\tlet name = prefix;\n\tif (!name) name = index.toString();\n\telse if (set.has(name)) name += '_' + index.toString();\n\n\twhile (set.has(name)) name += '_' + randomB64();\n\n\treturn name;\n};\n\nconst makeGroupsFromRaw = (parent: StaffGroup, seq: string[]): string[] => {\n\tlet remains = seq;\n\twhile (remains.length) {\n\t\tconst word = remains.shift();\n\t\tconst bound = BOUNDS_TO_GROUPTYPE[word];\n\t\tif (bound) {\n\t\t\tif (CLOSE_BOUNDS.includes(word) && bound === parent.type) break;\n\n\t\t\tif (OPEN_BOUNDS.includes(word)) {\n\t\t\t\tconst group = { type: bound, level: Number.isFinite(parent.level) ? parent.level + 1 : 0 };\n\t\t\t\tremains = makeGroupsFromRaw(group, remains);\n\n\t\t\t\tparent.subs = parent.subs || [];\n\t\t\t\tparent.subs.push(group);\n\t\t\t}\n\t\t} else {\n\t\t\tparent.subs = parent.subs || [];\n\t\t\tparent.subs.push(singleGroup(word));\n\t\t}\n\t}\n\n\twhile (parent.type === StaffGroupType.Default && parent.subs && parent.subs.length === 1) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.type = sub.type;\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t\tparent.level = sub.level;\n\t}\n\n\twhile (parent.subs && parent.subs.length === 1 && parent.subs[0].type === StaffGroupType.Default) {\n\t\tconst sub = parent.subs[0];\n\t\tparent.subs = sub.subs;\n\t\tparent.staff = sub.staff;\n\t}\n\n\tparent.grand = parent.type === StaffGroupType.Brace && parent.subs && parent.subs.every((sub) => sub.staff);\n\n\treturn remains;\n};\n\nconst groupHead = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupHead(group.subs[0]);\n};\n\nconst groupTail = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return groupTail(group.subs[group.subs.length - 1]);\n};\n\nexport const groupKey = (group: StaffGroup): string => {\n\tif (group.staff) return group.staff;\n\telse if (group.subs) return `${groupHead(group)}-${groupTail(group)}`;\n};\n\nconst groupDict = (group: StaffGroup, dict: { [key: string]: StaffGroup }): void => {\n\tdict[groupKey(group)] = group;\n\n\tif (group.subs) group.subs.forEach((sub) => groupDict(sub, dict));\n};\n\nexport interface MaskedStaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroups: StaffGroupTrait[];\n}\n\nclass StaffLayout {\n\tstaffIds: string[];\n\tconjunctions: StaffConjunctionType[];\n\tgroup: StaffGroup;\n\tgroups: StaffGroupTrait[];\n\n\tmaskCache: Map;\n\n\tconstructor(raw: RawItem[]) {\n\t\t// make unique ids\n\t\tconst ids = new Set();\n\t\traw.forEach((item, i) => {\n\t\t\titem.id = makeUniqueName(ids, i + 1, item.id);\n\t\t\tids.add(item.id);\n\t\t});\n\t\tthis.staffIds = raw.map((item) => item.id);\n\t\tthis.conjunctions = raw.slice(0, raw.length - 1).map((item) => (item.conjunction ? CONJUNCTIONS_MAP[item.conjunction] : StaffConjunctionType.Blank));\n\n\t\t// make groups\n\t\tconst seq = [].concat(...raw.map((item) => [...item.leftBounds, item.id, ...item.rightBounds]));\n\t\tthis.group = { type: StaffGroupType.Default };\n\t\tmakeGroupsFromRaw(this.group, seq);\n\n\t\tconst dict = {};\n\t\tgroupDict(this.group, dict);\n\t\tthis.groups = Object.entries(dict).map(([key, group]) => {\n\t\t\tlet ids = key.split('-');\n\t\t\tif (ids.length === 1) ids = [ids[0], ids[0]];\n\t\t\tconst range = ids.map((id) => this.staffIds.indexOf(id));\n\n\t\t\treturn {\n\t\t\t\tgroup,\n\t\t\t\trange,\n\t\t\t\tkey,\n\t\t\t} as StaffGroupTrait;\n\t\t});\n\n\t\tthis.maskCache = new Map();\n\t}\n\n\tget stavesCount(): number {\n\t\tif (!this.staffIds) return null;\n\n\t\treturn this.staffIds.length;\n\t}\n\n\tget partGroups(): StaffGroupTrait[] {\n\t\tconst grands = this.groups.filter((g) => g.group.grand);\n\t\tconst parts = this.groups.filter((g) => {\n\t\t\tif (g.group.grand) return true;\n\n\t\t\tif (g.range[0] === g.range[1]) {\n\t\t\t\tconst index = g.range[0];\n\t\t\t\treturn !grands.some((g) => g.range[0] <= index && g.range[1] >= index);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn parts;\n\t}\n\n\tget standaloneGroups(): string[][] {\n\t\tconst groups: string[][] = [];\n\t\tconst collect = (group: StaffGroup): void => {\n\t\t\tif (group.grand) groups.push(group.subs.map((sub) => sub.staff));\n\t\t\telse if (group.staff) groups.push([group.staff]);\n\t\t\telse if (group.subs) group.subs.forEach((sub) => collect(sub));\n\t\t};\n\t\tcollect(this.group);\n\n\t\treturn groups;\n\t}\n\n\tconjunctionBetween(upStaff: number, downStaff: number): StaffConjunctionType {\n\t\tif (downStaff <= upStaff) return null;\n\n\t\tlet con = StaffConjunctionType.Solid;\n\t\tfor (let i = upStaff; i < downStaff; i++) con = Math.min(con, this.conjunctions[i]);\n\n\t\treturn con;\n\t}\n\n\tstatic makeMaskLayout(layout: StaffLayout, mask: number): MaskedStaffLayout {\n\t\tconst staffIds = layout.staffIds.filter((_, i) => mask & (1 << i));\n\t\tif (staffIds.length === layout.staffIds.length) {\n\t\t\treturn {\n\t\t\t\tstaffIds: layout.staffIds,\n\t\t\t\tconjunctions: layout.conjunctions,\n\t\t\t\tgroups: layout.groups,\n\t\t\t};\n\t\t}\n\n\t\tconst groups = layout.groups\n\t\t\t.map((g) => ({ ids: layout.staffIds.slice(g.range[0], g.range[1] + 1).filter((id) => staffIds.includes(id)), ...g }))\n\t\t\t.filter(({ ids }) => ids.length)\n\t\t\t.map(\n\t\t\t\t({ ids, ...g }) =>\n\t\t\t\t\t({\n\t\t\t\t\t\tkey: g.key,\n\t\t\t\t\t\tgroup: g.group,\n\t\t\t\t\t\trange: [staffIds.indexOf(ids[0]), staffIds.indexOf(ids[ids.length - 1])],\n\t\t\t\t\t} as StaffGroupTrait)\n\t\t\t);\n\n\t\tconst conjunctions = staffIds.slice(0, staffIds.length - 1).map((id, i) => {\n\t\t\tconst nextId = staffIds[i + 1];\n\t\t\treturn layout.conjunctionBetween(layout.staffIds.indexOf(id), layout.staffIds.indexOf(nextId));\n\t\t});\n\n\t\treturn {\n\t\t\tstaffIds,\n\t\t\tconjunctions,\n\t\t\tgroups,\n\t\t};\n\t}\n\n\tmask(mask: number): MaskedStaffLayout {\n\t\tif (!this.maskCache.get(mask)) this.maskCache.set(mask, StaffLayout.makeMaskLayout(this, mask));\n\n\t\treturn this.maskCache.get(mask);\n\t}\n\n\t// {,}\t*\t1,1\t\t=> {,}\n\t// {,}\t*\t1,x\t\t=> {\n\t// {,}\t*\t0,x\t\t=>\n\t// {,}\t*\t0,1\t\t=> {}\n\tpartialMaskCode(bits: (1 | 0)[], withIds = false): string {\n\t\ttype Attendance = 0 | 1 | null;\n\t\tconst staffStatus = this.staffIds\n\t\t\t.map((_, i) => (i < bits.length ? bits[i] : null))\n\t\t\t.reduce((status, x, i) => {\n\t\t\t\tstatus[this.staffIds[i]] = x;\n\t\t\t\treturn status;\n\t\t\t}, {} as { [id: string]: Attendance });\n\n\t\tconst joinGroup = (group: StaffGroup): [string, boolean] => {\n\t\t\tif (group.staff) return [staffStatus[group.staff] ? group.staff : null, staffStatus[group.staff] === null];\n\n\t\t\tconst subs = group.subs.map((sub) => joinGroup(sub));\n\t\t\tconst subStr = subs\n\t\t\t\t.map((pair) => pair[0])\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(',');\n\t\t\tconst partial = subs.some(([_, partial]) => partial);\n\n\t\t\tconst code = subStr ? bracketCode(group.type, partial)(subStr) : null;\n\n\t\t\treturn [code, partial];\n\t\t};\n\n\t\tlet [code] = joinGroup(this.group);\n\t\tcode = code || '';\n\t\tif (!withIds) code = code.replace(/[_\\w]+/g, '');\n\n\t\treturn code;\n\t}\n}\n\nexport default StaffLayout;\n","// @ts-nocheck\n/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function () {\n\tvar o = function (k, v, o, l) {\n\t\t\tfor (o = o || {}, l = k.length; l--; o[k[l]] = v);\n\t\t\treturn o;\n\t\t},\n\t\t$V0 = [1, 15],\n\t\t$V1 = [1, 16],\n\t\t$V2 = [1, 17],\n\t\t$V3 = [1, 11],\n\t\t$V4 = [1, 12],\n\t\t$V5 = [1, 13],\n\t\t$V6 = [1, 24],\n\t\t$V7 = [1, 25],\n\t\t$V8 = [1, 26],\n\t\t$V9 = [5, 11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Va = [15, 16, 17, 21, 22, 23, 24],\n\t\t$Vb = [11, 12, 13, 15, 16, 17, 21, 22, 23, 24],\n\t\t$Vc = [5, 11, 12, 13, 21, 22, 23, 24];\n\tvar parser = {\n\t\ttrace: function trace() {},\n\t\tyy: {},\n\t\tsymbols_: {\n\t\t\terror: 2,\n\t\t\tstart_symbol: 3,\n\t\t\tstaff_layout: 4,\n\t\t\tEOF: 5,\n\t\t\tseq: 6,\n\t\t\tseq_id: 7,\n\t\t\tseq_br: 8,\n\t\t\tseq_con: 9,\n\t\t\tbound_left: 10,\n\t\t\t'<': 11,\n\t\t\t'[': 12,\n\t\t\t'{': 13,\n\t\t\tbound_right: 14,\n\t\t\t'>': 15,\n\t\t\t']': 16,\n\t\t\t'}': 17,\n\t\t\tbound_lefts: 18,\n\t\t\tbound_rights: 19,\n\t\t\tconjunction: 20,\n\t\t\t'-': 21,\n\t\t\t',': 22,\n\t\t\t'.': 23,\n\t\t\tID: 24,\n\t\t\tseq_bl: 25,\n\t\t\t$accept: 0,\n\t\t\t$end: 1,\n\t\t},\n\t\tterminals_: { 2: 'error', 5: 'EOF', 11: '<', 12: '[', 13: '{', 15: '>', 16: ']', 17: '}', 21: '-', 22: ',', 23: '.', 24: 'ID' },\n\t\tproductions_: [\n\t\t\t0,\n\t\t\t[3, 2],\n\t\t\t[4, 1],\n\t\t\t[6, 0],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[6, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[10, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[14, 1],\n\t\t\t[18, 1],\n\t\t\t[18, 2],\n\t\t\t[19, 1],\n\t\t\t[19, 2],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[20, 1],\n\t\t\t[7, 1],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[7, 2],\n\t\t\t[25, 1],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[25, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 1],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t\t[9, 2],\n\t\t],\n\t\tperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n\t\t\t/* this == yyval */\n\n\t\t\tvar $0 = $$.length - 1;\n\t\t\tswitch (yystate) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t$$[$0].next();\n\n\t\t\t\t\tthis.$ = $$[$0].toJSON();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$ = new Seq();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13:\n\t\t\t\tcase 15:\n\t\t\t\t\tthis.$ = [$$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\tcase 16:\n\t\t\t\t\tthis.$ = [...$$[$0 - 1], $$[$0]];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 20:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.i($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 21:\n\t\t\t\tcase 23:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 22:\n\t\t\t\tcase 24:\n\t\t\t\t\t$$[$0 - 1].tip.i($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 25:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.bl($$[$0]);\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 26:\n\t\t\t\tcase 27:\n\t\t\t\t\t$$[$0 - 1].next();\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 28:\n\t\t\t\t\t$$[$0 - 1].tip.bl($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 29:\n\t\t\t\tcase 30:\n\t\t\t\tcase 31:\n\t\t\t\t\t$$[$0 - 1].tip.br($$[$0]);\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tthis.$ = new Seq();\n\t\t\t\t\tthis.$.tip.con($$[$0]);\n\t\t\t\t\tthis.$.next();\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 33:\n\t\t\t\tcase 34:\n\t\t\t\tcase 35:\n\t\t\t\tcase 36:\n\t\t\t\t\t$$[$0 - 1].tip.con($$[$0]);\n\t\t\t\t\t$$[$0 - 1].next();\n\n\t\t\t\t\tthis.$ = $$[$0 - 1];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\ttable: [\n\t\t\t{ 3: 1, 4: 2, 5: [2, 3], 6: 3, 7: 4, 8: 5, 9: 6, 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 10, 20: 9, 21: $V3, 22: $V4, 23: $V5, 24: [1, 7], 25: 8 },\n\t\t\t{ 1: [3] },\n\t\t\t{ 5: [1, 18] },\n\t\t\t{ 5: [2, 2] },\n\t\t\t{ 5: [2, 4], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 22, 19: 20, 20: 21, 21: $V3, 22: $V4, 23: $V5, 24: [1, 19] },\n\t\t\t{ 5: [2, 5], 10: 14, 11: $V0, 12: $V1, 13: $V2, 18: 29, 20: 28, 21: $V3, 22: $V4, 23: $V5, 24: [1, 27] },\n\t\t\t{ 5: [2, 6], 10: 14, 11: $V0, 12: $V1, 13: $V2, 14: 23, 15: $V6, 16: $V7, 17: $V8, 18: 33, 19: 31, 20: 32, 21: $V3, 22: $V4, 23: $V5, 24: [1, 30] },\n\t\t\to($V9, [2, 20]),\n\t\t\t{ 14: 23, 15: $V6, 16: $V7, 17: $V8, 19: 35, 20: 36, 21: $V3, 22: $V4, 23: $V5, 24: [1, 34] },\n\t\t\to($V9, [2, 32]),\n\t\t\to($Va, [2, 25], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 17]),\n\t\t\to($V9, [2, 18]),\n\t\t\to($V9, [2, 19]),\n\t\t\to($Vb, [2, 13]),\n\t\t\to($Vb, [2, 7]),\n\t\t\to($Vb, [2, 8]),\n\t\t\to($Vb, [2, 9]),\n\t\t\t{ 1: [2, 1] },\n\t\t\to($V9, [2, 21]),\n\t\t\to($Vc, [2, 29], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 33]),\n\t\t\to($Va, [2, 26], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 15]),\n\t\t\to($V9, [2, 10]),\n\t\t\to($V9, [2, 11]),\n\t\t\to($V9, [2, 12]),\n\t\t\to($V9, [2, 23]),\n\t\t\to($V9, [2, 35]),\n\t\t\to($Va, [2, 27], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 24]),\n\t\t\to($Vc, [2, 31], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 36]),\n\t\t\to($Va, [2, 28], { 10: 37, 11: $V0, 12: $V1, 13: $V2 }),\n\t\t\to($V9, [2, 22]),\n\t\t\to($Vc, [2, 30], { 14: 38, 15: $V6, 16: $V7, 17: $V8 }),\n\t\t\to($V9, [2, 34]),\n\t\t\to($Vb, [2, 14]),\n\t\t\to($V9, [2, 16]),\n\t\t],\n\t\tdefaultActions: { 3: [2, 2], 18: [2, 1] },\n\t\tparseError: function parseError(str, hash) {\n\t\t\tif (hash.recoverable) {\n\t\t\t\tthis.trace(str);\n\t\t\t} else {\n\t\t\t\tvar error = new Error(str);\n\t\t\t\terror.hash = hash;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tparse: function parse(input) {\n\t\t\tvar self = this,\n\t\t\t\tstack = [0],\n\t\t\t\ttstack = [],\n\t\t\t\tvstack = [null],\n\t\t\t\tlstack = [],\n\t\t\t\ttable = this.table,\n\t\t\t\tyytext = '',\n\t\t\t\tyylineno = 0,\n\t\t\t\tyyleng = 0,\n\t\t\t\trecovering = 0,\n\t\t\t\tTERROR = 2,\n\t\t\t\tEOF = 1;\n\t\t\tvar args = lstack.slice.call(arguments, 1);\n\t\t\tvar lexer = Object.create(this.lexer);\n\t\t\tvar sharedState = { yy: {} };\n\t\t\tfor (var k in this.yy) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n\t\t\t\t\tsharedState.yy[k] = this.yy[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tlexer.setInput(input, sharedState.yy);\n\t\t\tsharedState.yy.lexer = lexer;\n\t\t\tsharedState.yy.parser = this;\n\t\t\tif (typeof lexer.yylloc == 'undefined') {\n\t\t\t\tlexer.yylloc = {};\n\t\t\t}\n\t\t\tvar yyloc = lexer.yylloc;\n\t\t\tlstack.push(yyloc);\n\t\t\tvar ranges = lexer.options && lexer.options.ranges;\n\t\t\tif (typeof sharedState.yy.parseError === 'function') {\n\t\t\t\tthis.parseError = sharedState.yy.parseError;\n\t\t\t} else {\n\t\t\t\tthis.parseError = Object.getPrototypeOf(this).parseError;\n\t\t\t}\n\t\t\tfunction popStack(n) {\n\t\t\t\tstack.length = stack.length - 2 * n;\n\t\t\t\tvstack.length = vstack.length - n;\n\t\t\t\tlstack.length = lstack.length - n;\n\t\t\t}\n\t\t\t_token_stack: var lex = function () {\n\t\t\t\tvar token;\n\t\t\t\ttoken = lexer.lex() || EOF;\n\t\t\t\tif (typeof token !== 'number') {\n\t\t\t\t\ttoken = self.symbols_[token] || token;\n\t\t\t\t}\n\t\t\t\treturn token;\n\t\t\t};\n\t\t\tvar symbol,\n\t\t\t\tpreErrorSymbol,\n\t\t\t\tstate,\n\t\t\t\taction,\n\t\t\t\ta,\n\t\t\t\tr,\n\t\t\t\tyyval = {},\n\t\t\t\tp,\n\t\t\t\tlen,\n\t\t\t\tnewState,\n\t\t\t\texpected;\n\t\t\twhile (true) {\n\t\t\t\tstate = stack[stack.length - 1];\n\t\t\t\tif (this.defaultActions[state]) {\n\t\t\t\t\taction = this.defaultActions[state];\n\t\t\t\t} else {\n\t\t\t\t\tif (symbol === null || typeof symbol == 'undefined') {\n\t\t\t\t\t\tsymbol = lex();\n\t\t\t\t\t}\n\t\t\t\t\taction = table[state] && table[state][symbol];\n\t\t\t\t}\n\t\t\t\tif (typeof action === 'undefined' || !action.length || !action[0]) {\n\t\t\t\t\tvar errStr = '';\n\t\t\t\t\texpected = [];\n\t\t\t\t\tfor (p in table[state]) {\n\t\t\t\t\t\tif (this.terminals_[p] && p > TERROR) {\n\t\t\t\t\t\t\texpected.push(\"'\" + this.terminals_[p] + \"'\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (lexer.showPosition) {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t':\\n' +\n\t\t\t\t\t\t\tlexer.showPosition() +\n\t\t\t\t\t\t\t'\\nExpecting ' +\n\t\t\t\t\t\t\texpected.join(', ') +\n\t\t\t\t\t\t\t\", got '\" +\n\t\t\t\t\t\t\t(this.terminals_[symbol] || symbol) +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrStr =\n\t\t\t\t\t\t\t'Parse error on line ' +\n\t\t\t\t\t\t\t(yylineno + 1) +\n\t\t\t\t\t\t\t': Unexpected ' +\n\t\t\t\t\t\t\t(symbol == EOF ? 'end of input' : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tthis.parseError(errStr, {\n\t\t\t\t\t\ttext: lexer.match,\n\t\t\t\t\t\ttoken: this.terminals_[symbol] || symbol,\n\t\t\t\t\t\tline: lexer.yylineno,\n\t\t\t\t\t\tloc: yyloc,\n\t\t\t\t\t\texpected: expected,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (action[0] instanceof Array && action.length > 1) {\n\t\t\t\t\tthrow new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n\t\t\t\t}\n\t\t\t\tswitch (action[0]) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tstack.push(symbol);\n\t\t\t\t\t\tvstack.push(lexer.yytext);\n\t\t\t\t\t\tlstack.push(lexer.yylloc);\n\t\t\t\t\t\tstack.push(action[1]);\n\t\t\t\t\t\tsymbol = null;\n\t\t\t\t\t\tif (!preErrorSymbol) {\n\t\t\t\t\t\t\tyyleng = lexer.yyleng;\n\t\t\t\t\t\t\tyytext = lexer.yytext;\n\t\t\t\t\t\t\tyylineno = lexer.yylineno;\n\t\t\t\t\t\t\tyyloc = lexer.yylloc;\n\t\t\t\t\t\t\tif (recovering > 0) {\n\t\t\t\t\t\t\t\trecovering--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsymbol = preErrorSymbol;\n\t\t\t\t\t\t\tpreErrorSymbol = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tlen = this.productions_[action[1]][1];\n\t\t\t\t\t\tyyval.$ = vstack[vstack.length - len];\n\t\t\t\t\t\tyyval._$ = {\n\t\t\t\t\t\t\tfirst_line: lstack[lstack.length - (len || 1)].first_line,\n\t\t\t\t\t\t\tlast_line: lstack[lstack.length - 1].last_line,\n\t\t\t\t\t\t\tfirst_column: lstack[lstack.length - (len || 1)].first_column,\n\t\t\t\t\t\t\tlast_column: lstack[lstack.length - 1].last_column,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\t\tyyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n\t\t\t\t\t\tif (typeof r !== 'undefined') {\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (len) {\n\t\t\t\t\t\t\tstack = stack.slice(0, -1 * len * 2);\n\t\t\t\t\t\t\tvstack = vstack.slice(0, -1 * len);\n\t\t\t\t\t\t\tlstack = lstack.slice(0, -1 * len);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstack.push(this.productions_[action[1]][0]);\n\t\t\t\t\t\tvstack.push(yyval.$);\n\t\t\t\t\t\tlstack.push(yyval._$);\n\t\t\t\t\t\tnewState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n\t\t\t\t\t\tstack.push(newState);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t};\n\n\tclass Item {\n\t\tconstructor() {\n\t\t\tthis.id = null;\n\t\t\tthis.leftBounds = [];\n\t\t\tthis.rightBounds = [];\n\t\t\tthis.conjunction = null;\n\t\t}\n\n\t\ti(id) {\n\t\t\tthis.id = id;\n\t\t\treturn this;\n\t\t}\n\n\t\tbl(leftBounds) {\n\t\t\tthis.leftBounds = leftBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tbr(rightBounds) {\n\t\t\tthis.rightBounds = rightBounds;\n\t\t\treturn this;\n\t\t}\n\n\t\tcon(conjunction) {\n\t\t\tthis.conjunction = conjunction;\n\t\t\treturn this;\n\t\t}\n\t}\n\n\tclass Seq {\n\t\tconstructor() {\n\t\t\tthis.body = [];\n\t\t\tthis.tip = new Item();\n\t\t}\n\n\t\tnext() {\n\t\t\tthis.body.push(this.tip);\n\t\t\tthis.tip = new Item();\n\t\t\treturn this;\n\t\t}\n\n\t\ttoJSON() {\n\t\t\treturn this.body;\n\t\t}\n\t}\n\t/* generated by jison-lex 0.3.4 */\n\tvar lexer = (function () {\n\t\tvar lexer = {\n\t\t\tEOF: 1,\n\n\t\t\tparseError: function parseError(str, hash) {\n\t\t\t\tif (this.yy.parser) {\n\t\t\t\t\tthis.yy.parser.parseError(str, hash);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(str);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// resets the lexer, sets new input\n\t\t\tsetInput: function (input, yy) {\n\t\t\t\tthis.yy = yy || this.yy || {};\n\t\t\t\tthis._input = input;\n\t\t\t\tthis._more = this._backtrack = this.done = false;\n\t\t\t\tthis.yylineno = this.yyleng = 0;\n\t\t\t\tthis.yytext = this.matched = this.match = '';\n\t\t\t\tthis.conditionStack = ['INITIAL'];\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: 1,\n\t\t\t\t\tfirst_column: 0,\n\t\t\t\t\tlast_line: 1,\n\t\t\t\t\tlast_column: 0,\n\t\t\t\t};\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [0, 0];\n\t\t\t\t}\n\t\t\t\tthis.offset = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// consumes and returns one char from the input\n\t\t\tinput: function () {\n\t\t\t\tvar ch = this._input[0];\n\t\t\t\tthis.yytext += ch;\n\t\t\t\tthis.yyleng++;\n\t\t\t\tthis.offset++;\n\t\t\t\tthis.match += ch;\n\t\t\t\tthis.matched += ch;\n\t\t\t\tvar lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno++;\n\t\t\t\t\tthis.yylloc.last_line++;\n\t\t\t\t} else {\n\t\t\t\t\tthis.yylloc.last_column++;\n\t\t\t\t}\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range[1]++;\n\t\t\t\t}\n\n\t\t\t\tthis._input = this._input.slice(1);\n\t\t\t\treturn ch;\n\t\t\t},\n\n\t\t\t// unshifts one char (or a string) into the input\n\t\t\tunput: function (ch) {\n\t\t\t\tvar len = ch.length;\n\t\t\t\tvar lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n\t\t\t\tthis._input = ch + this._input;\n\t\t\t\tthis.yytext = this.yytext.substr(0, this.yytext.length - len);\n\t\t\t\t//this.yyleng -= len;\n\t\t\t\tthis.offset -= len;\n\t\t\t\tvar oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n\t\t\t\tthis.match = this.match.substr(0, this.match.length - 1);\n\t\t\t\tthis.matched = this.matched.substr(0, this.matched.length - 1);\n\n\t\t\t\tif (lines.length - 1) {\n\t\t\t\t\tthis.yylineno -= lines.length - 1;\n\t\t\t\t}\n\t\t\t\tvar r = this.yylloc.range;\n\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length\n\t\t\t\t\t\t: this.yylloc.first_column - len,\n\t\t\t\t};\n\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [r[0], r[0] + this.yyleng - len];\n\t\t\t\t}\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, caches matched text and appends it on next action\n\t\t\tmore: function () {\n\t\t\t\tthis._more = true;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n\t\t\treject: function () {\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\tthis._backtrack = true;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError(\n\t\t\t\t\t\t'Lexical error on line ' +\n\t\t\t\t\t\t\t(this.yylineno + 1) +\n\t\t\t\t\t\t\t'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' +\n\t\t\t\t\t\t\tthis.showPosition(),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// retain first n characters of the match\n\t\t\tless: function (n) {\n\t\t\t\tthis.unput(this.match.slice(n));\n\t\t\t},\n\n\t\t\t// displays already matched input, i.e. for error messages\n\t\t\tpastInput: function () {\n\t\t\t\tvar past = this.matched.substr(0, this.matched.length - this.match.length);\n\t\t\t\treturn (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays upcoming input, i.e. for error messages\n\t\t\tupcomingInput: function () {\n\t\t\t\tvar next = this.match;\n\t\t\t\tif (next.length < 20) {\n\t\t\t\t\tnext += this._input.substr(0, 20 - next.length);\n\t\t\t\t}\n\t\t\t\treturn (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, '');\n\t\t\t},\n\n\t\t\t// displays the character position where the lexing error occurred, i.e. for error messages\n\t\t\tshowPosition: function () {\n\t\t\t\tvar pre = this.pastInput();\n\t\t\t\tvar c = new Array(pre.length + 1).join('-');\n\t\t\t\treturn pre + this.upcomingInput() + '\\n' + c + '^';\n\t\t\t},\n\n\t\t\t// test the lexed token: return FALSE when not a match, otherwise return token\n\t\t\ttest_match: function (match, indexed_rule) {\n\t\t\t\tvar token, lines, backup;\n\n\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t// save context\n\t\t\t\t\tbackup = {\n\t\t\t\t\t\tyylineno: this.yylineno,\n\t\t\t\t\t\tyylloc: {\n\t\t\t\t\t\t\tfirst_line: this.yylloc.first_line,\n\t\t\t\t\t\t\tlast_line: this.last_line,\n\t\t\t\t\t\t\tfirst_column: this.yylloc.first_column,\n\t\t\t\t\t\t\tlast_column: this.yylloc.last_column,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyytext: this.yytext,\n\t\t\t\t\t\tmatch: this.match,\n\t\t\t\t\t\tmatches: this.matches,\n\t\t\t\t\t\tmatched: this.matched,\n\t\t\t\t\t\tyyleng: this.yyleng,\n\t\t\t\t\t\toffset: this.offset,\n\t\t\t\t\t\t_more: this._more,\n\t\t\t\t\t\t_input: this._input,\n\t\t\t\t\t\tyy: this.yy,\n\t\t\t\t\t\tconditionStack: this.conditionStack.slice(0),\n\t\t\t\t\t\tdone: this.done,\n\t\t\t\t\t};\n\t\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\t\tbackup.yylloc.range = this.yylloc.range.slice(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n\t\t\t\tif (lines) {\n\t\t\t\t\tthis.yylineno += lines.length;\n\t\t\t\t}\n\t\t\t\tthis.yylloc = {\n\t\t\t\t\tfirst_line: this.yylloc.last_line,\n\t\t\t\t\tlast_line: this.yylineno + 1,\n\t\t\t\t\tfirst_column: this.yylloc.last_column,\n\t\t\t\t\tlast_column: lines\n\t\t\t\t\t\t? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length\n\t\t\t\t\t\t: this.yylloc.last_column + match[0].length,\n\t\t\t\t};\n\t\t\t\tthis.yytext += match[0];\n\t\t\t\tthis.match += match[0];\n\t\t\t\tthis.matches = match;\n\t\t\t\tthis.yyleng = this.yytext.length;\n\t\t\t\tif (this.options.ranges) {\n\t\t\t\t\tthis.yylloc.range = [this.offset, (this.offset += this.yyleng)];\n\t\t\t\t}\n\t\t\t\tthis._more = false;\n\t\t\t\tthis._backtrack = false;\n\t\t\t\tthis._input = this._input.slice(match[0].length);\n\t\t\t\tthis.matched += match[0];\n\t\t\t\ttoken = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n\t\t\t\tif (this.done && this._input) {\n\t\t\t\t\tthis.done = false;\n\t\t\t\t}\n\t\t\t\tif (token) {\n\t\t\t\t\treturn token;\n\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t// recover context\n\t\t\t\t\tfor (var k in backup) {\n\t\t\t\t\t\tthis[k] = backup[k];\n\t\t\t\t\t}\n\t\t\t\t\treturn false; // rule action called reject() implying the next rule should be tested instead.\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// return next match in input\n\t\t\tnext: function () {\n\t\t\t\tif (this.done) {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t}\n\t\t\t\tif (!this._input) {\n\t\t\t\t\tthis.done = true;\n\t\t\t\t}\n\n\t\t\t\tvar token, match, tempMatch, index;\n\t\t\t\tif (!this._more) {\n\t\t\t\t\tthis.yytext = '';\n\t\t\t\t\tthis.match = '';\n\t\t\t\t}\n\t\t\t\tvar rules = this._currentRules();\n\t\t\t\tfor (var i = 0; i < rules.length; i++) {\n\t\t\t\t\ttempMatch = this._input.match(this.rules[rules[i]]);\n\t\t\t\t\tif (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n\t\t\t\t\t\tmatch = tempMatch;\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t\tif (this.options.backtrack_lexer) {\n\t\t\t\t\t\t\ttoken = this.test_match(tempMatch, rules[i]);\n\t\t\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\t\t\treturn token;\n\t\t\t\t\t\t\t} else if (this._backtrack) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tcontinue; // rule action called reject() implying a rule MISmatch.\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!this.options.flex) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (match) {\n\t\t\t\t\ttoken = this.test_match(match, rules[index]);\n\t\t\t\t\tif (token !== false) {\n\t\t\t\t\t\treturn token;\n\t\t\t\t\t}\n\t\t\t\t\t// else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (this._input === '') {\n\t\t\t\t\treturn this.EOF;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\ttoken: null,\n\t\t\t\t\t\tline: this.yylineno,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return next match that has a token\n\t\t\tlex: function lex() {\n\t\t\t\tvar r = this.next();\n\t\t\t\tif (r) {\n\t\t\t\t\treturn r;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.lex();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n\t\t\tbegin: function begin(condition) {\n\t\t\t\tthis.conditionStack.push(condition);\n\t\t\t},\n\n\t\t\t// pop the previously active lexer condition state off the condition stack\n\t\t\tpopState: function popState() {\n\t\t\t\tvar n = this.conditionStack.length - 1;\n\t\t\t\tif (n > 0) {\n\t\t\t\t\treturn this.conditionStack.pop();\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditionStack[0];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// produce the lexer rule set which is active for the currently active lexer condition state\n\t\t\t_currentRules: function _currentRules() {\n\t\t\t\tif (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n\t\t\t\t\treturn this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n\t\t\t\t} else {\n\t\t\t\t\treturn this.conditions['INITIAL'].rules;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n\t\t\ttopState: function topState(n) {\n\t\t\t\tn = this.conditionStack.length - 1 - Math.abs(n || 0);\n\t\t\t\tif (n >= 0) {\n\t\t\t\t\treturn this.conditionStack[n];\n\t\t\t\t} else {\n\t\t\t\t\treturn 'INITIAL';\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// alias for begin(condition)\n\t\t\tpushState: function pushState(condition) {\n\t\t\t\tthis.begin(condition);\n\t\t\t},\n\n\t\t\t// return the number of states currently on the stack\n\t\t\tstateStackSize: function stateStackSize() {\n\t\t\t\treturn this.conditionStack.length;\n\t\t\t},\n\t\t\toptions: {},\n\t\t\tperformAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\t\t\t\tvar YYSTATE = YY_START;\n\t\t\t\tswitch ($avoiding_name_collisions) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\treturn yy_.yytext;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn 24;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn 5;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\trules: [/^(?:\\s+)/, /^(?:([-,.\\[\\]<>{}]))/, /^(?:([a-zA-Z_0-9]+))/, /^(?:$)/],\n\t\t\tconditions: { INITIAL: { rules: [0, 1, 2, 3], inclusive: true } },\n\t\t};\n\t\treturn lexer;\n\t})();\n\tparser.lexer = lexer;\n\tfunction Parser() {\n\t\tthis.yy = {};\n\t}\n\tParser.prototype = parser;\n\tparser.Parser = Parser;\n\treturn new Parser();\n})();\n\n// if (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexport { parser };\nexport var Parser = parser.Parser;\nexport var parse = function () {\n\treturn parser.parse.apply(parser, arguments);\n};\nexport default { parser: parser, Parser: parser.Parser, parse: parse };\n","import StaffLayout from './staffLayout';\nimport grammar from './grammar.jison';\n\nconst parseCode = (code: string): StaffLayout => {\n\tconst raw = grammar.parse(code);\n\n\treturn new StaffLayout(raw);\n};\n\nexport { parseCode };\n","//import { staffSvg } from \"@kelvinnxu/lotus\";\n\nimport { SemanticType, SemanticPoint, /*glyphSemanticMapping, glyphCenters,*/ SYSTEM_SEMANTIC_TYPES, Point } from './semanticPoint';\nimport { SimpleClass } from './aux_/typedJSON';\n\nclass SemanticGraph extends SimpleClass {\n\tstatic className = 'SemanticGraph';\n\n\tpoints: SemanticPoint[];\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\t/*static fromSheetStaff(staff: staffSvg.SheetStaff, hashTable: {[key: string]: any}): SemanticGraph {\n\t\tconst tokens = [].concat(...staff.measures.map(measure => measure.tokens));\n\n\t\tconst voltaRightXs = [];\n\n\t\tconst points = [];\n\t\ttokens.forEach(token => {\n\t\t\tconst def = hashTable[token.hash];\n\n\t\t\tif (token.glyph) {\n\t\t\t\tconst glyph = token.glyph as string;\n\t\t\t\tlet semantic = null;\n\n\t\t\t\tconst isKey = /^\\\\key/.test(token.source) || token.is(\"KEY\");\n\t\t\t\tlet { x: cx = 0, y: cy = 0 } = glyphCenters[glyph] || { x: 0, y: 0 };\n\t\t\t\tif (token.scale2) {\n\t\t\t\t\tcx *= token.scale2.x;\n\t\t\t\t\tcy *= token.scale2.y;\n\t\t\t\t}\n\n\t\t\t\tlet x = token.x + cx;\n\t\t\t\tconst y = token.y + cy;\n\n\t\t\t\tswitch (glyph) {\n\t\t\t\tcase \"rests.0\":\n\t\t\t\t\tif (/^R/.test(token.source))\n\t\t\t\t\t\tsemantic = \"Rest0W\";\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Rest0\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.flat\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.natural\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accidentals.sharp\":\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t\tif (isKey) {\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.KeyAcc,\n\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"dots.dot\":\n\t\t\t\t\tif (token.is(\"VOLTA\")) {\n\t\t\t\t\t\tx += 0.24;\t// dot glyph center X offset\n\t\t\t\t\t\tif (token.is(\"LEFT\"))\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaLeft;\n\t\t\t\t\t\telse if (token.is(\"RIGHT\")) {\n\t\t\t\t\t\t\tvoltaRightXs.push(x);\n\t\t\t\t\t\t\tsemantic = SemanticType.VoltaRight;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsemantic = \"Dot\";\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"zero\":\n\t\t\t\tcase \"one\":\n\t\t\t\tcase \"two\":\n\t\t\t\tcase \"three\":\n\t\t\t\tcase \"four\":\n\t\t\t\tcase \"five\":\n\t\t\t\tcase \"six\":\n\t\t\t\tcase \"seven\":\n\t\t\t\tcase \"eight\":\n\t\t\t\tcase \"nine\": {\n\t\t\t\t\tconst upper = glyph[0].toUpperCase() + glyph.substr(1);\n\t\t\t\t\tsemantic = token.is(\"TIME_SIG\") ? \"Timesig\" + upper : upper;\n\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsemantic = glyphSemanticMapping[glyph];\n\t\t\t\t}\n\n\t\t\t\tif (semantic) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (token.is(\"TEMPO_NOTEHEAD\")) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.TempoNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// grace noteheads\n\t\t\t\tif (token.is(\"NOTEHEAD\") && Number.isFinite(token.scale) && token.scale < 0.75) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.GraceNotehead,\n\t\t\t\t\t\tx,\n\t\t\t\t\t\ty,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// semantic from token symbol\n\t\t\tlet semantic = null;\n\t\t\tconst cx = 0;\n\t\t\tlet cy = 0;\n\t\t\tif (token.is(\"OCTAVE\")) {\n\t\t\t\tif (token.is(\"_8\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift8;\n\t\t\t\t\tcy = token.is(\"B\") ? -0.7512 : -0.7256;\n\t\t\t\t}\n\t\t\t\telse if (token.is(\"CLOSE\")) {\n\t\t\t\t\tsemantic = SemanticType.OctaveShift0;\n\t\t\t\t\tcy = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (/^flags/.test(token.glyph)) {\n\t\t\t\tlet direction = 0;\n\t\t\t\tif (/\\.u\\d/.test(token.glyph))\n\t\t\t\t\tdirection = 1;\n\t\t\t\tif (/\\.d\\d/.test(token.glyph))\n\t\t\t\t\tdirection = -1;\n\t\t\t\tif (direction) {\n\t\t\t\t\tconst [n] = token.glyph.match(/\\d+/);\n\t\t\t\t\tconst flagCount = Number(n) - 2;\n\t\t\t\t\t//console.log(\"flags:\", token.glyph, flagCount);\n\t\t\t\t\tfor (let i = 0; i < flagCount; ++i) {\n\t\t\t\t\t\tconst y = token.y + (i + 0.5) * direction;\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//console.log(\"flags.1:\", token.x, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"SLUR\")) {\n\t\t\t\tconst d = def && def.d;\n\t\t\t\tif (d) {\n\t\t\t\t\tconst numbers = d.match(/-?[\\d.]+/g).map(Number);\n\t\t\t\t\t//console.log(\"slur:\", numbers);\n\t\t\t\t\tconst x1 = token.x + numbers[0];\n\t\t\t\t\tconst y1 = token.y + numbers[1];\n\t\t\t\t\tconst x2 = token.x + numbers[6];\n\t\t\t\t\tconst y2 = token.y + numbers[7];\n\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurBegin,\n\t\t\t\t\t\tx: x1,\n\t\t\t\t\t\ty: y1,\n\t\t\t\t\t});\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.SlurEnd,\n\t\t\t\t\t\tx: x2,\n\t\t\t\t\t\ty: y2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (token.is(\"NOTE_STEM\")) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.vline_Stem,\n\t\t\t\t\tx: token.x + def.width / 2,\n\t\t\t\t\ty: token.y,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: token.y,\n\t\t\t\t\t\ty2: token.y + token.height,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (token.is(\"TEXT\") || token.is(\"CHORD_TEXT\")) {\n\t\t\t\tif (/\\S/.test(token.text)) {\n\t\t\t\t\t// NOTE: text rect computation is delayed to sheet rendering\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\tindex: token.index,\n\t\t\t\t\t\t\ttext: token.text,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx: token.x + cx,\n\t\t\t\t\ty: token.y + cy,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// beams\n\t\tconst stems = tokens.filter(token => token.is(\"NOTE_STEM\")).map(stem => ({\n\t\t\tx: stem.x + stem.width / 2,\n\t\t\ty1: stem.y,\n\t\t\ty2: stem.y + stem.height,\n\t\t}));\n\t\tconst beams = tokens.filter(token => token.is(\"NOTETAIL\") && token.is(\"JOINT\"))\n\t\t\t.map(beam => {\n\t\t\t\tconst def = hashTable[beam.hash];\n\t\t\t\tconst points = def && def.points;\n\t\t\t\tif (points) {\n\t\t\t\t\tconst floats = points.split(\" \").map(Number);\n\t\t\t\t\tconst x1 = beam.x + floats[4];\n\t\t\t\t\tconst x2 = beam.x + floats[0];\n\t\t\t\t\tconst y1 = beam.y + (floats[5] + floats[7]) / 2;\n\t\t\t\t\tconst y2 = beam.y + (floats[1] + floats[3]) / 2;\n\t\t\t\t\tconst k = (y2 - y1) / (x2 - x1);\n\n\t\t\t\t\treturn { x1, x2, y1, y2, k, capital: beam.is(\"CAPITAL_BEAM\") };\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}).filter(Boolean);\n\t\t//console.log(\"beams:\", beams);\n\t\tbeams.forEach(beam => {\n\t\t\tconst innerStems = stems.filter(stem => stem.x > beam.x1 - 0.2 && stem.x < beam.x2 + 0.2);\n\t\t\t//console.log(\"innerStems:\", beam, innerStems);\n\n\t\t\tlet lines = 0;\n\t\t\tinnerStems.forEach(stem => {\n\t\t\t\tconst beamY = beam.y1 + (stem.x - beam.x1) * beam.k;\n\t\t\t\t//console.log(\"beamY:\", beamY, Math.min(Math.abs(beamY - beam.y1), Math.abs(beamY - beam.y2)));\n\t\t\t\tif (beamY >= stem.y1 - 0.1 && beamY <= stem.y2 + 0.1) {\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tsemantic: SemanticType.Flag3,\n\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t});\n\n\t\t\t\t\t++lines;\n\n\t\t\t\t\t// beam semantics\n\t\t\t\t\tif (beam.capital) {\n\t\t\t\t\t\tlet semantic = SemanticType.BeamContinue;\n\t\t\t\t\t\tif (Math.abs(stem.x - beam.x1) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamLeft;\n\t\t\t\t\t\telse if (Math.abs(stem.x - beam.x2) < 0.2)\n\t\t\t\t\t\t\tsemantic = SemanticType.BeamRight;\n\n\t\t\t\t\t\tpoints.push({\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x,\n\t\t\t\t\t\t\ty: beamY,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!lines)\n\t\t\t\tconsole.warn(\"empty beam:\", beam, innerStems, stems);\n\t\t\t//else if (lines < 2)\n\t\t\t//\tconsole.debug(\"single beam:\", beam, innerStems, stems);\n\t\t});\n\n\t\t// wedges (crescendo & decrescendo)\n\t\tconst crescendos = tokens.filter(token => token.is(\"WEDGE CRESCENDO TOP\"));\n\t\tconst crescendoBottoms = tokens.filter(token => token.is(\"WEDGE CRESCENDO BOTTOM\"));\n\t\tconst decrescendos = tokens.filter(token => token.is(\"WEDGE DECRESCENDO TOP\"));\n\t\tconst decrescendoBottoms = tokens.filter(token => token.is(\"WEDGE DECRESCENDO BOTTOM\"));\n\t\tcrescendos.forEach(line => {\n\t\t\tconst partner = crescendoBottoms.find(b => b.x === line.x && Math.abs(b.y - line.y) < 0.06);\n\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.CrescendoBegin,\n\t\t\t\t\tx: line.x,\n\t\t\t\t\ty: line.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired crescendo:\", line, crescendoBottoms);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.CrescendoEnd,\n\t\t\t\tx: line.x + line.target.x,\n\t\t\t\ty: line.y + line.target.y,\n\t\t\t});\n\t\t});\n\t\tdecrescendos.forEach(line => {\n\t\t\tconst partner = decrescendoBottoms.find(b => b.x + b.target.x === line.x + line.target.x && Math.abs(b.y + b.target.y - (line.y + line.target.y)) < 0.06);\n\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.DecrescendoBegin,\n\t\t\t\tx: line.x,\n\t\t\t\ty: line.y,\n\t\t\t});\n\t\t\tif (partner) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic: SemanticType.DecrescendoEnd,\n\t\t\t\t\tx: line.x + line.target.x,\n\t\t\t\t\ty: line.y + line.target.y,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.log(\"unpaired decrescendo:\", line, decrescendoBottoms);\n\t\t});\n\n\t\t// TODO: volta alternative\n\n\t\t// measure bars\n\t\tconst measureSeparators = staff.tokens.filter(token => token.is(\"MEASURE_SEPARATOR\"));\n\t\tconst singleBars = [];\n\t\tconst groupBars = [];\n\n\t\tfor (let i = 0; i < measureSeparators.length; ++i) {\n\t\t\tconst bar = measureSeparators[i];\n\t\t\tconst nextBar = measureSeparators[i + 1];\n\t\t\tconst inteval = nextBar ? nextBar.x - bar.x : Infinity;\n\n\t\t\tif (inteval < 1) {\n\t\t\t\tgroupBars.push([bar, nextBar]);\n\t\t\t\t++i;\n\t\t\t}\n\t\t\telse\n\t\t\t\tsingleBars.push(bar);\n\t\t};\n\t\t//console.log(\"bars:\", singleBars, groupBars);\n\n\t\tsingleBars.forEach(bar => {\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx: bar.x + bar.sw / 2,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tgroupBars.forEach(group => {\n\t\t\tlet x = (group[0].x + group[1].x) / 2;\n\t\t\tconst bold0 = group[0].is(\"BOLD\");\n\t\t\tconst bold1 = group[1].is(\"BOLD\");\n\n\t\t\tlet semantic = null;\n\t\t\tif (!bold0 && bold1) {\n\t\t\t\tx = group[0].x;\n\n\t\t\t\tif (!voltaRightXs.some(vx => x - vx < 2))\n\t\t\t\t\tsemantic = SemanticType.vline_BarTerminal;\n\t\t\t}\n\t\t\telse if (bold0 && !bold1)\n\t\t\t\tx = group[1].x;\n\t\t\telse if (!bold0 && !bold1)\n\t\t\t\tsemantic = SemanticType.vline_BarSegment;\n\n\t\t\t//console.log(\"group:\", group[0].x, group[1].x, x);\n\t\t\tpoints.push({\n\t\t\t\tsemantic: SemanticType.vline_BarMeasure,\n\t\t\t\tx,\n\t\t\t\ty: 0,\n\t\t\t\textension: {\n\t\t\t\t\ty1: -2,\n\t\t\t\t\ty2: 2,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (semantic) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tsemantic,\n\t\t\t\t\tx,\n\t\t\t\t\ty: 0,\n\t\t\t\t\textension: {\n\t\t\t\t\t\ty1: -2,\n\t\t\t\t\t\ty2: 2,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}*/\n\n\tstatic fromPoints(points: SemanticPoint[] = []): SemanticGraph {\n\t\tconst graph = new SemanticGraph();\n\t\tgraph.points = points;\n\n\t\treturn graph;\n\t}\n\n\tgetLayer(semantic: SemanticType): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic);\n\t}\n\n\tgetConfidentLayer(semantic: SemanticType, threshold: number): Point[] {\n\t\treturn this.points.filter((p) => p.semantic === semantic && (!Number.isFinite(p.confidence) || p.confidence >= threshold));\n\t}\n\n\tgetSystemPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\tgetStaffPoints(): SemanticPoint[] {\n\t\treturn this.points.filter((point) => !SYSTEM_SEMANTIC_TYPES.includes(point.semantic));\n\t}\n\n\toffset(x: number, y: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x += x;\n\t\t\tpoint.y += y;\n\t\t});\n\t}\n\n\tscale(factor: number): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tpoint.x *= factor;\n\t\t\tpoint.y *= factor;\n\t\t});\n\t}\n\n\t// multipy 3x2 matrix\n\ttransform(matrix: [number, number][]): void {\n\t\tthis.points.forEach((point) => {\n\t\t\tlet x = point.x * matrix[0][0] + point.y * matrix[1][0] + matrix[2][0];\n\t\t\tconst y = point.x * matrix[0][1] + point.y * matrix[1][1] + matrix[2][1];\n\n\t\t\tif (point.extension) {\n\t\t\t\tif (Number.isFinite(point.extension.y1)) {\n\t\t\t\t\tconst y1 = point.x * matrix[0][1] + point.extension.y1 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tconst y2 = point.x * matrix[0][1] + point.extension.y2 * matrix[1][1] + matrix[2][1];\n\t\t\t\t\tx = point.x * matrix[0][0] + (point.extension.y1 + point.extension.y2) * 0.5 * matrix[1][0] + matrix[2][0];\n\n\t\t\t\t\tpoint.extension.y1 = y1;\n\t\t\t\t\tpoint.extension.y2 = y2;\n\t\t\t\t}\n\n\t\t\t\tif (Number.isFinite(point.extension.width)) {\n\t\t\t\t\tconst scaling = Math.sqrt(matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);\n\t\t\t\t\tpoint.extension.width *= scaling;\n\t\t\t\t\tpoint.extension.height *= scaling;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpoint.x = x;\n\t\t\tpoint.y = y;\n\t\t});\n\t}\n}\n\nexport { SemanticGraph };\n","import { SimpleClass } from './aux_/typedJSON';\nimport {\n\tAdditionalLineStack,\n\tChordColumn,\n\tChordRect,\n\tEventFeature,\n\tEventMeasureColumn,\n\tEventSystem,\n\tPageLayout,\n\tRect,\n\tSourceImageFile,\n\tTextType,\n\tVLine,\n} from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { SemanticGraph } from './semanticGraph';\nimport { hashPageSemanticPoint, hashSemanticPoint, NOTEHEAD_WIDTHS, SemanticPoint, SemanticType } from './semanticPoint';\nimport { AccessoryDirection, ContextedTerm, ContextType, EventTerm, GraceType, MarkTerm, TempoTerm, TremoloLink } from './term';\nimport {\n\tTextToken,\n\tToken,\n\tTokenAccessories,\n\tTokenBeams,\n\tTokenClefs,\n\tTokenDirectionless,\n\tTokenDots,\n\tTokenFlags,\n\tTokenNoteheads,\n\tTokenRests,\n\tTokenTimesigs,\n\tTokenType,\n\tTOKEN_Y_FIXED,\n\tTOKEN_Y_ROUND,\n} from './token';\nimport { distance2D, roundNumber, solveOverlapping, trans23 } from './utils';\n\ntype ChordsFeeder = (si: number, mi: number) => ChordColumn[];\ntype ColumnProcessor = (column: EventMeasureColumn) => EventMeasureColumn;\n\nconst CHORD_X_TOLERANCE = 0.2;\n//const EVENT_X_TOLERANCE = 0.8;\n\nconst STEM_LENGTH_MAX = 6;\n\nconst INDENT_THRESHOLD = 2;\n\nconst MEASURE_SEMANTICS = [\n\tSemanticType.ClefG,\n\tSemanticType.ClefF,\n\tSemanticType.ClefC,\n\tSemanticType.TimesigC44,\n\tSemanticType.TimesigC22,\n\tSemanticType.TimesigZero,\n\tSemanticType.TimesigOne,\n\tSemanticType.TimesigTwo,\n\tSemanticType.TimesigThree,\n\tSemanticType.TimesigFour,\n\tSemanticType.TimesigFive,\n\tSemanticType.TimesigSix,\n\tSemanticType.TimesigSeven,\n\tSemanticType.TimesigEight,\n\tSemanticType.TimesigNine,\n\tSemanticType.OctaveShift8va,\n\tSemanticType.OctaveShift8vb,\n\tSemanticType.OctaveShift0,\n\tSemanticType.Zero,\n\tSemanticType.One,\n\tSemanticType.Two,\n\tSemanticType.Three,\n\tSemanticType.Four,\n\tSemanticType.Five,\n\tSemanticType.Six,\n\tSemanticType.Seven,\n\tSemanticType.Eight,\n\tSemanticType.Nine,\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n\tSemanticType.Rest0W,\n\tSemanticType.RestM1,\n\tSemanticType.SlurBegin,\n\tSemanticType.SlurEnd,\n\tSemanticType.Dot,\n\tSemanticType.f,\n\tSemanticType.p,\n\tSemanticType.m,\n\tSemanticType.n,\n\tSemanticType.r,\n\tSemanticType.s,\n\tSemanticType.z,\n\tSemanticType.ScriptFermata,\n\tSemanticType.ScriptShortFermata,\n\tSemanticType.ScriptSforzato,\n\tSemanticType.ScriptStaccato,\n\tSemanticType.ScriptStaccatissimo,\n\tSemanticType.ScriptTurn,\n\tSemanticType.ScriptTrill,\n\tSemanticType.ScriptSegno,\n\tSemanticType.ScriptCoda,\n\tSemanticType.ScriptArpeggio,\n\tSemanticType.ScriptPrall,\n\tSemanticType.ScriptMordent,\n\tSemanticType.ScriptMarcato,\n\tSemanticType.ScriptTenuto,\n\tSemanticType.ScriptPortato,\n\tSemanticType.PedalStar,\n\tSemanticType.PedalPed,\n\tSemanticType.GraceNotehead,\n\tSemanticType.BeamLeft,\n\tSemanticType.BeamRight,\n\tSemanticType.BeamContinue,\n\tSemanticType.CrescendoBegin,\n\tSemanticType.CrescendoEnd,\n\tSemanticType.DecrescendoBegin,\n\tSemanticType.DecrescendoEnd,\n\tSemanticType.TremoloLeft,\n\tSemanticType.TremoloRight,\n\tSemanticType.TremoloMiddle,\n];\n\nconst STAFF_LINED_SEMANTICS = [\n\tSemanticType.AccNatural,\n\tSemanticType.AccSharp,\n\tSemanticType.AccDoublesharp,\n\tSemanticType.AccFlat,\n\tSemanticType.AccFlatflat,\n\tSemanticType.NoteheadS0,\n\tSemanticType.NoteheadS1,\n\tSemanticType.NoteheadS2,\n\tSemanticType.NoteheadS1stemU,\n\tSemanticType.NoteheadS1stemD,\n\tSemanticType.NoteheadS2stemU,\n\tSemanticType.NoteheadS2stemD,\n];\n\nconst LINED_INTERVAL_SEMANTICS = [SemanticType.SignLined, SemanticType.SignInterval];\n\nconst NOTEHEAD_FOR_STEM_SEMANTICS = [SemanticType.NoteheadS1, SemanticType.NoteheadS2];\n\nconst KEYACC_CANDIDATE_SEMANTICS = {\n\tAccSharp: TokenType.KeySharp,\n\tAccNatural: TokenType.KeyNatural,\n\tAccFlat: TokenType.KeyFlat,\n};\n\nconst NOTEHEAD_TABLE: { [key: string]: { [key: string]: SemanticType } } = {\n\t[SemanticType.NoteheadS1]: {\n\t\tup: SemanticType.NoteheadS1stemU,\n\t\tdown: SemanticType.NoteheadS1stemD,\n\t},\n\t[SemanticType.NoteheadS2]: {\n\t\tup: SemanticType.NoteheadS2stemU,\n\t\tdown: SemanticType.NoteheadS2stemD,\n\t},\n};\n\nconst REST_SEMANTICS = [\n\tSemanticType.Rest0,\n\tSemanticType.Rest1,\n\tSemanticType.Rest2,\n\tSemanticType.Rest3,\n\tSemanticType.Rest4,\n\tSemanticType.Rest5,\n\tSemanticType.Rest6,\n];\n\nconst TOKEN_TO_STEMBEAM = {\n\t[TokenType.BeamLeft]: 'Open',\n\t[TokenType.BeamRight]: 'Close',\n\t[TokenType.BeamContinue]: 'Continue',\n};\n\nconst TEXT_TYPE_ALIAS = {\n\tAlter1: TextType.Alternation1,\n\tAlter2: TextType.Alternation2,\n};\n\ninterface StaffPosition {\n\ty: number;\n\tradius: number;\n}\n\ninterface TextArea {\n\tscore: number;\n\tcx: number;\n\tcy: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\ttype: string;\n\ttheta: number;\n\tfeature_dict: Record;\n}\n\ntype Stem = VLine & { direction: 'u' | 'd' };\n\nconst noteheadsXPivot = (xs: number[], direction: 'u' | 'd' | null): number => {\n\tswitch (xs.length) {\n\t\tcase 0:\n\t\t\treturn undefined;\n\n\t\tcase 1:\n\t\t\treturn xs[0];\n\n\t\tcase 2:\n\t\t\treturn direction === 'u' ? Math.min(...xs) : Math.max(...xs);\n\n\t\tdefault: {\n\t\t\tconst mean = xs.reduce((sum, x) => sum + x, 0) / xs.length;\n\t\t\txs.sort((x1, x2) => Math.abs(x1 - mean) - Math.abs(x2 - mean));\n\n\t\t\treturn noteheadsXPivot(xs.slice(0, xs.length - 1), direction);\n\t\t}\n\t}\n};\n\nconst noteheadsPivot = (nhs: Token[]): number =>\n\tnoteheadsXPivot(\n\t\tnhs.map((nh) => (Number.isFinite(nh.pivotX) ? nh.pivotX : nh.x)),\n\t\tnhs[0].direction\n\t);\n\nclass Measure extends SimpleClass {\n\tstatic className = 'Measure';\n\tstatic blackKeys = ['tokens', 'antiTokens'];\n\n\tleft: number;\n\twidth: number;\n\theight: number;\n\n\talternative: boolean;\n\n\ttokens: Token[];\n\tantiTokens: Token[];\n\n\tbarTypes: Record;\n\n\tconstructor(data?: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.tokens = this.tokens || [];\n\t\tthis.antiTokens = this.antiTokens || [];\n\t\tthis.barTypes = this.barTypes || {};\n\t}\n\n\tget right(): number {\n\t\treturn this.left + this.width;\n\t}\n\n\tget noteheads(): Token[] {\n\t\treturn this.tokens.filter((t) => t.isNotehead).sort((n1, n2) => n1.x - n2.x);\n\t}\n\n\tget chordRects(): ChordRect[] {\n\t\tconst noteheads = this.noteheads.filter((nh) =>\n\t\t\t[TokenType.NoteheadS0, TokenType.NoteheadS1stemU, TokenType.NoteheadS2stemU, TokenType.NoteheadS1stemD, TokenType.NoteheadS2stemD].includes(nh.type)\n\t\t);\n\n\t\tlet nulN = 0;\n\n\t\tconst nhmap: Record = noteheads.reduce((map, nh) => {\n\t\t\tconst tip = nh.tip ? `${nh.tip.x}|${nh.tip.y}` : `nul${nulN}`;\n\t\t\tlet key = `${nh.type}|${tip}`;\n\n\t\t\tif (!nh.tip && map[key]) {\n\t\t\t\tif (!map[key].some((hh) => Math.abs(hh.x - nh.x) < NOTEHEAD_WIDTHS.NoteheadS0)) {\n\t\t\t\t\t++nulN;\n\t\t\t\t\tkey = `${nh.type}|nul${nulN}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmap[key] = map[key] || [];\n\t\t\tmap[key].push(nh);\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(nhmap).map((nhs) => {\n\t\t\tconst left = Math.min(...nhs.map((nh) => nh.x));\n\t\t\tconst right = Math.max(...nhs.map((nh) => nh.x));\n\t\t\tconst top = Math.min(...nhs.map((nh) => nh.y));\n\t\t\tconst bottom = Math.max(...nhs.map((nh) => nh.y));\n\n\t\t\tconst nh0 = nhs[0];\n\n\t\t\tconst stemX = nh0 && nh0.tip ? nh0.tip.x : left;\n\n\t\t\tlet x = left;\n\t\t\tlet width = right - left;\n\t\t\tlet stemDirection = null;\n\n\t\t\tswitch (nh0.type) {\n\t\t\t\tcase TokenType.NoteheadS0:\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS0 / 2;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemU:\n\t\t\t\tcase TokenType.NoteheadS2stemU:\n\t\t\t\t\tstemDirection = 'u';\n\t\t\t\t\tx -= NOTEHEAD_WIDTHS.NoteheadS1;\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase TokenType.NoteheadS1stemD:\n\t\t\t\tcase TokenType.NoteheadS2stemD:\n\t\t\t\t\tstemDirection = 'd';\n\t\t\t\t\twidth += NOTEHEAD_WIDTHS.NoteheadS1;\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx,\n\t\t\t\twidth,\n\t\t\t\tstemX,\n\t\t\t\tstemDirection,\n\t\t\t\ttop,\n\t\t\t\tbottom,\n\t\t\t\ttip: nh0.tip,\n\t\t\t};\n\t\t});\n\t}\n\n\tget timeWarped(): boolean {\n\t\treturn this.tokens && this.tokens.some((token) => token.timeWarped);\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\tconst chords = this.getChords();\n\t\tconst up = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y <= -3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.ceil(Math.min(...chord.ys)) + 2,\n\t\t\t}));\n\t\tconst down = chords\n\t\t\t.filter((chord) => chord.ys.some((y) => y >= 3))\n\t\t\t.map((chord) => ({\n\t\t\t\tleft: chord.left,\n\t\t\t\tright: chord.right,\n\t\t\t\tn: Math.floor(Math.max(...chord.ys)) - 2,\n\t\t\t}));\n\n\t\treturn [...up, ...down].map((stack) => ({\n\t\t\tleft: stack.left - 0.28,\n\t\t\tright: stack.right + 0.28,\n\t\t\tn: stack.n,\n\t\t}));\n\t}\n\n\tgetChords(): ChordColumn[] {\n\t\tconst flags = this.tokens.filter((t) => TokenFlags.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\t\tconst beams = this.tokens.filter((t) => TokenBeams.includes(t.type));\n\n\t\tconst chordRcs = this.chordRects\n\t\t\t.map((rect) => {\n\t\t\t\tconst noteheads = this.noteheads.filter(\n\t\t\t\t\t(nh) =>\n\t\t\t\t\t\tnh.direction === rect.stemDirection &&\n\t\t\t\t\t\tnh.left >= rect.x &&\n\t\t\t\t\t\tnh.right <= rect.x + rect.width + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tnh.y >= rect.top &&\n\t\t\t\t\t\tnh.y <= rect.bottom\n\t\t\t\t);\n\t\t\t\tnoteheads.sort((n1, n2) => n2.y - n1.y);\n\t\t\t\tconst ys = noteheads.map((nh) => nh.y);\n\t\t\t\tconst noteIds = noteheads.map((nh) => nh.id);\n\n\t\t\t\tconst division = noteheads.reduce((d, nh) => Math.max(d, nh.division), 0);\n\n\t\t\t\treturn {\n\t\t\t\t\trect,\n\t\t\t\t\tleft: rect.x,\n\t\t\t\t\tright: rect.x + rect.width,\n\t\t\t\t\tpivotX: noteheadsPivot(noteheads),\n\t\t\t\t\tys,\n\t\t\t\t\ttip: rect.tip,\n\t\t\t\t\tnoteIds,\n\t\t\t\t\tdivision,\n\t\t\t\t\tdots: null,\n\t\t\t\t\trest: false,\n\t\t\t\t\tstemDirection: rect.stemDirection,\n\t\t\t\t\tbeam: null,\n\t\t\t\t};\n\t\t\t})\n\t\t\t.sort((c1, c2) => c2.left - c1.left);\n\n\t\tconst accs = new Set();\n\n\t\tconst chords = chordRcs.map(({ rect, ...chord }) => {\n\t\t\tif (chord.division >= 1) {\n\t\t\t\t// NOTE: notehead-s1 may have flags too\n\t\t\t\tconst flagRange = [rect.bottom, rect.top];\n\t\t\t\tswitch (rect.stemDirection) {\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\tflagRange[0] = rect.tip ? rect.tip.y - 0.2 : rect.top - STEM_LENGTH_MAX - 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tflagRange[1] = rect.tip ? rect.tip.y + 0.2 : rect.bottom + STEM_LENGTH_MAX + 0.5;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst nearbyFlags = flags.filter(\n\t\t\t\t\t(flag) =>\n\t\t\t\t\t\t!accs.has(flag.id) &&\n\t\t\t\t\t\tflag.x > rect.stemX - CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.x < rect.stemX + CHORD_X_TOLERANCE &&\n\t\t\t\t\t\tflag.y > flagRange[0] &&\n\t\t\t\t\t\tflag.y < flagRange[1]\n\t\t\t\t);\n\t\t\t\tchord.division = nearbyFlags.reduce((d, flag) => Math.max(d, flag.division), chord.division);\n\n\t\t\t\tnearbyFlags.forEach((flag) => accs.add(flag.id));\n\n\t\t\t\tif (chord.division >= 3) {\n\t\t\t\t\tconst beamToken = rect.tip && beams.find((t) => Math.abs(rect.tip.x - t.x) < 0.3 && Math.abs(rect.tip.y - t.y) < 0.7);\n\t\t\t\t\tif (beamToken) chord.beam = TOKEN_TO_STEMBEAM[beamToken.type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst nearbyDots = dots.filter(\n\t\t\t\t(dot) =>\n\t\t\t\t\t!accs.has(dot.id) &&\n\t\t\t\t\tdot.x > rect.x + rect.width - 0.2 &&\n\t\t\t\t\tdot.x < rect.x + rect.width + 1.2 &&\n\t\t\t\t\tdot.y > rect.top - 1 &&\n\t\t\t\t\tdot.y <= rect.bottom + 0.5\n\t\t\t);\n\t\t\tchord.dots = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\tnearbyDots.forEach((dot) => accs.add(dot.id));\n\n\t\t\treturn chord;\n\t\t});\n\n\t\tchords.reverse();\n\n\t\treturn chords;\n\t}\n\n\tgetRests(): ChordColumn[] {\n\t\tconst rests = this.tokens.filter((t) => TokenRests.includes(t.type));\n\t\tconst dots = this.tokens.filter((t) => TokenDots.includes(t.type));\n\n\t\treturn rests.map((rest) => {\n\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > rest.x + 0.5 && dot.x < rest.x + 2 && dot.y > rest.y - 1 && dot.y < rest.y + 0.5);\n\t\t\tconst dotValue = nearbyDots.reduce((v, dot) => Math.max(v, dot.dots), 0);\n\n\t\t\treturn {\n\t\t\t\tleft: rest.x - 0.75,\n\t\t\t\tright: rest.x + 0.75,\n\t\t\t\tpivotX: rest.x,\n\t\t\t\trest: true,\n\t\t\t\tys: [rest.y],\n\t\t\t\tnoteIds: [rest.id],\n\t\t\t\tdots: dotValue,\n\t\t\t\tdivision: rest.division,\n\t\t\t\tstemDirection: null,\n\t\t\t};\n\t\t});\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\treturn [...this.getChords(), ...this.getRests()].sort((e1, e2) => e1.left - e2.left);\n\t}\n\n\tgetContexts(fields = {}): ContextedTerm[] {\n\t\treturn this.tokens\n\t\t\t.filter((t) => t.isContexted)\n\t\t\t.sort((n1, n2) => n1.x - n2.x)\n\t\t\t.map(\n\t\t\t\t(token) =>\n\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\tx: token.x,\n\t\t\t\t\t\ty: token.y,\n\t\t\t\t\t\ttokenType: token.type,\n\t\t\t\t\t\t...fields,\n\t\t\t\t\t})\n\t\t\t);\n\t}\n\n\tassignAccessoriesOnEvents(events: ChordColumn[]): void {\n\t\tevents.forEach((event) => (event.accessories = event.accessories || []));\n\n\t\tconst accessories = this.tokens.filter((token) => TokenAccessories.includes(token.type));\n\t\t//console.log(\"accessories:\", accessories);\n\t\taccessories.forEach((accessory) => {\n\t\t\tconst relatedEvents = events.filter((event) => accessory.x > event.left - 1 && accessory.x < event.right + 1);\n\n\t\t\tif (relatedEvents.length > 0) {\n\t\t\t\tlet owner = relatedEvents[0];\n\t\t\t\tif (relatedEvents.length > 1) {\n\t\t\t\t\towner = relatedEvents\n\t\t\t\t\t\t.map((event) => ({ event, d: Math.min(...event.ys.map((y) => Math.abs(y - accessory.y))) }))\n\t\t\t\t\t\t.sort(({ d: d1 }, { d: d2 }) => d1 - d2)\n\t\t\t\t\t\t.map(({ event }) => event)[0];\n\t\t\t\t}\n\t\t\t\t//console.log(\"relatedEvents:\", accessory, owner);\n\n\t\t\t\tlet direction = accessory.y > Math.max(...owner.ys) ? AccessoryDirection.Down : AccessoryDirection.Up;\n\t\t\t\tif (TokenDirectionless.includes(accessory.type)) direction = null;\n\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: accessory.type,\n\t\t\t\t\tid: accessory.id,\n\t\t\t\t\tdirection,\n\t\t\t\t\tx: accessory.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone accessory:\", accessory.type);\n\t\t});\n\n\t\t// arpeggio\n\t\tconst sortEvents = [...events];\n\t\tsortEvents.sort((e1, e2) => e1.left - e2.left);\n\n\t\tconst arpeggios = this.tokens.filter((token) => token.type === TokenType.ScriptArpeggio);\n\t\tarpeggios.forEach((arpeggio) => {\n\t\t\tconst owner = sortEvents.find(\n\t\t\t\t(event) => arpeggio.x < event.left && event.ys.some((y) => y < arpeggio.y + 0.25) && event.ys.some((y) => y > arpeggio.y)\n\t\t\t);\n\t\t\t//const owner = sortEvents.find(event => event.left - leftMost.left < 2 && event.ys.some(y => Math.abs(y - arpeggio.y + 0.25) < 0.5));\n\t\t\tif (owner) {\n\t\t\t\towner.accessories.push({\n\t\t\t\t\ttype: TokenType.ScriptArpeggio,\n\t\t\t\t\tid: arpeggio.id,\n\t\t\t\t\tx: arpeggio.x - owner.left,\n\t\t\t\t});\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"alone arpeggio:\", arpeggio);\n\t\t});\n\n\t\t// grace noteheads\n\t\tconst graceNhs = this.tokens.filter((token) => token.type === TokenType.GraceNotehead);\n\t\tgraceNhs.forEach((grace) => {\n\t\t\tconst event = events.find((event) => grace.x > event.left && grace.x < event.right && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tif (event) event.grace = GraceType.Grace;\n\t\t});\n\n\t\t// tremolos\n\t\tconst tremolsLs = this.tokens.filter((token) => token.type === TokenType.TremoloLeft);\n\t\tconst tremolsRs = this.tokens.filter((token) => token.type === TokenType.TremoloRight);\n\t\tconst tremolsMs = this.tokens.filter((token) => token.type === TokenType.TremoloMiddle);\n\n\t\tconst tevents = events\n\t\t\t.filter((event) => !event.rest)\n\t\t\t.map((event) => {\n\t\t\t\tconst ys = [...event.ys];\n\t\t\t\tif (event.tip) ys.push(event.tip.y);\n\t\t\t\telse {\n\t\t\t\t\tys.push(event.ys[0] + 2);\n\t\t\t\t\tys.push(event.ys[event.ys.length - 1] - 2);\n\t\t\t\t}\n\n\t\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\t\t\t\tconst stemR = event.tip ? event.tip.x : event.right;\n\n\t\t\t\treturn {\n\t\t\t\t\tevent,\n\t\t\t\t\ttop: Math.min(...ys),\n\t\t\t\t\tbottom: Math.max(...ys),\n\t\t\t\t\tstemL,\n\t\t\t\t\tstemR,\n\t\t\t\t};\n\t\t\t});\n\n\t\ttremolsMs.forEach((tm) => {\n\t\t\tconst te = tevents.find((te) => {\n\t\t\t\tif (te.event.tip) return tm.y > te.top && tm.y < te.bottom && Math.abs(tm.x - te.event.tip.x) < 0.3;\n\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t}\n\t\t});\n\t\ttremolsLs.forEach((tl) => {\n\t\t\tconst te = tevents.find((te) => tl.y > te.top && tl.y < te.bottom && tl.x > te.stemR && tl.x < te.stemR + 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Pitcher;\n\t\t\t}\n\t\t});\n\t\ttremolsRs.forEach((tr) => {\n\t\t\tconst te = tevents.find((te) => tr.y > te.top && tr.y < te.bottom && tr.x < te.stemL && tr.x > te.stemL - 1.6);\n\t\t\tif (te) {\n\t\t\t\tte.event.tremolo = te.event.tremolo || 2;\n\t\t\t\t++te.event.tremolo;\n\t\t\t\tte.event.tremoloLink = TremoloLink.Catcher;\n\t\t\t}\n\t\t});\n\t}\n\n\tassignFeaturesOnEvents(events: ChordColumn[], semantics: SemanticPoint[]): void {\n\t\tconst points = semantics.filter((point) => point.x > this.left && point.x < this.right);\n\t\tconst rests = points.filter((point) => REST_SEMANTICS.includes(point.semantic));\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tconst dotPs = points.filter((point) => point.semantic === SemanticType.Dot);\n\t\tconst beamLs = points.filter((points) => points.semantic === SemanticType.BeamLeft);\n\t\tconst beamMs = points.filter((points) => points.semantic === SemanticType.BeamContinue);\n\t\tconst beamRs = points.filter((points) => points.semantic === SemanticType.BeamRight);\n\t\tconst gracePs = points.filter((point) => point.semantic === SemanticType.GraceNotehead);\n\t\tconst tremoloRs = points.filter((point) => point.semantic === SemanticType.TremoloRight);\n\t\tconst stems = points.filter((point) => point.semantic === SemanticType.vline_Stem);\n\t\tconst s0 = points.filter((point) => point.semantic === SemanticType.NoteheadS0);\n\t\tconst s1 = points.filter((point) => point.semantic === SemanticType.NoteheadS1);\n\t\tconst s2 = points.filter((point) => point.semantic === SemanticType.NoteheadS2);\n\n\t\tevents.forEach((event) => {\n\t\t\tconst cx = event.tip ? event.tip.x : (event.left + event.right) / 2;\n\t\t\tconst top = event.tip ? Math.min(event.tip.y, event.ys[event.ys.length - 1]) : event.ys[event.ys.length - 1];\n\t\t\tconst bottom = event.tip ? Math.max(event.tip.y, event.ys[0]) : event.ys[0];\n\t\t\tconst stemL = event.tip ? event.tip.x : event.left;\n\n\t\t\tconst divisions = [0, 0, 0, 0, 0, 0, 0];\n\t\t\tif (event.rest) {\n\t\t\t\tconst i_rests = rests.filter((point) => distance2D(point, { x: cx, y: event.ys[0] }) < 0.5);\n\t\t\t\ti_rests.forEach((r) => {\n\t\t\t\t\tconst d = REST_SEMANTICS.indexOf(r.semantic);\n\t\t\t\t\tdivisions[d] = Math.max(divisions[d], r.confidence);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst nhs = [s0, s1, s2]\n\t\t\t\t\t.map((ss) => ss.filter((nh) => nh.x > event.left && nh.x < event.right && nh.y > top - 0.25 && nh.y < bottom + 0.25))\n\t\t\t\t\t.map((ss) => Math.max(0, ...ss.map((nh) => nh.confidence)));\n\n\t\t\t\tconst i_flags = flags.filter((flag) => flag.y > top - 0.2 && flag.y < bottom + 0.2 && Math.abs(flag.x - cx) < 0.2);\n\t\t\t\ti_flags.sort((f1, f2) => f2.confidence - f1.confidence);\n\n\t\t\t\tdivisions[0] = nhs[0];\n\t\t\t\tdivisions[1] = nhs[1];\n\t\t\t\tdivisions[2] = nhs[2];\n\t\t\t\tArray(divisions.length - 3)\n\t\t\t\t\t.fill(0)\n\t\t\t\t\t.forEach((_, i) => (divisions[3 + i] = i_flags[i] ? i_flags[i].confidence : 0));\n\t\t\t}\n\n\t\t\tconst i_dots = dotPs.filter((dot) => dot.x > cx && dot.x < event.right + 2.6);\n\t\t\tconst dots2 = i_dots.filter((dot) => i_dots.some((d) => dot.x > d.x && Math.abs(dot.y - d.y) < 0.2));\n\t\t\tconst dots = [Math.max(0, ...i_dots.map((dot) => dot.confidence)), Math.max(0, ...dots2.map((dot) => dot.confidence))];\n\n\t\t\tconst beams = [beamLs, beamMs, beamRs]\n\t\t\t\t.map((bs) => bs.filter((b) => Math.abs(b.x - cx) < 0.2 && b.y > top - 0.2 && b.y < bottom + 0.2))\n\t\t\t\t.map((bs) => Math.max(0, ...bs.map((b) => b.confidence)));\n\n\t\t\tconst u_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[0] }, { x: stem.x, y: stem.extension.y2 }) < 0.5);\n\t\t\tconst d_stems = stems.filter((stem) => distance2D({ x: cx, y: event.ys[event.ys.length - 1] }, { x: stem.x, y: stem.extension.y1 }) < 0.5);\n\t\t\tconst stemDirections = [Math.max(0, ...u_stems.map((stem) => stem.confidence)), Math.max(0, ...d_stems.map((stem) => stem.confidence))];\n\n\t\t\tconst graces = gracePs.filter((grace) => Math.abs(grace.x - cx) < 0.6 && event.ys.some((y) => Math.abs(grace.y - y) < 0.4));\n\t\t\tconst grace = Math.max(0, ...graces.map((grace) => grace.confidence));\n\n\t\t\tconst tremolos =\n\t\t\t\tevent.division === 0\n\t\t\t\t\t? tremoloRs.filter((tremolo) => tremolo.x > event.left - 2 && tremolo.x < event.right)\n\t\t\t\t\t: tremoloRs.filter((tremolo) => tremolo.y > top - 0.04 && tremolo.y < bottom + 0.04 && tremolo.x > stemL - 2 && tremolo.x < stemL);\n\t\t\tconst tremoloCatcher = Math.max(0, ...tremolos.map((tremolo) => tremolo.confidence));\n\n\t\t\tevent.feature = {\n\t\t\t\tdivisions,\n\t\t\t\tdots,\n\t\t\t\tbeams,\n\t\t\t\tstemDirections,\n\t\t\t\tgrace,\n\t\t\t\ttremoloCatcher,\n\t\t\t} as EventFeature;\n\t\t});\n\t}\n}\n\nclass Staff extends SimpleClass {\n\tstatic className = 'Staff';\n\tstatic blackKeys = ['index', 'semanticTop', 'semanticBttom'];\n\n\tindex?: number; // staff index in full staff layout\n\n\t// in units\n\ttop: number;\n\theight: number;\n\tstaffY: number;\n\n\tsemanticTop: number;\n\tsemanticBottom: number;\n\n\tbackgroundImage: string | Buffer;\n\tmaskImage: string | Buffer;\n\timagePosition: Rect;\n\n\tmeasures: Measure[];\n\n\tsemantics: SemanticPoint[];\n\n\tconstructor({ measureCount = null, measureBars = null, ...data }: Record = {}) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.height = this.height || 10;\n\t\tthis.staffY = this.staffY || 5;\n\n\t\tif (measureBars) {\n\t\t\tlet left = 0;\n\t\t\tthis.measures = measureBars.map((endX) => {\n\t\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\t\tleft = endX;\n\n\t\t\t\treturn measure;\n\t\t\t});\n\t\t} else if (measureCount)\n\t\t\tthis.measures = Array(measureCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Measure());\n\t\telse this.measures = [];\n\t}\n\n\t// relative to staffY\n\tget noteRange(): { top: number; bottom: number } {\n\t\tconst noteheads: Token[] = [].concat(...this.measures.map((measure) => measure.noteheads));\n\t\tconst ys = noteheads.map((note) => note.y);\n\t\tconst top = Math.min(-2, ...ys);\n\t\tconst bottom = Math.max(2, ...ys);\n\n\t\treturn { top, bottom };\n\t}\n\n\tget additionalLines(): AdditionalLineStack[] {\n\t\treturn [].concat(...this.measures.map((measure) => measure.additionalLines));\n\t}\n\n\trearrangeMeasures(measureBars: number[]): void {\n\t\tif (!measureBars.length) {\n\t\t\tconsole.warn('rearrangeMeasures error, measureBars are empty.');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tokens = this.measures?.map((measure) => measure.tokens).flat(1) || [];\n\n\t\tlet left = 0;\n\t\tthis.measures = measureBars.map((endX) => {\n\t\t\tconst measure = new Measure({ left, width: endX - left, height: this.height });\n\t\t\tleft = endX;\n\n\t\t\treturn measure;\n\t\t});\n\n\t\tthis.reassignTokens(tokens);\n\t}\n\n\treassignTokens(tokens: Token[] = null): void {\n\t\tif (!tokens) tokens = [].concat(...this.measures.map((measure) => measure.tokens));\n\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\n\t\ttokens.forEach((token) => {\n\t\t\tfor (const measure of this.measures) {\n\t\t\t\tif (token.x < measure.right) {\n\t\t\t\t\tmeasure.tokens.push(token);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tassignSemantics(graph: SemanticGraph): void {\n\t\tthis.semantics = graph.getStaffPoints();\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, system: System, logger: Logger = new DummyLogger()): void {\n\t\tif (!this.semantics) return;\n\n\t\tlet points = system.qualifiedSemantics(this.semantics, threshold);\n\t\tpoints = solveOverlapping(points);\n\n\t\t// tempo noteheads\n\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t//console.log(\"temponh:\", tempoNh, index, points[index]);\n\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t// TODO: construct tempo term\n\t\t});\n\n\t\tconst antiP = (id: string): SemanticPoint | null => {\n\t\t\tif (system.displacementSemantics?.[id]) return this.semantics.find((p) => p.id === id);\n\n\t\t\treturn null;\n\t\t};\n\n\t\tpoints.filter((point) => MEASURE_SEMANTICS.includes(point.semantic)).forEach((point) => this.appendPoint(point, { points }));\n\n\t\t// noteheads with stem from noteheads & stems\n\t\tconst stems: Stem[] = points\n\t\t\t.filter((point) => point.semantic === SemanticType.vline_Stem)\n\t\t\t.filter((stem) => stem.extension.y2 - stem.extension.y1 > 1.5) // exclude too short stems\n\t\t\t.map((p) => ({\n\t\t\t\tx: p.x,\n\t\t\t\ty1: p.extension.y1,\n\t\t\t\ty2: p.extension.y2,\n\t\t\t\tdirection: null,\n\t\t\t}));\n\t\tconst noteheads = points.filter(\n\t\t\t(point) => NOTEHEAD_FOR_STEM_SEMANTICS.includes(point.semantic) && point.y > this.semanticTop && point.y < this.semanticBottom\n\t\t);\n\t\tconst rootNhs = new Set();\n\n\t\t// for 2nd degree chord notes\n\t\tconst nhOffsetX = (nh: SemanticPoint, stem: Stem, down: boolean): number => {\n\t\t\tif ((down ? 1 : 0) ^ (nh.x < stem.x ? 1 : 0)) return 0;\n\n\t\t\tconst offset = NOTEHEAD_WIDTHS[nh.semantic];\n\n\t\t\treturn down ? -offset : offset;\n\t\t};\n\n\t\t// find root noteheads on stem\n\t\tstems.forEach((stem) => {\n\t\t\tconst attachedHeads = noteheads.filter(\n\t\t\t\t(nh) =>\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 < 0.32 &&\n\t\t\t\t\tMath.abs(nh.x - stem.x) - NOTEHEAD_WIDTHS[nh.semantic] / 2 > -0.44 && // for grace noteheads, more close to their stem\n\t\t\t\t\tnh.y > stem.y1 - 0.5 &&\n\t\t\t\t\tnh.y < stem.y2 + 0.5 &&\n\t\t\t\t\t!(nh.x > stem.x && nh.y > stem.y2) &&\n\t\t\t\t\t!(nh.x < stem.x && nh.y < stem.y1)\n\t\t\t);\n\t\t\t//if (stem.x===102.0625 && stem.y2===1.875)\n\t\t\t//\tdebugger;\n\t\t\tif (attachedHeads.length) {\n\t\t\t\tattachedHeads.sort((n1, n2) => n1.y - n2.y);\n\n\t\t\t\tconst topDist = Math.min(...attachedHeads.map((nh) => nh.y - stem.y1));\n\t\t\t\tconst bottomDist = Math.min(...attachedHeads.map((nh) => stem.y2 - nh.y));\n\t\t\t\tif (Math.min(topDist, bottomDist) > 0.5) return; // no root notehead on this stem\n\n\t\t\t\tconst down = topDist < bottomDist;\n\t\t\t\tstem.direction = down ? 'd' : 'u';\n\n\t\t\t\tif (!down) attachedHeads.reverse();\n\t\t\t\tconst root = attachedHeads[0];\n\n\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[root.semantic].down : NOTEHEAD_TABLE[root.semantic].up;\n\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: root.id,\n\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\tx: stem.x + nhOffsetX(root, stem, down),\n\t\t\t\t\t\ty: root.y,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tconfidence: root.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\tantiPoint: antiP(root.id),\n\t\t\t\t\t\tpoints,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\trootNhs.add(root.id);\n\t\t\t}\n\t\t});\n\n\t\t// non-root noteheads\n\t\tnoteheads\n\t\t\t.filter((nh) => !rootNhs.has(nh.id))\n\t\t\t.forEach((nh) => {\n\t\t\t\tconst nearStems = stems\n\t\t\t\t\t.filter((stem) => Math.abs(stem.x - nh.x) < 2 && nh.y > stem.y1 && nh.y < stem.y2)\n\t\t\t\t\t.sort((s1, s2) => Math.abs(s1.x - nh.x) - Math.abs(s2.x - nh.x));\n\t\t\t\tconst stem = nearStems[0];\n\t\t\t\tif (stem) {\n\t\t\t\t\tconst down = stem.direction === 'd';\n\t\t\t\t\tconst semantic = down ? NOTEHEAD_TABLE[nh.semantic].down : NOTEHEAD_TABLE[nh.semantic].up;\n\n\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: nh.id,\n\t\t\t\t\t\t\tsemantic,\n\t\t\t\t\t\t\tx: stem.x + nhOffsetX(nh, stem, down),\n\t\t\t\t\t\t\ty: nh.y,\n\t\t\t\t\t\t\tpivotX: nh.x,\n\t\t\t\t\t\t\tconfidence: nh.confidence,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttip: { x: stem.x, y: down ? stem.y2 : stem.y1 },\n\t\t\t\t\t\t\tantiPoint: antiP(nh.id),\n\t\t\t\t\t\t\tpoints,\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else logger.debug('isolated notehead:', system.index, this.index, nh);\n\t\t\t});\n\n\t\t// group flags\n\t\tconst flags = points.filter((point) => point.semantic === SemanticType.Flag3);\n\t\tflags.sort((f1, f2) => f1.x - f2.x);\n\t\tthis.appendFlags(flags, stems);\n\n\t\t// group dots\n\t\tconst dots = points\n\t\t\t.filter((point) => point.semantic === SemanticType.Dot)\n\t\t\t.map((dot) => {\n\t\t\t\tconst y = roundNumber(dot.y, 0.5);\n\t\t\t\treturn { x: dot.x, y };\n\t\t\t});\n\t\tconst dotLines: { [key: number]: SemanticPoint[] } = dots.reduce((table, dot) => {\n\t\t\ttable[dot.y] = table[dot.y] || [];\n\t\t\ttable[dot.y].push(dot);\n\t\t\treturn table;\n\t\t}, {});\n\t\tObject.entries(dotLines).forEach(([sy, line]) => {\n\t\t\tconst y = Number(sy);\n\t\t\tif (line.length > 1) {\n\t\t\t\tline.sort((d1, d2) => d1.x - d2.x);\n\t\t\t\tfor (let i = 0; i < line.length - 1; i++) {\n\t\t\t\t\tconst dot = line[i];\n\t\t\t\t\tif (line.find((d) => d.x > dot.x && d.x - dot.x < 1.2)) {\n\t\t\t\t\t\tthis.appendPoint(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: dot.id,\n\t\t\t\t\t\t\t\tx: dot.x,\n\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\tconfidence: dot.confidence,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ type: TokenType.DotDot, antiPoint: antiP(dot.id), points }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// pair key accidentals\n\t\tconst keyaccs = points.filter((point) => point.semantic === SemanticType.KeyAcc);\n\t\tconst accs = points.filter((point) => KEYACC_CANDIDATE_SEMANTICS[point.semantic]);\n\t\taccs.forEach((acc) => {\n\t\t\tif (keyaccs.some((key) => Math.abs(acc.x - key.x) < 0.5 && Math.abs(acc.y - key.y) < 1)) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: acc.id,\n\t\t\t\t\t\tx: acc.x,\n\t\t\t\t\t\ty: acc.y,\n\t\t\t\t\t\tconfidence: acc.confidence,\n\t\t\t\t\t},\n\t\t\t\t\t{ type: KEYACC_CANDIDATE_SEMANTICS[acc.semantic], points }\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// octave shift heads\n\t\tconst octs = points.filter((point) => point.semantic === SemanticType.OctaveShift8);\n\t\tocts.forEach((oct) => {\n\t\t\tconst type = oct.y < 0 ? TokenType.OctaveShift8va : TokenType.OctaveShift8vb;\n\t\t\tthis.appendPoint(\n\t\t\t\t{\n\t\t\t\t\tid: oct.id,\n\t\t\t\t\tx: oct.x,\n\t\t\t\t\ty: oct.y,\n\t\t\t\t\tconfidence: oct.confidence,\n\t\t\t\t},\n\t\t\t\t{ type, points }\n\t\t\t);\n\t\t});\n\n\t\t// group volta dots\n\t\tconst voltaDots = this.semantics.filter((point) => [SemanticType.VoltaLeft, SemanticType.VoltaRight].includes(point.semantic));\n\t\tvoltaDots.sort((d1, d2) => d1.x - d2.x);\n\t\tconst voltaGroups: Record> = voltaDots.reduce(\n\t\t\t(groups, dot) => {\n\t\t\t\tconst group = groups[dot.semantic];\n\t\t\t\tconst xs = Array.from(Object.keys(group)).map(Number);\n\t\t\t\tconst x = xs.find((x) => dot.x < x + 0.2) || dot.x;\n\n\t\t\t\tgroup[x] = groups[dot.semantic][x] || [];\n\t\t\t\tgroup[x].push(dot);\n\n\t\t\t\treturn groups;\n\t\t\t},\n\t\t\t{ [SemanticType.VoltaLeft]: {}, [SemanticType.VoltaRight]: {} }\n\t\t);\n\t\tfor (const [type, group] of Object.entries(voltaGroups)) {\n\t\t\tObject.values(group).forEach((dots) => {\n\t\t\t\tif (dots.length > 1) {\n\t\t\t\t\tconst confidence = dots.reduce((sum, dot) => sum + dot.confidence, 0);\n\t\t\t\t\tif (dots[0].y * dots[1].y < 0 && confidence >= threshold * 2) this.appendPoint(dots[0], { type: TokenType[type] });\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tappendPoint(\n\t\tpoint: Partial,\n\t\t{ type, points = null, antiPoint, ...fields }: { type?: TokenType; antiPoint?: SemanticPoint; [key: string]: any } = {}\n\t): void {\n\t\t//console.log(\"appendPoint.0:\", point, point.x, point.y);\n\t\tconst x = point.x;\n\t\tconst measure = this.measures.find((measure) => x < measure.left + measure.width);\n\t\tif (!measure)\n\t\t\t// drop tokens out of measures range\n\t\t\treturn;\n\n\t\t// lined or interval\n\t\tlet lined = false;\n\t\tlet interval = false;\n\t\tif (STAFF_LINED_SEMANTICS.includes(point.semantic)) {\n\t\t\tconsole.assert(points, 'argument of points for this semantic is required:', point.semantic);\n\t\t\tconst signs = points.filter((p) => LINED_INTERVAL_SEMANTICS.includes(p.semantic) && Math.abs(p.y - point.y) < 0.2 && Math.abs(p.x - point.x) < 1.2);\n\t\t\tif (signs.some((s) => s.semantic === SemanticType.SignLined)) lined = true;\n\t\t\telse if (signs.some((s) => s.semantic === SemanticType.SignInterval)) interval = true;\n\t\t}\n\n\t\ttype = type || TokenType[point.semantic];\n\t\tconst fixedY = TOKEN_Y_FIXED[type];\n\t\tlet roundY = TOKEN_Y_ROUND[type];\n\n\t\tif (lined || interval) roundY = Math.max(roundY, 1);\n\n\t\tlet y = point.y;\n\t\tif (Number.isFinite(fixedY)) y = fixedY;\n\t\telse if (roundY) {\n\t\t\tif (interval) y = roundNumber(y + 0.5, roundY) - 0.5;\n\t\t\telse y = roundNumber(y, roundY);\n\t\t}\n\t\t//if (lined || interval)\n\t\t//\tconsole.log(\"round sign:\", point.semantic, y, lined, interval);\n\n\t\tconst holder = measure.tokens.find((token) => token.type === type && Math.abs(token.x - x) < 0.1 && Math.abs(token.y - y) < 0.1);\n\t\tif (holder) {\n\t\t\tif (Number.isFinite(holder.confidence) && holder.confidence < point.confidence) {\n\t\t\t\tholder.x = x;\n\t\t\t\tholder.y = y;\n\t\t\t\tholder.confidence = point.confidence;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// exlude clef out of pitch range\n\t\tif (TokenClefs.includes(type)) {\n\t\t\tif (Math.abs(y) > 3) return;\n\t\t}\n\n\t\t// TODO: exclude overlapped pair by a token prior table\n\n\t\tmeasure.tokens.push(\n\t\t\tnew Token({\n\t\t\t\tid: point.id,\n\t\t\t\ttype,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tpivotX: point.pivotX,\n\t\t\t\tconfidence: point.confidence,\n\t\t\t\t...fields,\n\t\t\t})\n\t\t);\n\n\t\tif (antiPoint) {\n\t\t\tmeasure.antiTokens.push(\n\t\t\t\tnew Token({\n\t\t\t\t\tid: antiPoint.id,\n\t\t\t\t\ttype,\n\t\t\t\t\tx,\n\t\t\t\t\ty: antiPoint.y,\n\t\t\t\t\tconfidence: antiPoint.confidence,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}\n\n\tappendFlags(flags: SemanticPoint[], stems: Stem[]): void {\n\t\t//console.log(\"flags:\", flags);\n\t\tconst stemGroups = stems\n\t\t\t.map((stem) => ({\n\t\t\t\t...stem,\n\t\t\t\tflags: flags.filter((flag) => Math.abs(flag.x - stem.x) < 0.3 && flag.y > stem.y1 - 0.5 && flag.y < stem.y2 + 0.5),\n\t\t\t}))\n\t\t\t.filter((group) => group.flags.length);\n\n\t\tstemGroups.forEach((group) => {\n\t\t\tconst mainFlag = group.flags.reduce((main, flag) => (main && main.confidence > flag.confidence ? main : flag), null);\n\n\t\t\t//const upDistance = mainFlag.y - group.y1;\n\t\t\t//const downDistance = group.y2 - mainFlag.y;\n\t\t\t//const downward = downDistance < upDistance;\n\t\t\tconst downward = group.direction === 'd';\n\n\t\t\tconst tailY = downward ? Math.min(group.y2, group.y1 + STEM_LENGTH_MAX) : Math.max(group.y1, group.y2 - STEM_LENGTH_MAX);\n\n\t\t\tconst flagTips = group.flags.map((flag) => ({\n\t\t\t\ttip: (tailY - flag.y) * (downward ? 1 : -1),\n\t\t\t\tconfidence: flag.confidence,\n\t\t\t}));\n\t\t\tconst count = flagTips.filter((f) => f.tip < 2 || f.confidence > mainFlag.confidence * 0.7).length;\n\n\t\t\tconst type = TokenFlags[count - 1];\n\t\t\tif (type) {\n\t\t\t\tthis.appendPoint(\n\t\t\t\t\t{\n\t\t\t\t\t\tid: group.flags[0].id,\n\t\t\t\t\t\tx: group.x,\n\t\t\t\t\t\ty: tailY,\n\t\t\t\t\t\tconfidence: Math.min(...group.flags.map((flag) => flag.confidence)),\n\t\t\t\t\t},\n\t\t\t\t\t{ type }\n\t\t\t\t);\n\t\t\t\t//console.log(\"flag:\", type);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = []));\n\t\tthis.semantics = [];\n\t}\n\n\tclearPredictedTokens(): void {\n\t\tthis.measures.forEach((measure) => (measure.tokens = measure.tokens.filter((token) => !token.isPredicted)));\n\t}\n}\n\nclass System extends SimpleClass {\n\tstatic className = 'System';\n\tstatic blackKeys = ['index', 'pageIndex', 'prev', 'next', 'headMeasureIndex', 'tokens', 'indent'];\n\n\tindex?: number;\n\tpageIndex?: number;\n\tprev?: System;\n\tnext?: System;\n\theadMeasureIndex?: number; // zero based\n\n\t// in units\n\tleft: number;\n\ttop: number;\n\twidth: number;\n\tindent: boolean;\n\n\tmeasureCount: number;\n\tstaves: Staff[];\n\n\tmeasureBars: number[];\n\n\tbackgroundImage: string;\n\timagePosition: Rect;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tsidBlackList: string[];\n\tsidWhiteList: string[];\n\n\tdisplacementSemantics?: { [id: string]: Partial };\n\n\tstaffMaskChanged: number;\n\tbracketsAppearance: string; // the staff layout code by prediction\n\n\tconstructor({ stavesCount, ...fields }: any) {\n\t\tsuper();\n\t\tsuper.assign(fields);\n\n\t\tif (!this.measureBars) {\n\t\t\tconst HEAD_WIDTH = 5;\n\t\t\tconst segmentLength = (this.width - HEAD_WIDTH) / this.measureCount;\n\t\t\tthis.measureBars = Array(this.measureCount)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => HEAD_WIDTH + segmentLength * (i + 1));\n\t\t}\n\n\t\tif (!fields.staves && stavesCount)\n\t\t\tthis.staves = Array(stavesCount)\n\t\t\t\t.fill(null)\n\t\t\t\t.map(() => new Staff({ measureBars: this.measureBars }));\n\n\t\tthis.arrangePosition();\n\n\t\tthis.measureCount = this.measureCount || this.measureBars.length;\n\n\t\tthis.sidBlackList = this.sidBlackList || [];\n\t\tthis.sidWhiteList = this.sidWhiteList || [];\n\t}\n\n\tget noteRange(): { top: number; bottom: number } {\n\t\tif (!this.staves.length) return null;\n\n\t\tconst staffTop = this.staves[0];\n\t\tconst staffBottom = this.staves[this.staves.length - 1];\n\n\t\treturn {\n\t\t\ttop: staffTop.top + staffTop.staffY + staffTop.noteRange.top,\n\t\t\tbottom: staffBottom.top + staffBottom.staffY + staffBottom.noteRange.bottom,\n\t\t};\n\t}\n\n\tget staffPositions(): StaffPosition[] {\n\t\treturn this.staves.map((staff) => ({\n\t\t\ty: staff.top + staff.staffY,\n\t\t\tradius: 2,\n\t\t}));\n\t}\n\n\tget staffMask(): number {\n\t\tif (this.staffMaskChanged) return this.staffMaskChanged;\n\n\t\tif (this.prev && this.staves.length === this.prev.staves.length) return this.prev.staffMask;\n\n\t\treturn 2 ** this.staves.length - 1;\n\t}\n\n\tget staffTop(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[0].y - positions[0].radius : 0;\n\t}\n\n\tget staffBottom(): number {\n\t\tconst positions = this.staffPositions;\n\t\treturn positions.length ? positions[positions.length - 1].y + positions[positions.length - 1].radius : 0;\n\t}\n\n\tarrangePosition(): void {\n\t\tlet y = 0;\n\t\tfor (const staff of this.staves) {\n\t\t\tif (Number.isFinite(staff.top)) break;\n\n\t\t\tstaff.top = y;\n\t\t\ty += staff.height;\n\t\t}\n\t}\n\n\ttidyMeasureBars(): void {\n\t\tthis.measureBars = this.measureBars.filter((x) => x > 1);\n\t\tthis.measureBars.sort((b1, b2) => b1 - b2);\n\n\t\tconst restWidth = this.width - this.measureBars[this.measureBars.length - 1];\n\t\tif (restWidth > 12) this.measureBars.push(this.width);\n\t\telse if (restWidth < 2) this.measureBars[this.measureBars.length - 1] = this.width;\n\n\t\tthis.measureBars = this.measureBars.filter((x, i) => i < 1 || x - this.measureBars[i - 1] > 4);\n\t}\n\n\trearrangeMeasures(): void {\n\t\tthis.measureCount = this.measureBars.length;\n\t\tthis.staves.forEach((staff) => staff.rearrangeMeasures(this.measureBars));\n\t}\n\n\tget height(): number {\n\t\treturn this.staves.reduce((height, staff) => height + staff.height, 0);\n\t}\n\n\tget connectionLine(): { top: number; bottom: number } {\n\t\tconst staffHead = this.staves[0];\n\t\tconst staffTail = this.staves[this.staves.length - 1];\n\n\t\treturn (\n\t\t\tstaffHead && {\n\t\t\t\ttop: staffHead.top + staffHead.staffY - 2,\n\t\t\t\tbottom: staffTail.top + staffTail.staffY + 2,\n\t\t\t}\n\t\t);\n\t}\n\n\tget middleY(): number {\n\t\tif (!this.staves.length) return 0;\n\n\t\tconst sum = this.staves.reduce((sum, staff) => sum + staff.top + staff.staffY, 0);\n\n\t\treturn sum / this.staves.length;\n\t}\n\n\tget timeSignatureOnHead(): boolean {\n\t\treturn this.staves.some((staff) => staff.measures[0]?.tokens.some((token) => TokenTimesigs.includes(token.type)));\n\t}\n\n\t// an array staff or null on every position of full staff layout\n\tgetStaffArray(stavesCount: number): Staff[] {\n\t\tlet si = 0;\n\n\t\treturn Array(stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, i) => {\n\t\t\t\tconst on = this.staffMask & (1 << i);\n\t\t\t\tconst staff = on ? this.staves[si++] : null;\n\t\t\t\tconsole.assert(!on || staff, 'system staves count is less than staff mask declared:', this.staves.length, this.staffMask.toString(2));\n\n\t\t\t\treturn staff;\n\t\t\t});\n\t}\n\n\t// measureIndex: the local measure index\n\tgetMarksInMeasure(measureIndex: number): MarkTerm[] {\n\t\tconsole.assert(measureIndex < this.measureBars.length, 'measure index out of range:', measureIndex, this.measureBars.length);\n\n\t\tconst left = measureIndex > 0 ? this.measureBars[measureIndex - 1] : 0;\n\t\tconst right = this.measureBars[measureIndex];\n\n\t\tconst tempoTokens = (this.tokens ?? []).filter(\n\t\t\t(token) => token.x >= left && token.x < right && token instanceof TextToken && token.textType === TextType.TempoNumeral\n\t\t) as TextToken[];\n\n\t\treturn [...tempoTokens.map((token) => TempoTerm.fromNumeralText(token.text)).filter(Boolean)];\n\t}\n\n\tgetEvents(stavesCount: number): EventSystem {\n\t\tconsole.assert(Number.isInteger(this.headMeasureIndex), 'invalid headMeasureIndex:', this.headMeasureIndex);\n\n\t\t// Empty system (no measureBars / no staves with measures): return empty result\n\t\tif (!this.measureBars?.length && this.staves.every((s) => !s.measures?.length)) {\n\t\t\treturn { staffMask: this.staffMask, columns: [] };\n\t\t}\n\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => {\n\t\t\t\tconst events = measure.getEvents();\n\t\t\t\tmeasure.assignAccessoriesOnEvents(events);\n\t\t\t\tmeasure.assignFeaturesOnEvents(events, staff.semantics);\n\n\t\t\t\treturn {\n\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t\tcontexts: measure.getContexts({ staff: staff.index }),\n\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts?.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (row[mi] && !row[mi].contexts.length && !row[mi].events.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//onst measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: this.getMarksInMeasure(i),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i]?.voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i]?.voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row[i]?.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i]?.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\t\t//columns.forEach(computeMeasureTicks);\n\n\t\t// assign id on column events\n\t\tcolumns.forEach((column) => {\n\t\t\tconst events = [].concat(...column.rows.filter(Boolean).map((row) => row.events));\n\t\t\tevents.forEach((event, i) => (event.id = i + 1));\n\t\t});\n\n\t\tconst lastColumn = columns[columns.length - 1];\n\t\tif (lastColumn) lastColumn.break = true;\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tgetEventsFunctional(stavesCount: number, ev: ChordsFeeder, processors: ColumnProcessor[] = [], { useXMap = false } = {}): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff, si) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: [] as EventTerm[],\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure, mi) => {\n\t\t\t\tconst events = ev(si, mi);\n\n\t\t\t\treturn (\n\t\t\t\t\tevents && {\n\t\t\t\t\t\tevents: events.map(\n\t\t\t\t\t\t\t(event) =>\n\t\t\t\t\t\t\t\tnew EventTerm({\n\t\t\t\t\t\t\t\t\tsystem: this.index,\n\t\t\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\t\t\trest: event.rest ? 'r' : null,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcontexts: measure.getContexts({ staff: si }),\n\t\t\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\t\t\talternative: measure.alternative,\n\t\t\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\t// [measure, staff]\n\t\tconst columns: EventMeasureColumn[] = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => {\n\t\t\t\tconst localRows = rows.map((row) => row[mi]);\n\t\t\t\tif (localRows.some((row) => !row)) return null;\n\n\t\t\t\tlet xMap: Map = null;\n\t\t\t\tif (useXMap) {\n\t\t\t\t\tconst events: EventTerm[] = [].concat(...localRows.map((row) => row.events));\n\t\t\t\t\tconst groupMap: { [group: number]: EventTerm[] } = events.reduce((map, event) => {\n\t\t\t\t\t\tif (Number.isFinite(event.tickGroup)) map[event.tickGroup] = map[event.tickGroup] || [];\n\t\t\t\t\t\tmap[event.tickGroup].push(event);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, {});\n\n\t\t\t\t\txMap = Object.values(groupMap).reduce((map, events) => {\n\t\t\t\t\t\tconst x = Math.min(...events.map((event) => (event.left + event.right) / 2));\n\t\t\t\t\t\tmap.set(x, events);\n\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}, new Map());\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + mi,\n\t\t\t\t\t//startX: measureStartXs[mi],\n\t\t\t\t\t//width: measureWidths[mi],\n\t\t\t\t\trows: localRows, // [staff]\n\t\t\t\t\tmarks: this.getMarksInMeasure(mi),\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\txMap,\n\t\t\t\t\tvoltaBegin: localRows.some((row) => row.voltaBegin),\n\t\t\t\t\tvoltaEnd: localRows.some((row) => row.voltaEnd),\n\t\t\t\t\talternative: localRows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: localRows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row.barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\tprocessors.forEach((proc) => columns.forEach(proc));\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\t// get EventSystem contains only contexted terms\n\tgetContexts(stavesCount: number): EventSystem {\n\t\tconst staves = this.getStaffArray(stavesCount);\n\n\t\t// [staff, measure]\n\t\tconst rows = staves.map((staff) => {\n\t\t\tif (!staff) {\n\t\t\t\treturn Array(this.measureCount)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => ({\n\t\t\t\t\t\tevents: null,\n\t\t\t\t\t\tcontexts: [] as ContextedTerm[],\n\t\t\t\t\t\tvoltaBegin: false,\n\t\t\t\t\t\tvoltaEnd: false,\n\t\t\t\t\t\talternative: false,\n\t\t\t\t\t\tbarTypes: {},\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\treturn staff.measures.map((measure) => ({\n\t\t\t\tevents: null,\n\t\t\t\tcontexts: measure.getContexts(),\n\t\t\t\tvoltaBegin: measure.tokens.some((token) => token.type === TokenType.VoltaLeft),\n\t\t\t\tvoltaEnd: measure.tokens.some((token) => token.type === TokenType.VoltaRight),\n\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\tbarTypes: measure.barTypes,\n\t\t\t}));\n\t\t});\n\n\t\t// supplement time signatures for empty staves\n\t\tfor (let mi = 0; mi < this.measureCount; ++mi) {\n\t\t\tconst tsRows = rows.map((row) => row[mi]?.contexts.filter((term) => [ContextType.TimeSignatureC, ContextType.TimeSignatureN].includes(term.type)));\n\t\t\tconst timeSigs = tsRows.find((row) => row?.length);\n\t\t\tif (timeSigs) {\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tif (!row[mi].contexts.length) row[mi].contexts.push(...timeSigs);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//const measureWidths = this.staves[0].measures.map(measure => measure.width);\n\t\t//const measureStartXs = [0, ...this.measureBars];\n\n\t\tconst columns = Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map(\n\t\t\t\t(_, i): EventMeasureColumn => ({\n\t\t\t\t\tmeasureIndex: this.headMeasureIndex + i,\n\t\t\t\t\t//startX: measureStartXs[i],\n\t\t\t\t\t//width: measureWidths[i],\n\t\t\t\t\trows: rows.map((row) => row[i]),\n\t\t\t\t\tmarks: [],\n\t\t\t\t\t//xToTick: {},\n\t\t\t\t\tduration: 0,\n\t\t\t\t\tvoltaBegin: rows.some((row) => row[i].voltaBegin),\n\t\t\t\t\tvoltaEnd: rows.some((row) => row[i].voltaEnd),\n\t\t\t\t\talternative: rows.some((row) => row.alternative),\n\t\t\t\t\tbarTypes: rows.reduce(\n\t\t\t\t\t\t(ts, row) => ({\n\t\t\t\t\t\t\t...ts,\n\t\t\t\t\t\t\t...row[i].barTypes,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{} as Record\n\t\t\t\t\t),\n\t\t\t\t})\n\t\t\t);\n\n\t\treturn {\n\t\t\tstaffMask: this.staffMask,\n\t\t\tcolumns,\n\t\t};\n\t}\n\n\tassignSemantics(staffIndex: number, graph: SemanticGraph): void {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff is null:', staffIndex, this.staves);\n\t\tconst oy = staff.top + staff.staffY;\n\n\t\tgraph.getSystemPoints().forEach((point) => {\n\t\t\tconst p = { ...point };\n\t\t\tp.y += oy;\n\n\t\t\tif (p.extension) {\n\t\t\t\tp.extension = { ...p.extension };\n\t\t\t\tif (Number.isFinite(p.extension.y1)) {\n\t\t\t\t\tp.extension.y1 += oy;\n\t\t\t\t\tp.extension.y2 += oy;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.semantics.push(p);\n\t\t});\n\t}\n\n\t// generate tokens from semantics\n\tassemble(threshold: number, logger: Logger = new DummyLogger()): void {\n\t\t//console.log(\"System.assignSemantics:\", graph);\n\t\tthis.measureBars = [];\n\n\t\tif (!this.semantics) return;\n\n\t\tconst graph = SemanticGraph.fromPoints(this.semantics);\n\n\t\tconst bars = graph.getConfidentLayer(SemanticType.vline_BarMeasure, threshold);\n\t\tbars.sort((b1, b2) => b1.x - b2.x);\n\n\t\tconst staffTop = this.staffTop;\n\t\tconst staffBottom = this.staffBottom;\n\n\t\tconst MERGE_WINDOW = 0.4;\n\t\tlet lastX = 0;\n\t\tconst barColumns: { [key: number]: number } = bars.reduce((columns, bar) => {\n\t\t\tconst confidence = Number.isFinite(bar.confidence) ? Math.tanh(bar.confidence) : 1;\n\n\t\t\tconst x = bar.x - lastX > MERGE_WINDOW ? bar.x : lastX;\n\t\t\tlastX = bar.x;\n\t\t\tlet intensity = columns[x] || 0;\n\t\t\tintensity += (Math.min(bar.extension.y2, staffBottom) - Math.max(bar.extension.y1, staffTop)) * confidence;\n\n\t\t\tif (bar.x !== x) delete columns[x];\n\t\t\tcolumns[bar.x] = intensity;\n\n\t\t\treturn columns;\n\t\t}, {});\n\t\tconst barXs: number[] = Object.entries(barColumns)\n\t\t\t.filter(([x, intensity]) => (void x, intensity > 3 * this.staves.length))\n\t\t\t.map(([x]) => Number(x));\n\t\t// Include bar positions from whitelisted semantic points\n\t\tif (this.sidWhiteList.length) {\n\t\t\tfor (const bar of bars) {\n\t\t\t\tif (this.sidWhiteList.includes((bar as SemanticPoint).id) && !barXs.some((x) => Math.abs(x - bar.x) <= 2)) {\n\t\t\t\t\tbarXs.push(bar.x);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbarXs.sort((x1, x2) => x1 - x2);\n\t\tbarXs.forEach((x, i) => {\n\t\t\tif (i <= 0 || x - barXs[i - 1] > 2) this.measureBars.push(x);\n\t\t});\n\n\t\tif (!this.measureBars.length) this.measureBars.push(this.width);\n\n\t\tthis.tidyMeasureBars();\n\t\tthis.rearrangeMeasures();\n\n\t\t// measure bar type\n\t\tconst typeBars = this.semantics.filter((point) => [SemanticType.vline_BarTerminal, SemanticType.vline_BarSegment].includes(point.semantic));\n\t\ttypeBars.forEach((bar) => {\n\t\t\tconst measure = this.staves[0].measures.find((measure) => bar.x > measure.right - 2 && bar.x < measure.right + 1);\n\t\t\tif (measure) {\n\t\t\t\tconst type = bar.semantic.replace(/^vline_Bar/, '');\n\t\t\t\tmeasure.barTypes[type] = measure.barTypes[type] || 0;\n\t\t\t\tmeasure.barTypes[type] += bar.confidence;\n\t\t\t}\n\t\t});\n\n\t\tlet staffIndex = 0;\n\t\tconst staffMask = this.staffMask;\n\t\tthis.staves.forEach((staff, si) => {\n\t\t\t// staff index\n\t\t\twhile (!(staffMask & (1 << staffIndex))) ++staffIndex;\n\t\t\tstaff.index = staffIndex++;\n\n\t\t\t// assign semantic boundaries\n\t\t\tif (si === 0) staff.semanticTop = -staff.staffY;\n\t\t\telse {\n\t\t\t\tconst prevStaff = this.staves[si - 1];\n\t\t\t\tstaff.semanticTop = prevStaff.top + prevStaff.staffY + 3 - (staff.top + staff.staffY);\n\t\t\t}\n\n\t\t\tif (si < this.staves.length - 1) {\n\t\t\t\tconst nextStaff = this.staves[si + 1];\n\t\t\t\tstaff.semanticBottom = nextStaff.top + nextStaff.staffY - 3 - (staff.top + staff.staffY);\n\t\t\t} else staff.semanticBottom = this.height - (staff.top + staff.staffY);\n\n\t\t\tif (staff.semantics && staff.semantics.length) {\n\t\t\t\tstaff.semantics.forEach((point) => hashSemanticPoint(this.index, si, point));\n\n\t\t\t\tstaff.clearPredictedTokens();\n\t\t\t\tstaff.assemble(threshold, this, logger);\n\t\t\t}\n\t\t});\n\t}\n\n\tqualifiedSemantics(semantics: SemanticPoint[], threshold: number = 1): SemanticPoint[] {\n\t\treturn semantics\n\t\t\t.filter(\n\t\t\t\t(p) => this.sidWhiteList.includes(p.id) || (!this.sidBlackList.includes(p.id) && (p.confidence >= threshold || !Number.isFinite(p.confidence)))\n\t\t\t)\n\t\t\t.map((point) => {\n\t\t\t\t// displace semantic point\n\t\t\t\tif (this.displacementSemantics && this.displacementSemantics[point.id]) return { ...point, ...this.displacementSemantics[point.id] };\n\n\t\t\t\treturn point;\n\t\t\t});\n\t}\n\n\tclearTokens(): void {\n\t\tthis.staves.forEach((staff) => staff.clearTokens());\n\t\tthis.semantics = [];\n\t}\n\n\tnewPoint(staffIndex: number, data: SemanticPoint, threshold: number = 1): SemanticPoint {\n\t\tconst staff = this.staves[staffIndex];\n\t\tconsole.assert(staff, 'staff index out of bound:', staffIndex, this.staves.length);\n\n\t\tconst { semantic, x, y, confidence = 0, extension = null } = data;\n\t\tconst point = { semantic, x, y, confidence, extension };\n\t\tif (!point.extension) delete point.extension;\n\n\t\thashSemanticPoint(this.index, staffIndex, point);\n\t\tstaff.semantics.push(point);\n\t\tstaff.clearPredictedTokens();\n\t\tstaff.assemble(threshold, this);\n\n\t\treturn point;\n\t}\n\n\tappendToken(token: TextToken): void {\n\t\tthis.tokens.push(token);\n\n\t\tswitch (token.textType) {\n\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t{\n\t\t\t\t\t// remove noteheads in text area\n\t\t\t\t\tconst staff = this.staves[0];\n\t\t\t\t\tif (staff) {\n\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\t\t\t\t\t\tstaff.measures.forEach((measure) => {\n\t\t\t\t\t\t\tmeasure.tokens = measure.tokens.filter(\n\t\t\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t\t\t!TokenNoteheads.includes(t.type) ||\n\t\t\t\t\t\t\t\t\tMath.abs(t.x - token.x) > token.width / 2 ||\n\t\t\t\t\t\t\t\t\tMath.abs(oy + t.y - token.y) > token.fontSize / 2\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase TextType.Alternation1:\n\t\t\tcase TextType.Alternation2:\n\t\t\t\t//console.log(\"appendToken:\", token, this.staves[0].measures);\n\t\t\t\tthis.staves[0].measures.forEach((measure) => {\n\t\t\t\t\tconst overlap = Math.min(measure.left + measure.width, token.x + token.width / 2) - Math.max(measure.left, token.x - token.width / 2);\n\t\t\t\t\tmeasure.alternative = measure.alternative || overlap / measure.width > 0.5;\n\t\t\t\t});\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nclass Page extends SimpleClass {\n\tstatic className = 'Page';\n\tstatic blackKeys = ['index', 'tokens'];\n\n\tindex?: number;\n\n\t// in units\n\twidth: number;\n\theight: number;\n\n\tsystems: System[];\n\n\tsource: SourceImageFile;\n\tlayout?: PageLayout;\n\n\tsemantics: SemanticPoint[];\n\ttokens?: Token[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.systems = this.systems || [];\n\n\t\tif (this.source) {\n\t\t\tthis.source.matrix = this.source.matrix || [1, 0, 0, 1, 0, 0];\n\t\t}\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tclearTokens(): void {\n\t\tthis.semantics = null;\n\t\tthis.tokens = null;\n\n\t\tthis.systems.forEach((system) => (system.tokens = null));\n\t}\n\n\tassignTexts(areas: TextArea[], [imageHeight, imageWidth]: [number, number]): void {\n\t\tconst interval = this.source && this.source.interval ? this.source.interval * (imageHeight / this.source.dimensions.height) : imageHeight / this.height;\n\n\t\tthis.semantics = areas.map((area) => {\n\t\t\tconst p = {\n\t\t\t\tx: (area.cx - imageWidth / 2) / interval,\n\t\t\t\ty: (area.cy - imageHeight / 2) / interval,\n\t\t\t};\n\t\t\tconst rp = this.source && this.source.matrix ? trans23(p, this.source.matrix) : p;\n\n\t\t\treturn {\n\t\t\t\tconfidence: area.score,\n\t\t\t\tx: rp.x + this.width / 2,\n\t\t\t\ty: rp.y + this.height / 2,\n\t\t\t\tsemantic: SemanticType.rect_Text,\n\t\t\t\textension: {\n\t\t\t\t\ttext: area.text,\n\t\t\t\t\ttype: area.type,\n\t\t\t\t\twidth: area.width / interval,\n\t\t\t\t\theight: area.height / interval,\n\t\t\t\t\ttheta: area.theta,\n\t\t\t\t\ttextFeature: area.feature_dict,\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\t}\n\n\tassemble({ textAnnotations = null }: { textAnnotations?: { [id: string]: string } } = {}, logger: Logger = new DummyLogger()): void {\n\t\tthis.tokens = [];\n\t\tthis.systems.forEach((system) => (system.tokens = []));\n\n\t\t// compute system indent\n\t\tif (this.systems.length) {\n\t\t\tconst sysXs = this.systems.map((system) => system.left);\n\t\t\tconst middleX = sysXs[Math.floor((sysXs.length - 1) / 2)];\n\t\t\tthis.systems.forEach((system) => (system.indent = system.left > middleX + INDENT_THRESHOLD));\n\t\t}\n\n\t\tif (this.semantics) {\n\t\t\tconst pageName = this.source ? this.source.name : this.index.toString();\n\n\t\t\tthis.semantics.forEach((point) => {\n\t\t\t\thashPageSemanticPoint(pageName, point);\n\n\t\t\t\tconst fields = {\n\t\t\t\t\tid: point.id,\n\t\t\t\t\ttype: TokenType.Text,\n\t\t\t\t\tconfidence: point.confidence,\n\t\t\t\t\ttextType: TEXT_TYPE_ALIAS[point.extension.type] || point.extension.type,\n\t\t\t\t\ttext: (textAnnotations && textAnnotations[point.id]) || point.extension.text,\n\t\t\t\t\ttextFeasure: point.extension.textFeature,\n\t\t\t\t\twidth: point.extension.width,\n\t\t\t\t\tfontSize: point.extension.height,\n\t\t\t\t};\n\n\t\t\t\tswitch (point.semantic) {\n\t\t\t\t\tcase SemanticType.rect_Text:\n\t\t\t\t\t\tswitch (fields.textType) {\n\t\t\t\t\t\t\t// page tokens\n\t\t\t\t\t\t\tcase TextType.Title:\n\t\t\t\t\t\t\tcase TextType.Author:\n\t\t\t\t\t\t\tcase TextType.PageMargin:\n\t\t\t\t\t\t\tcase TextType.Other:\n\t\t\t\t\t\t\t\tthis.tokens.push(\n\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens on the top of system\n\t\t\t\t\t\t\tcase TextType.TempoNumeral:\n\t\t\t\t\t\t\tcase TextType.Chord:\n\t\t\t\t\t\t\tcase TextType.MeasureNumber:\n\t\t\t\t\t\t\tcase TextType.Instrument:\n\t\t\t\t\t\t\tcase TextType.Alternation1:\n\t\t\t\t\t\t\tcase TextType.Alternation2:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = this.systems.find((system) => system.top + system.staffTop > point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tsystem.appendToken(\n\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\tx: point.x - system.left,\n\t\t\t\t\t\t\t\t\t\t\t\ty: point.y - system.top,\n\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// tokens in staff\n\t\t\t\t\t\t\tcase TextType.TextualMark:\n\t\t\t\t\t\t\tcase TextType.Times:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tconst system = [...this.systems].reverse().find((system) => system.top < point.y);\n\t\t\t\t\t\t\t\t\tif (system) {\n\t\t\t\t\t\t\t\t\t\tconst sy = point.y - (system.top + system.staffTop);\n\t\t\t\t\t\t\t\t\t\tconst sx = point.x - system.left;\n\t\t\t\t\t\t\t\t\t\tconst staff = system.staves.find((staff) => sy >= staff.top && sy < staff.top + staff.height);\n\t\t\t\t\t\t\t\t\t\tif (staff) {\n\t\t\t\t\t\t\t\t\t\t\tconst measure = staff.measures.find((measure) => sx >= measure.left && sx < measure.left + measure.width);\n\t\t\t\t\t\t\t\t\t\t\tif (measure) {\n\t\t\t\t\t\t\t\t\t\t\t\tmeasure.tokens.push(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew TextToken({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tx: sx,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ty: sy,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t...fields,\n\t\t\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport { Measure, Staff, System, Page };\n","import { ChordColumn, Fraction } from './interfaces';\nimport { GraceType } from './term';\nimport { roundNumber } from './utils';\nimport { SimpleClass } from './aux_/typedJSON';\n\nenum SemanticElementType {\n\tBOS,\n\tPAD,\n\n\tNoteheadS0,\n\tNoteheadS1,\n\tNoteheadS2,\n\tNoteheadGrace,\n\tvline_Stem,\n\tFlag3,\n\tBeamLeft,\n\tBeamContinue,\n\tBeamRight,\n\tDot,\n\tRest0,\n\tRest1,\n\tRest2,\n\tRest3,\n\tRest4,\n\tRest5,\n\tRest6,\n\n\t// measure time signature denominators & numerators\n\tTimeD2,\n\tTimeD4,\n\tTimeD8,\n\tTimeN1,\n\tTimeN2,\n\tTimeN3,\n\tTimeN4,\n\tTimeN5,\n\tTimeN6,\n\tTimeN7,\n\tTimeN8,\n\tTimeN9,\n\tTimeN10,\n\tTimeN11,\n\tTimeN12,\n}\n\nconst TIME_SIG_DENOMINATORS = Object.fromEntries([2, 4, 8].map((n) => [n, SemanticElementType[`TimeD${n}`]]));\nconst TIME_SIG_NUMERATORS = Object.fromEntries(\n\tArray(12)\n\t\t.fill(null)\n\t\t.map((_, i) => i + 1)\n\t\t.map((n) => [n, SemanticElementType[`TimeN${n}`]])\n);\n\nconst et = SemanticElementType;\n\nconst ELEMENT_TOKEN_NAMES = {\n\t[et.BOS]: 'BOS',\n\t[et.NoteheadS0]: 'noteheads-s0',\n\t[et.NoteheadS1]: 'noteheads-s1',\n\t[et.NoteheadS2]: 'noteheads-s2',\n\t[et.NoteheadGrace]: 'GraceNotehead',\n\t[et.Flag3]: 'flags-u3',\n\t[et.BeamLeft]: 'BeamLeft',\n\t[et.BeamContinue]: 'BeamContinue',\n\t[et.BeamRight]: 'BeamRight',\n\t[et.Dot]: 'dot',\n\t[et.Rest0]: 'rests-0o',\n\t[et.Rest1]: 'rests-1o',\n\t[et.Rest2]: 'rests-2',\n\t[et.Rest3]: 'rests-3',\n\t[et.Rest4]: 'rests-4',\n\t[et.Rest5]: 'rests-5',\n\t[et.Rest6]: 'rests-6',\n};\n\nconst NOTEHEAD_BASE_DIVISION = {\n\t[et.NoteheadS0]: 0,\n\t[et.NoteheadS1]: 1,\n\t[et.NoteheadS2]: 2,\n\t[et.NoteheadGrace]: 2,\n};\n\nconst NOTEHEAD_ELEMENT_TYPES = [et.NoteheadS0, et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace];\n\nconst REST_ELEMENT_TYPES = [et.Rest0, et.Rest1, et.Rest2, et.Rest3, et.Rest4, et.Rest5, et.Rest6];\n\nconst BEAM_ELEMENT_TYPES = [et.BeamLeft, et.BeamContinue, et.BeamRight];\n\nconst NOTE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES];\n\nconst SOURCE_ELEMENT_TYPES = [...NOTEHEAD_ELEMENT_TYPES, ...REST_ELEMENT_TYPES, et.vline_Stem];\n\nconst TARGET_ELEMENT_TYPES = [et.BOS, et.NoteheadS0, et.vline_Stem, ...REST_ELEMENT_TYPES];\n\nconst ROOT_NOTE_ELEMENT_TYPES = [...NOTE_ELEMENT_TYPES, et.vline_Stem];\n\nconst ELEMENT_TO_STEMBEAM = {\n\t[et.BeamLeft]: 'Open',\n\t[et.BeamRight]: 'Close',\n};\n\ninterface SemanticElement {\n\ttype: SemanticElementType;\n\tstaff: number;\n\tx: number;\n\ty1: number;\n\ty2: number;\n\n\tindex?: number;\n\ttick?: number;\n\tid?: string;\n}\n\ntype Matrix = number[][];\n\nconst metaElem = (type: SemanticElementType): SemanticElement => ({\n\ttype,\n\tstaff: -1,\n\tx: 0,\n\ty1: 0,\n\ty2: 0,\n});\n\nconst BOS_ELEMENT = metaElem(SemanticElementType.BOS);\n\nconst fractionToElems = (fraction: Fraction): SemanticElement[] => [\n\tmetaElem(TIME_SIG_NUMERATORS[fraction.numerator]),\n\tmetaElem(TIME_SIG_DENOMINATORS[fraction.denominator]),\n];\n\nconst argmax = (data: number[], mask: boolean[]): number => {\n\tconst values = data.filter((_, i) => mask[i]);\n\tconst max = Math.max(...values);\n\n\treturn data.findIndex((x) => x === max);\n};\n\nclass SemanticCluster extends SimpleClass {\n\tindex?: number;\n\n\telements: SemanticElement[];\n\tmatrixH?: Matrix; // matrix N x N\n\t_matrixV?: Matrix; // matrix N x N\n\tgroupsV?: number[][]; // ids array\n\tmasks?: [boolean[], boolean[], boolean[]]; // the masks for: [jointer source, jointer target, V]\n\n\tstatic elementToJSON(elem: SemanticElement): object {\n\t\tconst result: any = {\n\t\t\ttype: elem.type,\n\t\t\tstaff: elem.staff,\n\t\t\tx: elem.x,\n\t\t\ty1: elem.y1,\n\t\t\ty2: elem.y2,\n\t\t};\n\n\t\tif (elem.id) result.id = elem.id;\n\n\t\treturn result;\n\t}\n\n\tconstructor(data: object) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\t}\n\n\tget sourceMask(): boolean[] {\n\t\treturn this.elements.map((elem) => SOURCE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget targetMask(): boolean[] {\n\t\treturn this.elements.map((elem) => TARGET_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget vMask(): boolean[] {\n\t\treturn this.elements.map((elem) => ROOT_NOTE_ELEMENT_TYPES.includes(elem.type));\n\t}\n\n\tget compactMatrixH(): Matrix {\n\t\tif (!this.matrixH) return null;\n\n\t\tconst sourceMask = this.sourceMask;\n\t\tconst targetMask = this.targetMask;\n\n\t\treturn this.matrixH.filter((_, i) => sourceMask[i]).map((row) => row.filter((_, j) => targetMask[j]));\n\t}\n\n\tset compactMatrixH(value: Matrix) {\n\t\tthis.matrixH = expandMatrixByMasks([].concat(...value), [this.sourceMask, this.targetMask]);\n\t}\n\n\tget compactMatrixV(): number[] {\n\t\tif (!this._matrixV) return null;\n\n\t\tconst vMask = this.vMask;\n\n\t\tconst matrix = this._matrixV.filter((_, i) => vMask[i]).map((row) => row.filter((_, j) => vMask[j]));\n\n\t\treturn [].concat(...matrix.map((row, i) => row.slice(0, i)));\n\t}\n\n\tset compactMatrixV(value: number[]) {\n\t\tthis.matrixV = value && expandMatrixByMaskTriu(value, this.vMask);\n\t}\n\n\tget matrixV(): Matrix {\n\t\treturn this.groupsV && matrixFromGroups(this.elements.length, this.groupsV);\n\t}\n\n\tset matrixV(value: Matrix) {\n\t\tif (!value) {\n\t\t\tthis.groupsV = null;\n\t\t\tthis._matrixV = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst THRESHOLD = 0.5;\n\n\t\tconst groups: number[][] = [];\n\t\tconst vMask = value.map((row, i) => row.some(Number.isFinite) || value.some((row) => Number.isFinite(row[i])));\n\n\t\tvalue.forEach((row, i) => {\n\t\t\tif (vMask[i]) {\n\t\t\t\tlet found = false;\n\n\t\t\t\tfor (let j = 0; j < i; ++j) {\n\t\t\t\t\tconst cell = row[j];\n\t\t\t\t\tif (cell >= THRESHOLD) {\n\t\t\t\t\t\tconst g = groups.findIndex((group) => group.includes(j));\n\t\t\t\t\t\tgroups[g].push(i);\n\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!found) groups.push([i]);\n\t\t\t}\n\t\t});\n\n\t\tthis.groupsV = groups;\n\t\tthis._matrixV = value;\n\t}\n\n\ttoJSON(): any {\n\t\treturn {\n\t\t\t__prototype: 'SemanticCluster',\n\t\t\tindex: this.index,\n\t\t\telements: this.elements.map(SemanticCluster.elementToJSON),\n\t\t\tcompactMatrixH: this.compactMatrixH,\n\t\t\tcompactMatrixV: this.compactMatrixV,\n\t\t\t//groupsV: this.groupsV,\n\t\t};\n\t}\n\n\tstatic mapMatrix(matrix: number[][], x2i: number[], i2x: number[]): number[][] {\n\t\tconst rows = x2i.reduce((rows, i, x) => {\n\t\t\tif (rows[i]) rows[i] = rows[i].map((v, xi) => (v + matrix[x][xi] ? 1 : 0));\n\t\t\telse rows[i] = matrix[x];\n\n\t\t\treturn rows;\n\t\t}, [] as number[][]);\n\n\t\treturn rows.map((row) => i2x.map((x) => row[x]));\n\t}\n\n\tmergeOverlapping() {\n\t\tconst overlaps = this.overlappedNoteheads();\n\t\tif (overlaps.length) {\n\t\t\tconst x2i = this.elements.map((_, index) => {\n\t\t\t\tconst pair = overlaps.find((ij) => index === ij[1]);\n\t\t\t\tconst i = pair ? pair[0] : index;\n\n\t\t\t\treturn i - overlaps.filter((ij) => ij[1] < i).length;\n\t\t\t});\n\t\t\tconst i2x = Array(this.elements.length - overlaps.length)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, i) => x2i.findIndex((ii) => ii === i));\n\n\t\t\tthis.elements = i2x.map((x) => this.elements[x]);\n\t\t\tconsole.assert(this.elements.every(Boolean), 'null element found:', this, x2i, i2x);\n\n\t\t\tthis.matrixH = SemanticCluster.mapMatrix(this.matrixH, x2i, i2x);\n\t\t\tthis.groupsV = this.groupsV.map((group) => Array.from(new Set(group.map((x) => x2i[x]))));\n\t\t}\n\t}\n\n\toverlappedNoteheads(): [number, number][] {\n\t\tconst indices = [];\n\n\t\tconst noteheads = this.elements.filter((elem) => NOTEHEAD_ELEMENT_TYPES.includes(elem.type));\n\t\tfor (let i = 0; i < noteheads.length; ++i) {\n\t\t\tconst nh1 = noteheads[i];\n\t\t\tfor (let j = i + 1; j < noteheads.length; ++j) {\n\t\t\t\tconst nh2 = noteheads[j];\n\t\t\t\tif ((nh1.x - nh2.x) * (nh1.x - nh2.x) + (nh1.y1 - nh2.y1) * (nh1.y1 - nh2.y1) < 0.2 ** 2) indices.push([nh1.index, nh2.index]);\n\t\t\t}\n\t\t}\n\n\t\treturn indices;\n\t}\n\n\tgetEvents(): ChordColumn[] {\n\t\tconsole.assert(this.matrixH, '[SemanticCluster.getEvents]\tmatrixH is null.');\n\n\t\tconst NOTE_STEM_CONFIDENCE = 0.5;\n\n\t\tconst ids = Array(this.elements.length)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => index);\n\n\t\tconst targetMask = this.masks ? this.masks[1] : ids.map((id) => TARGET_ELEMENT_TYPES.includes(this.elements[id].type));\n\n\t\t//const stems = ids.filter(i => this.elements[i].type === et.vline_Stem);\n\t\tconst stemMasks = ids.map((id) => this.elements[id].type === et.vline_Stem && this.elements[id].y2 - this.elements[id].y1 > 2); // TODO: sift out too short stems by rectification model\n\t\tconst stemNotes = ids.filter((i) => [et.NoteheadS1, et.NoteheadS2, et.NoteheadGrace].includes(this.elements[i].type));\n\t\tconst s0s = ids.filter((i) => this.elements[i].type === et.NoteheadS0);\n\t\tconst subS0Masks = ids.map(() => false);\n\n\t\t// root elements: top NoteheadS0, Rests, stem with noteheads\n\t\tconst stemMap: { [stem: number]: number[] } = {};\n\t\tstemNotes.forEach((id) => {\n\t\t\tconst note = this.elements[id];\n\t\t\tconst stems = ids\n\t\t\t\t.filter((i) => stemMasks[i])\n\t\t\t\t.filter((stemId) => this.elements[stemId].y1 - 0.5 < note.y1 && this.elements[stemId].y2 + 0.5 > note.y1) // filter by stem Y range\n\t\t\t\t.sort((i1, i2) => this.matrixH[id][i2] - this.matrixH[id][i1]) // sort by confidence\n\t\t\t\t.slice(0, 2)\n\t\t\t\t.filter((i, ii) => ii === 0 || this.matrixH[id][i] >= NOTE_STEM_CONFIDENCE);\n\t\t\tstems.forEach((stem) => {\n\t\t\t\tstemMap[stem] = stemMap[stem] || [];\n\t\t\t\tstemMap[stem].push(id);\n\t\t\t});\n\t\t});\n\n\t\ts0s.forEach((id) => {\n\t\t\tconst s0 = this.elements[id];\n\t\t\tconst prevId = argmax(this.matrixH[id], targetMask);\n\t\t\tconst prev = this.elements[prevId];\n\t\t\tif (prev.type === et.NoteheadS0 && Math.abs(s0.x - prev.x) < 2.6) {\n\t\t\t\tsubS0Masks[id] = true;\n\t\t\t\tstemMap[prevId] = stemMap[prevId] || [prevId];\n\t\t\t\tstemMap[prevId].push(id);\n\t\t\t} else stemMap[id] = stemMap[id] || [id];\n\t\t});\n\n\t\t// setup linkings\n\t\tconst linkings: { [key: number]: number } = {};\n\n\t\tconst roots = ids.filter((id) => stemMap[id] || REST_ELEMENT_TYPES.includes(this.elements[id].type));\n\t\troots.sort((i1, i2) => this.elements[i1].x - this.elements[i2].x); // traverse roots from left to right later\n\n\t\tconst parentMasks = ids.map((id) => id === et.BOS);\n\t\troots.forEach((id) => {\n\t\t\tconst parentId = argmax(this.matrixH[id], parentMasks);\n\t\t\tlinkings[id] = parentId;\n\n\t\t\tif (parentId && !REST_ELEMENT_TYPES.includes(this.elements[parentId].type)) parentMasks[parentId] = false;\n\n\t\t\tparentMasks[id] = true;\n\t\t});\n\t\t//console.log(\"topology:\", stemMap, linkings);\n\n\t\tconst dots = this.elements.filter((elem) => elem.type === et.Dot);\n\t\tconst flags = this.elements.filter((elem) => elem.type === et.Flag3);\n\t\tconst beams = this.elements.filter((elem) => BEAM_ELEMENT_TYPES.includes(elem.type));\n\n\t\tconst groupsV = this.groupsV;\n\n\t\treturn roots\n\t\t\t.map((rootId): ChordColumn => {\n\t\t\t\tconst root = this.elements[rootId];\n\n\t\t\t\tconst tickGroup = groupsV ? groupsV.findIndex((group) => group.includes(rootId)) : null;\n\n\t\t\t\tif (REST_ELEMENT_TYPES.includes(root.type)) {\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > root.x + 0.5 && dot.x < root.x + 0.75 + 1.2 && dot.y1 > root.y1 - 1 && dot.y1 < root.y1);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft: root.x - 0.75,\n\t\t\t\t\t\tright: root.x + 0.75,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\trest: true,\n\t\t\t\t\t\tys: [root.y1],\n\t\t\t\t\t\tnoteIds: [root.id],\n\t\t\t\t\t\tdots: nearbyDots.length,\n\t\t\t\t\t\tdivision: root.type - et.Rest0,\n\t\t\t\t\t\tstemDirection: null,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: root.staff,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t} else if (stemMap[rootId]) {\n\t\t\t\t\tconst subNotes = stemMap[rootId].map((id) => this.elements[id]);\n\t\t\t\t\tconst left = Math.min(...subNotes.map((n) => n.x - 0.7));\n\t\t\t\t\tconst right = Math.max(...subNotes.map((n) => n.x + 0.7));\n\t\t\t\t\tsubNotes.sort((n1, n2) => n2.y1 - n1.y1);\n\n\t\t\t\t\tconst ys = subNotes.map((note) => note.y1);\n\n\t\t\t\t\tconst noteIds = subNotes.map((note) => note.id);\n\n\t\t\t\t\tconst top = ys[0];\n\t\t\t\t\tconst bottom = ys[ys.length - 1];\n\n\t\t\t\t\tconst nearbyDots = dots.filter((dot) => dot.x > right && dot.x < right + 1.2 && dot.y1 > top - 1 && dot.y1 < bottom + 0.5);\n\t\t\t\t\tconst dotGroups: { [key: number]: SemanticElement[] } = nearbyDots.reduce((groups, dot) => {\n\t\t\t\t\t\tconst y = roundNumber(dot.y1, 0.5);\n\t\t\t\t\t\tgroups[y] = groups[y] || [];\n\t\t\t\t\t\tgroups[y].push(dot);\n\n\t\t\t\t\t\treturn groups;\n\t\t\t\t\t}, {});\n\t\t\t\t\tconst dotValue = Math.max(...Object.values(dotGroups).map((group) => group.length), 0);\n\n\t\t\t\t\tlet division = NOTEHEAD_BASE_DIVISION[subNotes[0].type];\n\n\t\t\t\t\tlet stemDirection = null;\n\t\t\t\t\tlet beam: string = null;\n\t\t\t\t\tlet tip = null;\n\t\t\t\t\tif (root.type === et.vline_Stem) {\n\t\t\t\t\t\tconst topTip = top - root.y1;\n\t\t\t\t\t\tconst bottomTip = root.y2 - bottom;\n\t\t\t\t\t\tstemDirection = topTip > bottomTip ? 'u' : 'd';\n\n\t\t\t\t\t\ttip = { x: root.x, y: stemDirection === 'u' ? root.y1 : root.y2 };\n\n\t\t\t\t\t\tif (division === 2) {\n\t\t\t\t\t\t\tconst flagRange = stemDirection === 'u' ? [root.y1 - 0.4, root.y2 - 1] : [root.y1 + 1, root.y2 + 0.4];\n\t\t\t\t\t\t\tconst nearbyFlags = flags.filter((flag) => Math.abs(flag.x - root.x) < 0.2 && flag.y1 > flagRange[0] && flag.y1 < flagRange[1]);\n\t\t\t\t\t\t\tdivision += nearbyFlags.length;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//const tipY = stemDirection === \"u\" ? root.y1 : root.y2;\n\t\t\t\t\t\tconst tipRange = stemDirection === 'u' ? [root.y1 - 0.2, root.y1 + 0.9] : [root.y2 - 0.9, root.y2 + 0.2];\n\t\t\t\t\t\tconst beamElem = beams.find((beam) => Math.abs(beam.x - root.x) < 0.2 && beam.y1 > tipRange[0] && beam.y1 < tipRange[1]);\n\t\t\t\t\t\tbeam = beamElem ? ELEMENT_TO_STEMBEAM[beamElem.type] : null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst grace = subNotes[0].type === SemanticElementType.NoteheadGrace ? GraceType.Grace : null;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tleft,\n\t\t\t\t\t\tright,\n\t\t\t\t\t\tpivotX: root.x,\n\t\t\t\t\t\tys,\n\t\t\t\t\t\ttip,\n\t\t\t\t\t\tnoteIds,\n\t\t\t\t\t\tdivision,\n\t\t\t\t\t\tdots: dotValue,\n\t\t\t\t\t\trest: false,\n\t\t\t\t\t\tstemDirection,\n\t\t\t\t\t\tbeam,\n\t\t\t\t\t\tid: rootId,\n\t\t\t\t\t\tprevId: linkings[rootId],\n\t\t\t\t\t\tstaff: subNotes[0].staff,\n\t\t\t\t\t\tgrace,\n\t\t\t\t\t\ttickGroup,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t}\n}\n\ninterface SemanticClusterSetData {\n\tvocab?: string[];\n\tclusters: SemanticCluster[];\n}\n\nclass SemanticClusterSet {\n\tclusters: SemanticCluster[];\n\n\tconstructor(data?: SemanticClusterSetData) {\n\t\tif (data) {\n\t\t\tthis.clusters = data.clusters;\n\n\t\t\t// upgrade vocab\n\t\t\tif (data.vocab) {\n\t\t\t\tconst converts = data.vocab\n\t\t\t\t\t.map((name, i) => [i, SemanticElementType[name]])\n\t\t\t\t\t.filter(([x, y]) => x !== y)\n\t\t\t\t\t.reduce((table, [x, y]) => ((table[x] = y), table), {});\n\t\t\t\tthis.clusters.forEach((connection) =>\n\t\t\t\t\tconnection.elements.forEach((elem) => {\n\t\t\t\t\t\tif (Number.isFinite(converts[elem.type])) elem.type = converts[elem.type];\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\tconst vocab = Object.entries(SemanticElementType)\n\t\t\t.filter((entry) => Number.isFinite(entry[1]))\n\t\t\t.map((entry) => entry[0]);\n\n\t\treturn {\n\t\t\t__prototype: 'SemanticClusterSet',\n\t\t\tvocab,\n\t\t\tclusters: this.clusters.map((c) => c.toJSON()),\n\t\t};\n\t}\n}\n\nconst expandMatrixByMasks = (matrix: number[], masks: [boolean[], boolean[]]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\tconst [maskSrc, maskTar] = masks;\n\n\treturn maskSrc.map((src) => maskTar.map((tar) => (src && tar ? iter.next().value : null)));\n};\n\nconst expandMatrixByMaskTriu = (matrix: number[], mask: boolean[]): Matrix => {\n\tconst gen = function* (): Generator {\n\t\tfor (const x of matrix) yield x;\n\t};\n\tconst iter = gen();\n\n\treturn mask.map((row, i) => mask.map((column, j) => (row && column && j < i ? iter.next().value : null)));\n};\n\nconst matrixFromGroups = (len: number, groups: number[][]): Matrix => {\n\tconst groupIds = Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) => groups.findIndex((group) => group.includes(i)));\n\n\treturn Array(len)\n\t\t.fill(null)\n\t\t.map((_, i) =>\n\t\t\tArray(len)\n\t\t\t\t.fill(null)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tif (j >= i) return null;\n\n\t\t\t\t\tconst id1 = groupIds[i];\n\t\t\t\t\tconst id2 = groupIds[j];\n\n\t\t\t\t\tif (id1 < 0 || id2 < 0) return null;\n\n\t\t\t\t\treturn id1 === id2 ? 1 : 0;\n\t\t\t\t})\n\t\t);\n};\n\nexport {\n\tSemanticElementType,\n\tSemanticElement,\n\tSemanticCluster,\n\tSemanticClusterSet,\n\tELEMENT_TOKEN_NAMES,\n\tNOTEHEAD_ELEMENT_TYPES,\n\tNOTE_ELEMENT_TYPES,\n\tBOS_ELEMENT,\n\tfractionToElems,\n\texpandMatrixByMasks,\n\texpandMatrixByMaskTriu,\n\tmatrixFromGroups,\n};\n","import { MusicNotation } from '@k-l-lambda/music-widgets';\n\n// implicit note (from expressive marks) types\nenum ImplicitType {\n\tNone = 0,\n\n\tMordent = 'mordent',\n\tPrall = 'prall',\n\tTurn = 'turn',\n\tTrill = 'trill',\n\tTremolo = 'tremolo',\n\tArpeggio = 'arpeggio',\n}\n\ninterface ChordPosition {\n\tindex: number;\n\tcount: number;\n}\n\nclass TokenPosition {\n\tsystem?: number;\n\tmeasure?: number;\n\tx: number;\n\tendX?: number;\n}\n\ninterface Note extends MusicNotation.Note {\n\tchordPosition?: ChordPosition;\n\tmeasure?: number;\n}\n\ninterface Notation {\n\tnotes: Note[];\n\tendTick: number;\n}\n\ninterface SheetPosition {\n\tsystem: number;\n\tx: number;\n}\n\nexport { ChordPosition, ImplicitType, TokenPosition, Note, Notation, SheetPosition };\n","\n/* Wrapper for accessing buffer through sequential reads */\n\n\n\nmodule.exports = class Stream {\n\tconstructor (buffer) {\n\t\tthis.array = new Uint8Array(buffer);\n\t\tthis.position = 0;\n\t}\n\n\n\teof () {\n\t\treturn this.position >= this.array.length;\n\t}\n\n\n\tread (length) {\n\t\tconst result = this.array.slice(this.position, this.position + length);\n\t\tthis.position += length;\n\n\t\treturn result;\n\t}\n\n\n\treadString (length) {\n\t\tconst data = Array.from(this.read(length));\n\n\t\treturn data.map(c => String.fromCharCode(c)).join(\"\");\n\t}\n\n\n\t// read a big-endian 32-bit integer\n\treadInt32 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 24) +\n\t\t\t(this.array[this.position + 1] << 16) +\n\t\t\t(this.array[this.position + 2] << 8) +\n\t\t\tthis.array[this.position + 3]);\n\t\tthis.position += 4;\n\n\t\treturn result;\n\t}\n\n\n\t// read a big-endian 16-bit integer\n\treadInt16 () {\n\t\tconst result = (\n\t\t\t(this.array[this.position] << 8) +\n\t\t\tthis.array[this.position + 1]);\n\t\tthis.position += 2;\n\n\t\treturn result;\n\t}\n\n\n\t// read an 8-bit integer\n\treadInt8 (signed) {\n\t\tlet result = this.array[this.position];\n\t\tif (signed && result > 127)\n\t\t\tresult -= 256;\n\t\tthis.position += 1;\n\n\t\treturn result;\n\t}\n\n\n\t/* read a MIDI-style variable-length integer\n\t\t(big-endian value in groups of 7 bits,\n\t\twith top bit set to signify that another byte follows)\n\t*/\n\treadVarInt () {\n\t\tlet result = 0;\n\t\twhile (true) {\n\t\t\tconst b = this.readInt8();\n\t\t\tif (b & 0x80) {\n\t\t\t\tresult += (b & 0x7f);\n\t\t\t\tresult <<= 7;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// b is the last byte\n\t\t\t\treturn result + b;\n\t\t\t}\n\t\t}\n\t}\n};\n","/*\nclass to parse the .mid file format\n(depends on stream.js)\n*/\n\nconst Stream = require(\"./stream.js\");\n\n\n\nmodule.exports = function MidiFile (data) {\n\tfunction readChunk (stream) {\n\t\tconst id = stream.readString(4);\n\t\tconst length = stream.readInt32();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tlength,\n\t\t\tdata: stream.read(length),\n\t\t};\n\t}\n\n\tlet lastEventTypeByte;\n\n\tfunction readEvent (stream) {\n\t\tconst event = {};\n\t\tevent.deltaTime = stream.readVarInt();\n\t\tlet eventTypeByte = stream.readInt8();\n\t\tif ((eventTypeByte & 0xf0) === 0xf0) {\n\t\t\t// system / meta event\n\t\t\tif (eventTypeByte === 0xff) {\n\t\t\t\t// meta event\n\t\t\t\tevent.type = \"meta\";\n\t\t\t\tconst subtypeByte = stream.readInt8();\n\t\t\t\tconst length = stream.readVarInt();\n\n\t\t\t\tswitch (subtypeByte) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\tevent.subtype = \"sequenceNumber\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for sequenceNumber event is 2, got \" + length);\n\t\t\t\t\tevent.number = stream.readInt16();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x01:\n\t\t\t\t\tevent.subtype = \"text\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x02:\n\t\t\t\t\tevent.subtype = \"copyrightNotice\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tevent.subtype = \"trackName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x04:\n\t\t\t\t\tevent.subtype = \"instrumentName\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x05:\n\t\t\t\t\tevent.subtype = \"lyrics\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x06:\n\t\t\t\t\tevent.subtype = \"marker\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x07:\n\t\t\t\t\tevent.subtype = \"cuePoint\";\n\t\t\t\t\tevent.text = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x20:\n\t\t\t\t\tevent.subtype = \"midiChannelPrefix\";\n\t\t\t\t\tif (length !== 1)\n\t\t\t\t\t\tthrow new Error(\"Expected length for midiChannelPrefix event is 1, got \" + length);\n\t\t\t\t\tevent.channel = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x2f:\n\t\t\t\t\tevent.subtype = \"endOfTrack\";\n\t\t\t\t\tif (length !== 0)\n\t\t\t\t\t\tthrow new Error(\"Expected length for endOfTrack event is 0, got \" + length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x51:\n\t\t\t\t\tevent.subtype = \"setTempo\";\n\t\t\t\t\tif (length !== 3)\n\t\t\t\t\t\tthrow new Error(\"Expected length for setTempo event is 3, got \" + length);\n\t\t\t\t\tevent.microsecondsPerBeat = (\n\t\t\t\t\t\t(stream.readInt8() << 16) +\n\t\t\t\t\t\t\t(stream.readInt8() << 8) +\n\t\t\t\t\t\t\tstream.readInt8()\n\t\t\t\t\t);\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x54:\n\t\t\t\t\tevent.subtype = \"smpteOffset\";\n\t\t\t\t\tif (length !== 5)\n\t\t\t\t\t\tthrow new Error(\"Expected length for smpteOffset event is 5, got \" + length);\n\t\t\t\t\tconst hourByte = stream.readInt8();\n\t\t\t\t\tevent.frameRate = {\n\t\t\t\t\t\t0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30,\n\t\t\t\t\t}[hourByte & 0x60];\n\t\t\t\t\tevent.hour = hourByte & 0x1f;\n\t\t\t\t\tevent.min = stream.readInt8();\n\t\t\t\t\tevent.sec = stream.readInt8();\n\t\t\t\t\tevent.frame = stream.readInt8();\n\t\t\t\t\tevent.subframe = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x58:\n\t\t\t\t\tevent.subtype = \"timeSignature\";\n\t\t\t\t\tif (length !== 4)\n\t\t\t\t\t\tthrow new Error(\"Expected length for timeSignature event is 4, got \" + length);\n\t\t\t\t\tevent.numerator = stream.readInt8();\n\t\t\t\t\tevent.denominator = Math.pow(2, stream.readInt8());\n\t\t\t\t\tevent.metronome = stream.readInt8();\n\t\t\t\t\tevent.thirtyseconds = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x59:\n\t\t\t\t\tevent.subtype = \"keySignature\";\n\t\t\t\t\tif (length !== 2)\n\t\t\t\t\t\tthrow new Error(\"Expected length for keySignature event is 2, got \" + length);\n\t\t\t\t\tevent.key = stream.readInt8(true);\n\t\t\t\t\tevent.scale = stream.readInt8();\n\n\t\t\t\t\treturn event;\n\t\t\t\tcase 0x7f:\n\t\t\t\t\tevent.subtype = \"sequencerSpecific\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log(\"Unrecognised meta event subtype: \" + subtypeByte);\n\t\t\t\t\tevent.subtype = \"unknown\";\n\t\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\t\treturn event;\n\t\t\t\t}\n\n\t\t\t\t//event.data = stream.readString(length);\n\t\t\t\t//return event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf0) {\n\t\t\t\tevent.type = \"sysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse if (eventTypeByte === 0xf7) {\n\t\t\t\tevent.type = \"dividedSysEx\";\n\t\t\t\tconst length = stream.readVarInt();\n\t\t\t\tevent.data = stream.readString(length);\n\n\t\t\t\treturn event;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type byte: \" + eventTypeByte);\n\t\t}\n\t\telse {\n\t\t\t/* channel event */\n\t\t\tlet param1;\n\t\t\tif ((eventTypeByte & 0x80) === 0) {\n\t\t\t\t/* running status - reuse lastEventTypeByte as the event type.\n\t\t\t\t\teventTypeByte is actually the first parameter\n\t\t\t\t*/\n\t\t\t\tparam1 = eventTypeByte;\n\t\t\t\teventTypeByte = lastEventTypeByte;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparam1 = stream.readInt8();\n\t\t\t\tlastEventTypeByte = eventTypeByte;\n\t\t\t}\n\n\t\t\tconst eventType = eventTypeByte >> 4;\n\t\t\tevent.channel = eventTypeByte & 0x0f;\n\t\t\tevent.type = \"channel\";\n\n\t\t\tswitch (eventType) {\n\t\t\tcase 0x08:\n\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x09:\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.velocity = stream.readInt8();\n\t\t\t\tif (event.velocity === 0)\n\t\t\t\t\tevent.subtype = \"noteOff\";\n\t\t\t\telse\n\t\t\t\t\tevent.subtype = \"noteOn\";\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0a:\n\t\t\t\tevent.subtype = \"noteAftertouch\";\n\t\t\t\tevent.noteNumber = param1;\n\t\t\t\tevent.amount = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0b:\n\t\t\t\tevent.subtype = \"controller\";\n\t\t\t\tevent.controllerType = param1;\n\t\t\t\tevent.value = stream.readInt8();\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0c:\n\t\t\t\tevent.subtype = \"programChange\";\n\t\t\t\tevent.programNumber = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0d:\n\t\t\t\tevent.subtype = \"channelAftertouch\";\n\t\t\t\tevent.amount = param1;\n\n\t\t\t\treturn event;\n\t\t\tcase 0x0e:\n\t\t\t\tevent.subtype = \"pitchBend\";\n\t\t\t\tevent.value = param1 + (stream.readInt8() << 7);\n\n\t\t\t\treturn event;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unrecognised MIDI event type: \" + eventType);\n\n\t\t\t\t/*\n\t\t\t\tconsole.log(\"Unrecognised MIDI event type: \" + eventType);\n\t\t\t\tstream.readInt8();\n\t\t\t\tevent.subtype = 'unknown';\n\t\t\t\treturn event;\n\t\t\t\t*/\n\t\t\t}\n\t\t}\n\t}\n\n\n\tlet source = data;\n\tif (typeof data === \"string\")\n\t\tsource = data.split(\"\").map(c => c.charCodeAt(0));\n\n\tconst stream = new Stream(source);\n\tconst headerChunk = readChunk(stream);\n\tif (headerChunk.id !== \"MThd\" || headerChunk.length !== 6)\n\t\tthrow new Error(\"Bad .mid file - header not found\");\n\n\tconst headerStream = new Stream(headerChunk.data);\n\tconst formatType = headerStream.readInt16();\n\tconst trackCount = headerStream.readInt16();\n\tconst timeDivision = headerStream.readInt16();\n\n\tlet ticksPerBeat;\n\tif (timeDivision & 0x8000)\n\t\tthrow new Error(\"Expressing time division in SMTPE frames is not supported yet\");\n\telse\n\t\tticksPerBeat = timeDivision;\n\n\n\tconst header = {\n\t\tformatType,\n\t\ttrackCount,\n\t\tticksPerBeat,\n\t};\n\tconst tracks = [];\n\tfor (let i = 0; i < header.trackCount; i++) {\n\t\ttracks[i] = [];\n\t\tconst trackChunk = readChunk(stream);\n\t\tif (trackChunk.id !== \"MTrk\")\n\t\t\tthrow new Error(\"Unexpected chunk - expected MTrk, got \" + trackChunk.id);\n\n\t\tconst trackStream = new Stream(trackChunk.data);\n\t\twhile (!trackStream.eof()) {\n\t\t\tconst event = readEvent(trackStream);\n\t\t\ttracks[i].push(event);\n\t\t}\n\t}\n\n\treturn {\n\t\theader,\n\t\ttracks,\n\t};\n};\n","\r\n/* Wrapper for accessing strings through sequential writes */\r\n\r\n\r\n\r\nmodule.exports = class OStream {\r\n\tconstructor () {\r\n\t\tthis.buffer = \"\";\r\n\t}\r\n\r\n\twrite (str) {\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\t/* write a big-endian 32-bit integer */\r\n\twriteInt32 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 24) & 0xff) + String.fromCharCode((i >> 16) & 0xff) +\r\n\t\t\tString.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a big-endian 16-bit integer */\r\n\twriteInt16 (i) {\r\n\t\tthis.buffer += String.fromCharCode((i >> 8) & 0xff) + String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write an 8-bit integer */\r\n\twriteInt8 (i) {\r\n\t\tthis.buffer += String.fromCharCode(i & 0xff);\r\n\t}\r\n\r\n\t/* write a MIDI-style variable-length integer\r\n\t\t(big-endian value in groups of 7 bits,\r\n\t\twith top bit set to signify that another byte follows)\r\n\t*/\r\n\twriteVarInt (i) {\r\n\t\tif (i < 0)\r\n\t\t\tthrow new Error(\"OStream.writeVarInt minus number: \" + i);\r\n\r\n\t\tconst b = i & 0x7f;\r\n\t\ti >>= 7;\r\n\t\tlet str = String.fromCharCode(b);\r\n\r\n\t\twhile (i) {\r\n\t\t\tconst b = i & 0x7f;\r\n\t\t\ti >>= 7;\r\n\t\t\tstr = String.fromCharCode(b | 0x80) + str;\r\n\t\t}\r\n\r\n\t\tthis.buffer += str;\r\n\t}\r\n\r\n\tgetBuffer () {\r\n\t\treturn this.buffer;\r\n\t}\r\n\r\n\tgetArrayBuffer () {\r\n\t\treturn Uint8Array.from(this.buffer.split(\"\").map(c => c.charCodeAt(0))).buffer;\r\n\t}\r\n};\r\n","/*\r\nclass to encode the .mid file format\r\n(depends on streamEx.js)\r\n*/\r\n\r\nconst OStream = require(\"./streamEx.js\");\r\n\r\n\r\n\r\nmodule.exports = function OMidiFile ({ header, tracks }) {\r\n\tfunction writeChunk (stream, id, data) {\r\n\t\tconsole.assert(id.length === 4, \"chunk id must be 4 byte\");\r\n\r\n\t\tstream.write(id);\r\n\t\tstream.writeInt32(data.length);\r\n\t\tstream.write(data);\r\n\t}\r\n\r\n\tfunction writeEvent (stream, event) {\r\n\t\tif (event.subtype === \"unknown\")\r\n\t\t\treturn;\r\n\r\n\t\tstream.writeVarInt(event.deltaTime);\r\n\r\n\t\tswitch (event.type) {\r\n\t\tcase \"meta\":\r\n\t\t\tstream.writeInt8(0xff);\r\n\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"sequenceNumber\":\r\n\t\t\t\tstream.writeInt8(0x00);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt16(event.number);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"text\":\r\n\t\t\t\tstream.writeInt8(0x01);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"copyrightNotice\":\r\n\t\t\t\tstream.writeInt8(0x02);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"trackName\":\r\n\t\t\t\tstream.writeInt8(0x03);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"instrumentName\":\r\n\t\t\t\tstream.writeInt8(0x04);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"lyrics\":\r\n\t\t\t\tstream.writeInt8(0x05);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"marker\":\r\n\t\t\t\tstream.writeInt8(0x06);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"cuePoint\":\r\n\t\t\t\tstream.writeInt8(0x07);\r\n\t\t\t\tstream.writeVarInt(event.text.length);\r\n\r\n\t\t\t\tstream.write(event.text);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"midiChannelPrefix\":\r\n\t\t\t\tstream.writeInt8(0x20);\r\n\t\t\t\tstream.writeVarInt(1);\r\n\r\n\t\t\t\tstream.writeInt8(event.channel);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"endOfTrack\":\r\n\t\t\t\tstream.writeInt8(0x2f);\r\n\t\t\t\tstream.writeVarInt(0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"setTempo\":\r\n\t\t\t\tstream.writeInt8(0x51);\r\n\t\t\t\tstream.writeVarInt(3);\r\n\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 16) & 0xff);\r\n\t\t\t\tstream.writeInt8((event.microsecondsPerBeat >> 8) & 0xff);\r\n\t\t\t\tstream.writeInt8(event.microsecondsPerBeat & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"smpteOffset\":\r\n\t\t\t\tstream.writeInt8(0x54);\r\n\t\t\t\tstream.writeVarInt(5);\r\n\r\n\t\t\t\tvar frameByte = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }[event.frameRate];\r\n\t\t\t\tstream.writeInt8(event.hour | frameByte);\r\n\t\t\t\tstream.writeInt8(event.min);\r\n\t\t\t\tstream.writeInt8(event.sec);\r\n\t\t\t\tstream.writeInt8(event.frame);\r\n\t\t\t\tstream.writeInt8(event.subframe);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"timeSignature\":\r\n\t\t\t\tstream.writeInt8(0x58);\r\n\t\t\t\tstream.writeVarInt(4);\r\n\r\n\t\t\t\tstream.writeInt8(event.numerator);\r\n\t\t\t\tstream.writeInt8(Math.log2(event.denominator));\r\n\t\t\t\tstream.writeInt8(event.metronome);\r\n\t\t\t\tstream.writeInt8(event.thirtyseconds);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"keySignature\":\r\n\t\t\t\tstream.writeInt8(0x59);\r\n\t\t\t\tstream.writeVarInt(2);\r\n\r\n\t\t\t\tstream.writeInt8(event.key);\r\n\t\t\t\tstream.writeInt8(event.scale);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"sequencerSpecific\":\r\n\t\t\t\tstream.writeInt8(0x7f);\r\n\t\t\t\tstream.writeVarInt(event.data.length);\r\n\r\n\t\t\t\tstream.write(event.data);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"sysEx\":\r\n\t\t\tstream.writeInt8(0xf0);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"dividedSysEx\":\r\n\t\t\tstream.writeInt8(0xf7);\r\n\t\t\tstream.writeVarInt(event.data.length);\r\n\t\t\tstream.write(event.data);\r\n\r\n\t\t\tbreak;\r\n\t\tcase \"channel\":\r\n\t\t\tswitch (event.subtype) {\r\n\t\t\tcase \"noteOn\":\r\n\t\t\t\tstream.writeInt8(0x90 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteOff\":\r\n\t\t\t\tstream.writeInt8(0x80 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.velocity ? event.velocity : 0);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"noteAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xa0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.noteNumber);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"controller\":\r\n\t\t\t\tstream.writeInt8(0xb0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.controllerType);\r\n\t\t\t\tstream.writeInt8(event.value);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"programChange\":\r\n\t\t\t\tstream.writeInt8(0xc0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.programNumber);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"channelAftertouch\":\r\n\t\t\t\tstream.writeInt8(0xd0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.amount);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pitchBend\":\r\n\t\t\t\tstream.writeInt8(0xe0 | event.channel);\r\n\t\t\t\tstream.writeInt8(event.value & 0xff);\r\n\t\t\t\tstream.writeInt8((event.value >> 7) & 0xff);\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(\"unhandled event subtype:\" + event.subtype);\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(\"unhandled event type:\" + event.type);\r\n\t\t}\r\n\t}\r\n\r\n\tconst stream = new OStream();\r\n\r\n\tconst headerChunk = new OStream();\r\n\theaderChunk.writeInt16(header.formatType);\r\n\theaderChunk.writeInt16(tracks.length);\r\n\theaderChunk.writeInt16(header.ticksPerBeat);\r\n\r\n\twriteChunk(stream, \"MThd\", headerChunk.getBuffer());\r\n\r\n\tfor (let i = 0; i < tracks.length; ++i) {\r\n\t\tconst trackChunk = new OStream();\r\n\r\n\t\tfor (let ei = 0; ei < tracks[i].length; ++ei)\r\n\t\t\twriteEvent(trackChunk, tracks[i][ei]);\r\n\r\n\t\twriteChunk(stream, \"MTrk\", trackChunk.getBuffer());\r\n\t}\r\n\r\n\treturn stream.getArrayBuffer();\r\n};\r\n","\nmodule.exports = {\n\tparseMidiData: require(\"./midifile.js\"),\n\tencodeMidiFile: require(\"./midifileEx.js\"),\n};\n","\nconst midiToSequence = (midiFile, {timeWarp = 1} = {}) => {\n\tconst trackStates = [];\n\tlet beatsPerMinute = 120;\n\tconst ticksPerBeat = midiFile.header.ticksPerBeat;\n\n\tfor (let i = 0; i < midiFile.tracks.length; i++) {\n\t\ttrackStates[i] = {\n\t\t\tnextEventIndex: 0,\n\t\t\tticksToNextEvent: (\n\t\t\t\tmidiFile.tracks[i].length ?\n\t\t\t\t\tmidiFile.tracks[i][0].deltaTime :\n\t\t\t\t\tnull\n\t\t\t),\n\t\t};\n\t}\n\n\tfunction getNextEvent () {\n\t\tlet ticksToNextEvent = null;\n\t\tlet nextEventTrack = null;\n\t\tlet nextEventIndex = null;\n\n\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\tif (\n\t\t\t\ttrackStates[i].ticksToNextEvent != null\n\t\t\t\t&& (ticksToNextEvent == null || trackStates[i].ticksToNextEvent < ticksToNextEvent)\n\t\t\t) {\n\t\t\t\tticksToNextEvent = trackStates[i].ticksToNextEvent;\n\t\t\t\tnextEventTrack = i;\n\t\t\t\tnextEventIndex = trackStates[i].nextEventIndex;\n\t\t\t}\n\t\t}\n\t\tif (nextEventTrack != null) {\n\t\t\t/* consume event from that track */\n\t\t\tconst nextEvent = midiFile.tracks[nextEventTrack][nextEventIndex];\n\t\t\tif (midiFile.tracks[nextEventTrack][nextEventIndex + 1]) \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent += midiFile.tracks[nextEventTrack][nextEventIndex + 1].deltaTime;\n\t\t\telse \n\t\t\t\ttrackStates[nextEventTrack].ticksToNextEvent = null;\n\n\t\t\ttrackStates[nextEventTrack].nextEventIndex += 1;\n\t\t\t/* advance timings on all tracks by ticksToNextEvent */\n\t\t\tfor (let i = 0; i < trackStates.length; i++) {\n\t\t\t\tif (trackStates[i].ticksToNextEvent != null) \n\t\t\t\t\ttrackStates[i].ticksToNextEvent -= ticksToNextEvent;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tticksToEvent: ticksToNextEvent,\n\t\t\t\tevent: nextEvent,\n\t\t\t\ttrack: nextEventTrack,\n\t\t\t};\n\t\t}\n\t\telse \n\t\t\treturn null;\n\t\t\n\t};\n\t//\n\tlet midiEvent;\n\tconst events = [];\n\t//\n\tfunction processEvents () {\n\t\tfunction processNext () {\n\t\t\tlet secondsToGenerate = 0;\n\t\t\tif (midiEvent.ticksToEvent > 0) {\n\t\t\t\tconst beatsToGenerate = midiEvent.ticksToEvent / ticksPerBeat;\n\t\t\t\tsecondsToGenerate = beatsToGenerate / (beatsPerMinute / 60);\n\t\t\t}\n\n\t\t\t// beatsPerMinute must be changed after secondsToGenerate calculation\n\t\t\tif ( midiEvent.event.type == \"meta\" && midiEvent.event.subtype == \"setTempo\" ) {\n\t\t\t\t// tempo change events can occur anywhere in the middle and affect events that follow\n\t\t\t\tbeatsPerMinute = 60e+6 / midiEvent.event.microsecondsPerBeat;\n\t\t\t}\n\n\t\t\tconst time = (secondsToGenerate * 1000 * timeWarp) || 0;\n\t\t\tevents.push([ midiEvent, time ]);\n\t\t\tmidiEvent = getNextEvent();\n\t\t};\n\t\t//\n\t\tif (midiEvent = getNextEvent()) {\n\t\t\twhile (midiEvent)\n\t\t\t\tprocessNext();\n\t\t}\n\t};\n\n\tprocessEvents();\n\n\treturn events;\n};\n\n\nconst trimSequence = seq => {\n\tconst status = new Map();\n\n\treturn seq.filter(([{event, ticksToEvent}]) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tstatus.clear();\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn true;\n\n\t\tconst key = `${event.subtype}|${event.channel}|${event.noteNumber}`;\n\n\t\tif (status.get(key)) {\n\t\t\t//console.debug(\"event trimmed:\", event, ticksToEvent);\n\t\t\treturn false;\n\t\t}\n\n\t\tstatus.set(key, event);\n\n\t\treturn true;\n\t});\n};\n\n\nconst fixOverlapNotes = seq => {\n\tconst noteMap = new Map();\n\tconst overlapMap = new Map();\n\tconst swaps = [];\n\n\tlet leapIndex = -1;\n\n\tseq.forEach(([{event, ticksToEvent}], index) => {\n\t\tif (ticksToEvent > 0)\n\t\t\tleapIndex = index;\n\n\t\tif (event.type !== \"channel\")\n\t\t\treturn;\n\n\t\tconst key = `${event.channel}|${event.noteNumber}`;\n\n\t\tswitch (event.subtype) {\n\t\tcase \"noteOn\":\n\t\t\tif (noteMap.get(key))\n\t\t\t\toverlapMap.set(key, leapIndex);\n\t\t\telse\n\t\t\t\tnoteMap.set(key, leapIndex);\n\n\t\t\tbreak;\n\t\tcase \"noteOff\":\n\t\t\tif (overlapMap.get(key)) {\n\t\t\t\tswaps.push([overlapMap.get(key), index]);\n\t\t\t\toverlapMap.delete(key);\n\t\t\t}\n\t\t\telse\n\t\t\t\tnoteMap.delete(key);\n\n\t\t\tbreak;\n\t\t}\n\t});\n\n\t// shift overlapped swaps\n\tswaps.forEach((swap, i) => {\n\t\tfor (let ii = i - 1; ii >= 0; --ii) {\n\t\t\tconst pre = swaps[ii];\n\t\t\tif (pre[1] < swap[0])\n\t\t\t\tbreak;\n\n\t\t\tif (swap[0] > pre[0])\n\t\t\t\t++swap[0];\n\t\t}\n\t});\n\n\t//console.debug(\"swaps:\", swaps);\n\tswaps.forEach(([front, back]) => {\n\t\tif (back >= seq.length - 1 || front < 0)\n\t\t\treturn;\n\n\t\tconst offEvent = seq[back];\n\t\tconst nextEvent = seq[back + 1];\n\t\tconst leapEvent = seq[front];\n\n\t\tif (!leapEvent[0].ticksToEvent) {\n\t\t\tconsole.warn(\"invalid front index:\", front, back, leapEvent);\n\t\t\treturn;\n\t\t}\n\n\t\t// ms per tick\n\t\tconst tempo = leapEvent[1] / leapEvent[0].ticksToEvent;\n\n\t\tnextEvent[1] += offEvent[1];\n\t\tnextEvent[0].ticksToEvent += offEvent[0].ticksToEvent;\n\n\t\toffEvent[0].ticksToEvent = leapEvent[0].ticksToEvent - 1;\n\t\tleapEvent[0].ticksToEvent = 1;\n\n\t\toffEvent[1] = offEvent[0].ticksToEvent * tempo;\n\t\tleapEvent[1] = leapEvent[0].ticksToEvent * tempo;\n\t\t//console.debug(\"swap:\", [front, back], offEvent, nextEvent, leapEvent);\n\n\t\tseq.splice(back, 1);\n\t\tseq.splice(front, 0, offEvent);\n\t});\n\n\treturn seq;\n};\n\n\n\nmodule.exports = {\n\tmidiToSequence,\n\ttrimSequence,\n\tfixOverlapNotes,\n};\n","\nconst MidiSequence = require(\"./MidiSequence.js\");\n\n\n\nconst PedalControllerTypes = {\n\t64: \"Sustain\",\n\t65: \"Portamento\",\n\t66: \"Sostenuto\",\n\t67: \"Soft\",\n};\n\n\n\nclass Notation {\n\tstatic parseMidi (data, {fixOverlap = true} = {}) {\n\t\tconst channelStatus = [];\n\t\tconst pedalStatus = {};\n\t\tconst pedals = {};\n\t\tconst channels = [];\n\t\tconst bars = [];\n\t\tlet time = 0;\n\t\tlet millisecondsPerBeat = 600000 / 120;\n\t\tlet beats = 0;\n\t\tlet numerator = 4;\n\t\tlet barIndex = 0;\n\t\tconst keyRange = {};\n\t\tlet rawTicks = 0;\n\t\tlet ticks = 0;\n\t\tlet correspondences;\n\t\tconst tempos = [];\n\n\t\tconst ticksPerBeat = data.header.ticksPerBeat;\n\n\t\tlet rawEvents = MidiSequence.midiToSequence(data);\n\n\t\tif (fixOverlap)\n\t\t\trawEvents = MidiSequence.trimSequence(MidiSequence.fixOverlapNotes(rawEvents));\n\n\t\tconst events = rawEvents.map(d => ({\n\t\t\tdata: d[0].event,\n\t\t\ttrack: d[0].track,\n\t\t\tdeltaTime: d[1],\n\t\t\tdeltaTicks: d[0].ticksToEvent,\n\t\t}));\n\n\t\tlet index = 0;\n\n\t\tconst ticksNormal = 1;\n\n\t\tfor (const ev of events) {\n\t\t\trawTicks += ev.deltaTicks;\n\t\t\tticks = Math.round(rawTicks * ticksNormal);\n\n\t\t\tif (ev.deltaTicks > 0) {\n\t\t\t\t// append bars\n\t\t\t\tconst deltaBeats = ev.deltaTicks / ticksPerBeat;\n\t\t\t\tfor (let b = Math.ceil(beats); b < beats + deltaBeats; ++b) {\n\t\t\t\t\tconst t = time + (b - beats) * millisecondsPerBeat;\n\t\t\t\t\tbars.push({time: t, index: barIndex % numerator});\n\n\t\t\t\t\t++barIndex;\n\t\t\t\t}\n\n\t\t\t\tbeats += deltaBeats;\n\t\t\t}\n\n\t\t\ttime += ev.deltaTime;\n\n\t\t\t//const ticksTime = beats * millisecondsPerBeat;\n\t\t\t//console.log(\"time:\", time, ticksTime, ticksTime - time);\n\n\t\t\tev.time = time;\n\t\t\tev.ticks = ticks;\n\n\t\t\tconst event = ev.data;\n\t\t\tswitch (event.type) {\n\t\t\tcase \"channel\":\n\t\t\t\t//channelStatus[event.channel] = channelStatus[event.channel] || [];\n\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"noteOn\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\t\t\t\t\t\t//channelStatus[event.channel][pitch] = {\n\t\t\t\t\t\tchannelStatus.push({\n\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\tstartTick: ticks,\n\t\t\t\t\t\t\tstart: time,\n\t\t\t\t\t\t\tvelocity: event.velocity,\n\t\t\t\t\t\t\tbeats: beats,\n\t\t\t\t\t\t\ttrack: ev.track,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tkeyRange.low = Math.min(keyRange.low || pitch, pitch);\n\n\t\t\t\t\t\tev.index = index;\n\t\t\t\t\t\t++index;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"noteOff\":\n\t\t\t\t\t{\n\t\t\t\t\t\tconst pitch = event.noteNumber;\n\n\t\t\t\t\t\tchannels[event.channel] = channels[event.channel] || [];\n\n\t\t\t\t\t\tconst statusIndex = channelStatus.findIndex(status => status.channel == event.channel && status.pitch == pitch);\n\t\t\t\t\t\tif (statusIndex >= 0) {\n\t\t\t\t\t\t\tconst status = channelStatus.splice(statusIndex, 1)[0];\n\n\t\t\t\t\t\t\tchannels[event.channel].push({\n\t\t\t\t\t\t\t\tchannel: event.channel,\n\t\t\t\t\t\t\t\tstartTick: status.startTick,\n\t\t\t\t\t\t\t\tendTick: ticks,\n\t\t\t\t\t\t\t\tpitch,\n\t\t\t\t\t\t\t\tstart: status.start,\n\t\t\t\t\t\t\t\tduration: time - status.start,\n\t\t\t\t\t\t\t\tvelocity: status.velocity,\n\t\t\t\t\t\t\t\tbeats: status.beats,\n\t\t\t\t\t\t\t\ttrack: status.track,\n\t\t\t\t\t\t\t\tfinger: status.finger,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tconsole.debug(\"unexpected noteOff: \", time, event);\n\n\t\t\t\t\t\tkeyRange.high = Math.max(keyRange.high || pitch, pitch);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"controller\":\n\t\t\t\t\tswitch (event.controllerType) {\n\t\t\t\t\t// pedal controllers\n\t\t\t\t\tcase 64:\n\t\t\t\t\tcase 65:\n\t\t\t\t\tcase 66:\n\t\t\t\t\tcase 67:\n\t\t\t\t\t\tconst pedalType = PedalControllerTypes[event.controllerType];\n\n\t\t\t\t\t\tpedalStatus[event.channel] = pedalStatus[event.channel] || {};\n\t\t\t\t\t\tpedals[event.channel] = pedals[event.channel] || [];\n\n\t\t\t\t\t\tconst status = pedalStatus[event.channel][pedalType];\n\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tpedals[event.channel].push({type: pedalType, start: status.start, duration: time - status.start, value: status.value});\n\t\t\t\t\t\tpedalStatus[event.channel][pedalType] = {start: time, value: event.value};\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tswitch (event.subtype) {\n\t\t\t\tcase \"setTempo\":\n\t\t\t\t\tmillisecondsPerBeat = event.microsecondsPerBeat / 1000;\n\t\t\t\t\t//beats = Math.round(beats);\n\t\t\t\t\t//console.assert(Number.isFinite(time), \"invalid time:\", time);\n\t\t\t\t\ttempos.push({tempo: event.microsecondsPerBeat, tick: ticks, time});\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"timeSignature\":\n\t\t\t\t\tnumerator = event.numerator;\n\t\t\t\t\tbarIndex = 0;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tif (!correspondences && /^find-corres:/.test(event.text)) {\n\t\t\t\t\t\tconst captures = event.text.match(/:([\\d\\,-]+)/);\n\t\t\t\t\t\tconst str = captures && captures[1] || \"\";\n\t\t\t\t\t\tcorrespondences = str.split(\",\").map(s => Number(s));\n\t\t\t\t\t}\n\t\t\t\t\telse if (/fingering\\(.*\\)/.test(event.text)) {\n\t\t\t\t\t\tconst [_, fingers] = event.text.match(/\\((.+)\\)/);\n\t\t\t\t\t\tconst finger = Number(fingers);\n\t\t\t\t\t\tif (!Number.isNaN(finger)) {\n\t\t\t\t\t\t\tconst status = channelStatus[channelStatus.length - 1];\n\t\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\t\tstatus.finger = finger;\n\n\t\t\t\t\t\t\tconst event = events.find(e => e.index == index - 1);\n\t\t\t\t\t\t\tif (event)\n\t\t\t\t\t\t\t\tevent.data.finger = finger;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"copyrightNotice\":\n\t\t\t\t\tconsole.log(\"MIDI copyright:\", event.text);\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tchannelStatus.forEach(status => {\n\t\t\tconsole.debug(\"unclosed noteOn event at\", status.startTick, status);\n\n\t\t\tchannels[status.channel].push({\n\t\t\t\tstartTick: status.startTick,\n\t\t\t\tendTick: ticks,\n\t\t\t\tpitch: status.pitch,\n\t\t\t\tstart: status.start,\n\t\t\t\tduration: time - status.start,\n\t\t\t\tvelocity: status.velocity,\n\t\t\t\tbeats: status.beats,\n\t\t\t\ttrack: status.track,\n\t\t\t\tfinger: status.finger,\n\t\t\t});\n\t\t});\n\n\t\treturn new Notation({\n\t\t\tchannels,\n\t\t\tkeyRange,\n\t\t\tpedals,\n\t\t\tbars,\n\t\t\tendTime: time,\n\t\t\tendTick: ticks,\n\t\t\tcorrespondences,\n\t\t\tevents,\n\t\t\ttempos,\n\t\t\tticksPerBeat,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\n\tconstructor (fields) {\n\t\tObject.assign(this, fields);\n\n\t\t// channels to notes\n\t\tthis.notes = [];\n\t\tfor (const channel of this.channels) {\n\t\t\tif (channel) {\n\t\t\t\tfor (const note of channel)\n\t\t\t\t\tthis.notes.push(note);\n\t\t\t}\n\t\t}\n\t\tthis.notes.sort(function (n1, n2) {\n\t\t\treturn n1.start - n2.start;\n\t\t});\n\n\t\tfor (const i in this.notes)\n\t\t\tthis.notes[i].index = Number(i);\n\n\n\t\t// duration\n\t\tthis.duration = this.notes.length > 0 ? (this.endTime - this.notes[0].start) : 0,\n\n\t\t//this.endSoftIndex = this.notes.length ? this.notes[this.notes.length - 1].softIndex : 0;\n\n\n\t\t// pitch map\n\t\tthis.pitchMap = [];\n\t\tfor (const c in this.channels) {\n\t\t\tfor (const n in this.channels[c]) {\n\t\t\t\tconst pitch = this.channels[c][n].pitch;\n\t\t\t\tthis.pitchMap[pitch] = this.pitchMap[pitch] || [];\n\n\t\t\t\tthis.pitchMap[pitch].push(this.channels[c][n]);\n\t\t\t}\n\t\t}\n\n\t\tthis.pitchMap.forEach(notes => notes.sort((n1, n2) => n1.start - n2.start));\n\n\n\t\t/*// setup measure notes index\n\t\tif (this.measures) {\n\t\t\tconst measure_list = [];\n\n\t\t\tlet last_measure = null;\n\t\t\tconst measure_entries = Object.entries(this.measures).sort((e1, e2) => Number(e1[0]) - Number(e2[0]));\n\t\t\tfor (const [t, measure] of measure_entries) {\n\t\t\t\t//console.log(\"measure time:\", Number(t));\n\t\t\t\tmeasure.startTick = Number(t);\n\t\t\t\tmeasure.notes = [];\n\n\t\t\t\tif (last_measure)\n\t\t\t\t\tlast_measure.endTick = measure.startTick;\n\n\t\t\t\tconst m = measure.measure;\n\t\t\t\tmeasure_list[m] = measure_list[m] || [];\n\t\t\t\tmeasure_list[m].push(measure);\n\n\t\t\t\tlast_measure = measure;\n\t\t\t}\n\t\t\tif (last_measure)\n\t\t\t\tlast_measure.endTick = this.notes[this.notes.length - 1].endTick;\n\t\t\tfor (const i in this.notes) {\n\t\t\t\tconst note = this.notes[i];\n\t\t\t\tfor (const t in this.measures) {\n\t\t\t\t\tconst measure = this.measures[t];\n\t\t\t\t\tif (note.startTick >= measure.startTick && note.startTick < measure.endTick || note.endTick > measure.startTick && note.endTick <= measure.endTick)\n\t\t\t\t\t\tmeasure.notes.push(note);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.measure_list = measure_list;\n\t\t}*/\n\n\n\t\t// prepare beats info\n\t\tif (this.meta.beatInfos) {\n\t\t\tfor (let i = 0; i < this.meta.beatInfos.length; ++i) {\n\t\t\t\tconst info = this.meta.beatInfos[i];\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tconst lastInfo = this.meta.beatInfos[i - 1];\n\t\t\t\t\tinfo.beatIndex = lastInfo.beatIndex + Math.ceil((info.tick - lastInfo.tick) / this.ticksPerBeat);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tinfo.beatIndex = 0;\n\t\t\t}\n\t\t}\n\n\n\t\t// compute tempos tick -> time\n\t\t{\n\t\t\tlet time = 0;\n\t\t\tlet ticks = 0;\n\t\t\tlet tempo = 500000;\n\t\t\tfor (const entry of this.tempos) {\n\t\t\t\tconst deltaTicks = entry.tick - ticks;\n\t\t\t\ttime += (tempo / 1000) * deltaTicks / this.ticksPerBeat;\n\n\t\t\t\tticks = entry.tick;\n\t\t\t\ttempo = entry.tempo;\n\n\t\t\t\tentry.time = time;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfindChordBySoftindex (softIndex, radius = 0.8) {\n\t\treturn this.notes.filter(note => Math.abs(note.softIndex - softIndex) < radius);\n\t}\n\n\n\taverageTempo (tickRange) {\n\t\ttickRange = tickRange || {from: 0, to: this.endtick};\n\n\t\tconsole.assert(this.tempos, \"no tempos.\");\n\t\tconsole.assert(tickRange.to > tickRange.from, \"range is invalid:\", tickRange);\n\n\t\tconst span = index => {\n\t\t\tconst from = Math.max(tickRange.from, this.tempos[index].tick);\n\t\t\tconst to = (index < this.tempos.length - 1) ? Math.min(this.tempos[index + 1].tick, tickRange.to) : tickRange.to;\n\n\t\t\treturn Math.max(0, to - from);\n\t\t};\n\n\t\tconst tempo_sum = this.tempos.reduce((sum, tempo, index) => sum + tempo.tempo * span(index), 0);\n\n\t\tconst average = tempo_sum / (tickRange.to - tickRange.from);\n\n\t\t// convert microseconds per beat to beats per minute\n\t\treturn 60e+6 / average;\n\t}\n\n\n\tticksToTime (tick) {\n\t\tconsole.assert(Number.isFinite(tick), \"invalid tick value:\", tick);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.tick > tick);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.time + (tick - tempo.tick) * tempo.tempo * 1e-3 / this.ticksPerBeat;\n\t}\n\n\n\ttimeToTicks (time) {\n\t\tconsole.assert(Number.isFinite(time), \"invalid time value:\", time);\n\t\tconsole.assert(this.tempos && this.tempos.length, \"no tempos.\");\n\n\t\tconst next_tempo_index = this.tempos.findIndex(tempo => tempo.time > time);\n\t\tconst tempo_index = next_tempo_index < 0 ? this.tempos.length - 1 : Math.max(next_tempo_index - 1, 0);\n\n\t\tconst tempo = this.tempos[tempo_index];\n\n\t\treturn tempo.tick + (time - tempo.time) * this.ticksPerBeat / (tempo.tempo * 1e-3);\n\t}\n\n\n\ttickRangeToTimeRange (tickRange) {\n\t\tconsole.assert(tickRange.to >= tickRange.from, \"invalid tick range:\", tickRange);\n\n\t\treturn {\n\t\t\tfrom: this.ticksToTime(tickRange.from),\n\t\t\tto: this.ticksToTime(tickRange.to),\n\t\t};\n\t}\n\n\n\t/*getMeasureRange (measureRange) {\n\t\tconsole.assert(Number.isInteger(measureRange.start) && Number.isInteger(measureRange.end), \"invalid measure range:\", measureRange);\n\t\tconsole.assert(this.measure_list && this.measure_list[measureRange.start] && this.measure_list[measureRange.end], \"no measure data for specific index:\", this.measure_list, measureRange);\n\n\t\tconst startMeasure = this.measure_list[measureRange.start][0];\n\t\tlet endMeasure = null;\n\t\tfor (const measure of this.measure_list[measureRange.end]) {\n\t\t\tif (measure.endTick > startMeasure.startTick) {\n\t\t\t\tendMeasure = measure;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// there no path between start measure and end measure.\n\t\tif (!endMeasure)\n\t\t\treturn null;\n\n\t\tconst tickRange = {from: startMeasure.startTick, to: endMeasure.endTick, duration: endMeasure.endTick - startMeasure.startTick};\n\t\tconst timeRange = this.tickRangeToTimeRange(tickRange);\n\t\ttimeRange.duration = timeRange.to - timeRange.from;\n\n\t\treturn {\n\t\t\ttickRange,\n\t\t\ttimeRange,\n\t\t};\n\t}*/\n\n\n\tscaleTempo ({factor, headTempo}) {\n\t\tconsole.assert(this.tempos && this.tempos.length, \"[Notation.scaleTempo] tempos is empty.\");\n\n\t\tif (headTempo)\n\t\t\tfactor = headTempo / this.tempos[0].tempo;\n\n\t\tconsole.assert(Number.isFinite(factor) && factor > 0, \"[Notation.scaleTempo] invalid factor:\", factor);\n\n\t\tthis.tempos.forEach(tempo => {\n\t\t\ttempo.tempo *= factor;\n\t\t\ttempo.time *= factor;\n\t\t});\n\t\tthis.events.forEach(event => {\n\t\t\tevent.deltaTime *= factor;\n\t\t\tevent.time *= factor;\n\t\t});\n\t\tthis.notes.forEach(note => {\n\t\t\tnote.start *= factor;\n\t\t\tnote.duration *= factor;\n\t\t});\n\n\t\tthis.endTime *= factor;\n\t}\n};\n\n\n\nmodule.exports = {\n\tNotation,\n};\n","\nconst { Notation } = require(\"./MusicNotation.js\");\n\n\n\n//const msDelay = ms => new Promise(resolve => setTimeout(resolve, ms));\nconst animationDelay = () => new Promise(resolve => requestAnimationFrame(resolve));\n\n\nclass MidiPlayer {\n\tconstructor (midiData, {cacheSpan = 600, onMidi, onPlayFinish, onTurnCursor} = {}) {\n\t\tthis.cacheSpan = cacheSpan;\n\t\tthis.onMidi = onMidi;\n\t\tthis.onPlayFinish = onPlayFinish;\n\t\tthis.onTurnCursor = onTurnCursor;\n\n\t\tlet notation;\n\t\tif (midiData.notes && Number.isFinite(midiData.endTime))\n\t\t\tnotation = midiData;\n\t\telse\n\t\t\tnotation = Notation.parseMidi(midiData);\n\n\t\tthis.notation = notation;\n\t\tthis.events = notation.events;\n\t\t//console.log(\"events:\", this.events);\n\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t\tthis.startTime = performance.now();\n\t\tthis.duration = notation.endTime;\n\t\tthis.cursorTurnDelta = 0;\n\n\t\tconsole.assert(notation.tempos && notation.tempos.length, \"[MidiPlayer] invalid notation, tempos is empty.\");\n\t}\n\n\n\tdispose () {\n\t\tthis.isPlaying = false;\n\t\tthis.progressTime = 0;\n\t}\n\n\n\tget progressTicks () {\n\t\treturn this.notation.timeToTicks(this.progressTime);\n\t}\n\n\n\tset progressTicks (value) {\n\t\tthis.progressTime = this.notation.ticksToTime(value);\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(this.progressTime);\n\t}\n\n\n\tasync play ({nextFrame = animationDelay} = {}) {\n\t\tif (this.progressTime >= this.duration)\n\t\t\tthis.progressTime = 0;\n\n\t\tlet now = performance.now();\n\t\tthis.startTime = now - this.progressTime;\n\n\t\tthis.isPlaying = true;\n\n\t\tlet currentEventIndex = this.events.findIndex(event => event.time >= now - this.startTime);\n\n\t\twhile (this.isPlaying) {\n\t\t\tfor (; currentEventIndex < this.events.length; ++currentEventIndex) {\n\t\t\t\tconst event = this.events[currentEventIndex];\n\t\t\t\t//console.log(\"play event:\", currentEventIndex, event.time, this.progressTime + this.cacheSpan);\n\t\t\t\tif (!event || event.time > this.progressTime + this.cacheSpan)\n\t\t\t\t\tbreak;\n\n\t\t\t\tif (event.data.type === \"channel\" && this.startTime + event.time >= now)\n\t\t\t\t\tif (this.onMidi)\n\t\t\t\t\t\tthis.onMidi(event.data, this.startTime + event.time);\n\t\t\t}\n\n\t\t\tawait nextFrame();\n\n\t\t\tif (!this.isPlaying)\n\t\t\t\tbreak;\n\n\t\t\tif (this.cursorTurnDelta !== 0) {\n\t\t\t\tconst backturn = this.cursorTurnDelta < 0;\n\n\t\t\t\tthis.startTime -= this.cursorTurnDelta;\n\t\t\t\tthis.cursorTurnDelta = 0;\n\n\t\t\t\tif (backturn) {\n\t\t\t\t\tfor (; currentEventIndex > 0; --currentEventIndex) {\n\t\t\t\t\t\tconst eventTime = this.events[currentEventIndex].time;\n\t\t\t\t\t\tif (this.startTime + eventTime < now)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnow = performance.now();\n\n\t\t\tthis.progressTime = now - this.startTime;\n\n\t\t\tif (this.progressTime > this.duration) {\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t\tif (this.onPlayFinish)\n\t\t\t\t\tthis.onPlayFinish();\n\t\t\t}\n\t\t}\n\t}\n\n\n\tpause () {\n\t\tthis.isPlaying = false;\n\t}\n\n\n\tturnCursor (time) {\n\t\t//console.log(\"onTurnCursor:\", time, oldTime);\n\t\tif (this.isPlaying)\n\t\t\tthis.cursorTurnDelta += time - this.progressTime;\n\t\telse\n\t\t\tthis.progressTime = time;\n\n\t\tif (this.onTurnCursor)\n\t\t\tthis.onTurnCursor(time);\n\t}\n};\n\n\n\nmodule.exports = MidiPlayer;\n","\nmodule.exports = {\n\tCostStepAttenuation: 0.6,\n\tSkipDeep: 3,\n\tPriorDistanceSigmoidFactor: 0.1,\n\tPriorValueSigmoidFactor: 0.12,\n\n\tSkipCost: 0.5,\n\tLagOffsetCost: 1,\n\tLeadOffsetCost: 1.6,\n\tZeroOffsetCost: 0.58,\n\n\tRelocationThreshold: 6,\n};\n","\nconst {pick} = require(\"lodash\");\n\nconst Config = require(\"./config.js\");\n\n\n\nclass Node {\n\tconstructor (s_note, c_note) {\n\t\tthis.s_note = s_note;\n\t\tthis.c_note = c_note;\n\n\t\tconsole.assert(this.s_note.softIndex != null, \"s_note softIndex is null\");\n\t\tthis.offset = this.s_note.softIndex - this.c_note.softIndex;\n\n\t\tthis._prev = null;\n\t\tthis._totalCost = 0;\n\t\tthis._value = 0;\n\t\tthis.cacheDirty = true;\n\n\t\t//this.evaluatePrev(Node.Zero);\n\t}\n\n\n\tget prev () {\n\t\treturn this._prev;\n\t}\n\n\n\tset prev (value) {\n\t\tif (value != this._prev) {\n\t\t\tthis._prev = value;\n\t\t\tthis.cacheDirty = true;\n\t\t}\n\t}\n\n\n\tget si () {\n\t\treturn this.s_note.index;\n\t}\n\n\n\tget ci () {\n\t\treturn this.c_note.index;\n\t}\n\n\n\tget root () {\n\t\treturn this.prev.root || this;\n\t}\n\n\n\tget rootSi () {\n\t\treturn !this.prev.zero ? this.prev.rootSi : this.si;\n\t}\n\n\n\tget id () {\n\t\treturn `${this.s_note.index},${this.c_note.index}`;\n\t}\n\n\n\tstatic cost (prev, skip, self) {\n\t\treturn prev * Config.CostStepAttenuation + Math.tanh(skip * Config.SkipCost) + Math.tanh(self * 0.5);\n\t}\n\n\n\tupdateCache () {\n\t\tif (this.cacheDirty) {\n\t\t\tthis._totalCost = Node.cost(this.prev.totalCost, this.si - this.prev.si - 1, this.selfCost);\n\t\t\tthis._value = this.prev.value + 1 - Math.tanh(this.selfCost * 0.5);\n\n\t\t\tthis.cacheDirty = false;\n\t\t}\n\t}\n\n\n\tget totalCost () {\n\t\tthis.updateCache();\n\n\t\treturn this._totalCost;\n\t}\n\n\n\tget value () {\n\t\tthis.updateCache();\n\n\t\treturn this._value;\n\t}\n\n\n\tget deep () {\n\t\treturn this.prev.deep + 1;\n\t}\n\n\n\tget path () {\n\t\tconst path = [];\n\t\tfor (let node = this; !node.zero; node = node.prev) {\n\t\t\tpath[node.si] = node.ci;\n\t\t}\n\n\t\tfor (let i = 0; i < path.length; ++i)\n\t\t\tif (typeof path[i] != \"number\")\n\t\t\t\tpath[i] = -1;\n\n\t\treturn path;\n\t}\n\n\n\tdump () {\n\t\treturn pick(this, [\"id\", \"si\", \"ci\", \"rootSi\", \"value\", \"deep\", \"rootSi\", \"offset\", \"prior\", \"selfCost\", \"totalCost\"]);\n\t}\n\n\n\tevaluatePrev (node) {\n\t\tconst cost = this.evaluatePrevCost(node);\n\n\t\tconsole.assert(this.si - node.si >= 1, \"node index error:\", this, node/*, {get [Symbol.toStringTag]() {debugger}}*/);\n\t\t//if (this.si - node.si < 1)\n\t\t//\tdebugger;\n\n\t\tconst totalCost = Node.cost(node.totalCost, this.si - node.si - 1, cost);\n\n\t\tif (!this.prev || totalCost < this.totalCost) {\n\t\t\tthis.prev = node;\n\t\t\tthis.selfCost = cost;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tevaluatePrevCost (node) {\n\t\tlet cost = 0;\n\n\t\tif (node.offset != null) {\n\t\t\tconst bias = this.offset - node.offset;\n\t\t\tconst costCoeff = node.zero ? Config.ZeroOffsetCost : (bias > 0 ? Config.LagOffsetCost : Config.LeadOffsetCost);\n\t\t\tcost += (bias * costCoeff) ** 2;\n\t\t}\n\n\t\treturn cost;\n\t}\n\n\n\tpriorByOffset (offset) {\n\t\tconst distance = Math.abs(this.offset - offset) / 1;//(this.s_note.deltaSi + 0.04);\n\n\t\treturn Math.tanh(this.value * Config.PriorValueSigmoidFactor) - Math.tanh(distance * Config.PriorDistanceSigmoidFactor);\n\t\t//return Math.log(this.value) * Math.tanh(4 / distance);\n\t\t//return this.value - distance;\n\t}\n\n\n\tstatic zero () {\n\t\treturn {\n\t\t\tzero: true,\n\t\t\ttotalCost: 0,\n\t\t\tvalue: 0,\n\t\t\tsi: -1,\n\t\t\tci: -1,\n\t\t\tdeep: 0,\n\t\t\toffset: 0,\n\t\t};\n\t}\n};\n\n\n\nmodule.exports = Node;\n","\nconst Config = require(\"./config.js\");\nconst Node = require(\"./node.js\");\n\n\n\nclass Navigator {\n\tconstructor (criterion, sample, options = {}) {\n\t\tthis.criterion = criterion;\n\t\tthis.sample = sample;\n\n\t\tthis.getCursorOffset = options.getCursorOffset || (() => null);\n\t\tthis.outOfPage = options.outOfPage;\n\n\t\tthis.bestNode = null;\n\t\tthis.fineCursor = null;\n\n\t\tthis.breakingSI = sample.notes.length - 1;\n\n\t\tthis.zeroNode = Node.zero();\n\t\tthis.zeroNode.offset = this.getCursorOffset() || 0;\n\n\t\tthis.relocationThreshold = options.relocationThreshold || Config.RelocationThreshold;\n\t}\n\n\n\tstep (index) {\n\t\t//console.log(\"step:\", this.zeroNode.offset);\n\t\tconst note = this.sample.notes[index];\n\n\t\tif (note.matches.length > 0) {\n\t\t\t//console.log(\"zeroNode.offset:\", index, this.zeroNode.offset);\n\t\t\tnote.matches.forEach(node => {\n\t\t\t\tnode.evaluatePrev(this.zeroNode);\n\t\t\t\t//console.log(\"node:\", node, node.evaluatePrevCost(this.zeroNode), node.offset, this.zeroNode.offset);\n\n\t\t\t\tfor (let si = index - 1; si >= Math.max(this.breakingSI + 1, index - Config.SkipDeep); --si) {\n\t\t\t\t\t//const skipCost = Config.SkipCost * (index - 1 - si);\n\n\t\t\t\t\tconst prevNote = this.sample.notes[si];\n\t\t\t\t\tconsole.assert(prevNote, \"prevNote is null:\", si, index, this.sample.notes);\n\t\t\t\t\tprevNote.matches.forEach(prevNode => {\n\t\t\t\t\t\tconst bias = node.offset - prevNode.offset;\n\t\t\t\t\t\tif (/*prevNode.totalCost + skipCost < node.totalCost\n\t\t\t\t\t\t\t&&*/ (bias < 2 / Config.LagOffsetCost && bias > -2 / Config.LeadOffsetCost))\n\t\t\t\t\t\t\tnode.evaluatePrev(prevNode);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tnode.prior = node.totalCost > 1.99 ? -1 : node.priorByOffset(this.zeroNode.offset);\n\n\t\t\t\tif (node.prior > 0 && this.outOfPage) {\n\t\t\t\t\tconst tick = this.criterion.notes[node.ci].startTick;\n\t\t\t\t\tif (this.outOfPage(tick))\n\t\t\t\t\t\tnode.prior -= 0.7;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tnote.matches.sort((c1, c2) => c2.prior - c1.prior);\n\t\t\tthis.cursors = note.matches;\n\t\t\t//console.log(\"navigator cursors:\", this.cursors);\n\n\t\t\tlet fineCursor = null;\n\t\t\tconst nullLength = this.nullSteps(index);\n\n\t\t\tconst cursor = this.cursors[0];\n\t\t\tif (cursor && cursor.totalCost < 1) {\n\t\t\t\t//console.log(\"nullLength:\", nullLength, nullLength * Math.log(cursor.value / 4));\n\t\t\t\tif (cursor.prior > 0 || (cursor.totalCost < 0.4 && Math.log(Math.max(nullLength * cursor.value, 1e-3)) > this.relocationThreshold)) {\n\t\t\t\t\tthis.zeroNode.offset = cursor.offset;\n\n\t\t\t\t\tfineCursor = cursor;\n\n\t\t\t\t\tif (!this.bestNode || cursor.value > this.bestNode.value)\n\t\t\t\t\t\tthis.bestNode = cursor;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fineCursor)\n\t\t\t\tthis.fineCursor = fineCursor;\n\t\t\telse {\n\t\t\t\tif (!this.resetCursor(index, {breaking: false/*nullLength > Config.SkipDeep*/})) {\n\t\t\t\t\tthis.zeroNode.offset += note.deltaSi * Math.tanh(nullLength);\n\t\t\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", note.deltaSi, nullLength);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis.cursors = [];\n\t}\n\n\n\tpath ({fromIndex = 0, toIndex = this.sample.notes.length - 1} = {}) {\n\t\tconst path = [];\n\n\t\tlet offset = null;\n\n\t\tfor (let si = toIndex; si >= fromIndex;) {\n\t\t\tconst note = this.sample.notes[si];\n\n\t\t\tif (!note.matches.length || note.matches[0].prior < -0.01 || note.matches[0].totalCost >= 1) {\n\t\t\t\t//if (note.matches.length)\n\t\t\t\t//\tconsole.log(\"path -1:\", si, note.matches[0].prior, note.matches[0].totalCost);\n\t\t\t\tpath[si] = -1;\n\t\t\t\t--si;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// sort nodes by backwards heuristic offset\n\t\t\tif (offset != null) {\n\t\t\t\tnote.matches.forEach(node => node.backPrior = (node.totalCost < 1.99 ? node.priorByOffset(offset) : -1));\n\t\t\t\tnote.matches.sort((n1, n2) => n2.backPrior - n1.backPrior);\n\t\t\t}\n\n\t\t\tconst node = note.matches[0];\n\t\t\tnode.path.forEach((ci, si) => path[si] = ci);\n\t\t\t//console.log(\"node path:\", si, node.path);\n\n\t\t\toffset = node.root.offset;\n\n\t\t\tsi = node.rootSi - 1;\n\t\t}\n\n\t\tconsole.assert(path.length == toIndex + 1, \"path length error:\", path, fromIndex, toIndex + 1,\n\t\t\tthis.sample.notes.length, this.sample.notes.length ? this.sample.notes[this.sample.notes.length - 1].index : null);\n\n\t\treturn path;\n\t}\n\n\n\tnullSteps (index) {\n\t\treturn index - (this.fineCursor ? this.fineCursor.si : -1) - 1;\n\t}\n\n\n\tresetCursor (index, {breaking = true} = {}) {\n\t\tif (breaking)\n\t\t\tthis.breakingSI = index;\n\n\t\tconst cursorOffset = this.getCursorOffset();\n\t\tif (cursorOffset != null) {\n\t\t\t//console.log(\"cursorOffset:\", cursorOffset);\n\n\t\t\tthis.zeroNode.offset = cursorOffset;\n\t\t\t//this.breaking = this.nullSteps(index) > Config.SkipDeep;\n\t\t\t//if (this.breaking)\t// trivial zero node si resets result in focus path interruption\n\t\t\tthis.zeroNode.si = index;\n\t\t\tthis.fineCursor = null;\n\n\t\t\tconsole.assert(!Number.isNaN(this.zeroNode.offset), \"zeroNode.offset is NaN.\", cursorOffset);\n\t\t\t//console.log(\"cursor offset reset:\", cursorOffset);\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\n\tget relocationTendency () {\n\t\tconst cursor = this.cursors && this.cursors[0];\n\t\tif (!cursor)\n\t\t\treturn null;\n\n\t\tconst nullLength = this.nullSteps(cursor.si);\n\t\tif (nullLength <= 0)\n\t\t\treturn 0;\n\n\t\treturn Math.log(Math.max(nullLength * cursor.value, 1e-3)) / this.relocationThreshold;\n\t}\n};\n\n\n\nmodule.exports = Navigator;\n","\nconst Node = require(\"./node.js\");\nconst Navigator = require(\"./navigator.js\");\n\n\n\nconst HEART_BEAT = 800;\t// in ms\nconst SIMULTANEOUS_INTERVAL = HEART_BEAT * 0.24;\n\n\nconst normalizeInterval = interval => Math.tanh(interval / SIMULTANEOUS_INTERVAL);\n\n\n// greater softIndexFactor make 'harder' soft index\nconst makeNoteSoftIndex = function (notes, index, {softIndexFactor = 1} = {}) {\n\tindex = Number(index);\n\n\tconst note = notes[index];\n\n\t// make soft index\n\tif (index > 0) {\n\t\tconst lastNote = notes[index - 1];\n\n\t\tconsole.assert(note.start != null, \"note.start is null\", note);\n\t\tconsole.assert(lastNote.start != null, \"lastNote.start is null\", lastNote);\n\n\t\tnote.deltaSi = normalizeInterval((note.start - lastNote.start) * softIndexFactor);\n\t\tnote.softIndex = lastNote.softIndex + note.deltaSi;\n\n\t\tconsole.assert(!Number.isNaN(note.deltaSi), \"note.deltaSi is NaN.\", note.start, lastNote.start);\n\t}\n\telse {\n\t\tnote.softIndex = 0;\n\t\tnote.deltaSi = 0;\n\t}\n};\n\n\nconst makeMatchNodes = function (note, criterion, zeroNode = Node.zero()) {\n\tnote.matches = [];\n\n\tconst targetList = criterion.pitchMap[note.pitch];\n\tif (targetList) {\n\t\tfor (const targetNote of targetList) {\n\t\t\tconst node = new Node(note, targetNote);\n\t\t\tif (zeroNode)\n\t\t\t\tnode.evaluatePrev(zeroNode);\n\n\t\t\tnote.matches.push(node);\n\t\t}\n\t}\n};\n\n\nconst genNotationContext = function (notation, {softIndexFactor = 1} = {}) {\n\tfor (let i = 0; i < notation.notes.length; ++i)\n\t\tmakeNoteSoftIndex(notation.notes, i, {softIndexFactor});\n};\n\n\nconst runNavigation = async function(criterion, sample, onStep) {\n\tconst navigator = new Navigator(criterion, sample);\n\tnavigator.resetCursor(-1);\n\n\tfor (let i = 0; i < sample.notes.length; ++i) {\n\t\tnavigator.step(i);\n\n\t\tconst next = await (onStep && onStep(i, navigator));\n\t\tif (next === Symbol.for(\"end\")) {\n\t\t\tconsole.log(\"Navigation interrupted.\");\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t//console.log(\"Navigation accomplished.\");\n\n\treturn navigator;\n};\n\n\n\nmodule.exports = {\n\tnormalizeInterval,\n\tmakeNoteSoftIndex,\n\tmakeMatchNodes,\n\tgenNotationContext,\n\trunNavigation,\n\tNavigator,\n\tNode,\n};\n","\nconst MIDI = require(\"./MIDI\");\n\n\n\nconst trackDeltaToAbs = events => {\n\tlet tick = 0;\n\n\tevents.forEach(event => {\n\t\ttick += event.deltaTime;\n\t\tevent.tick = tick;\n\t});\n};\n\n\nconst trackAbsToDelta = events => {\n\tlet lastTick = 0;\n\n\tevents.sort((e1, e2) => e1.tick - e2.tick).forEach(event => {\n\t\tevent.deltaTime = event.tick - lastTick;\n\t\tlastTick = event.tick;\n\t});\n};\n\n\nconst sliceTrack = (track, startTick, endTick) => {\n\ttrackDeltaToAbs(track);\n\n\tconst events = [];\n\tconst status = {};\n\n\ttrack.forEach(event => {\n\t\tif (event.tick >= startTick && event.tick <= endTick && event.subtype !== \"endOfTrack\")\n\t\t\tevents.push({\n\t\t\t\t...event,\n\t\t\t\ttick: event.tick - startTick,\n\t\t\t});\n\t\telse if (event.tick < startTick) {\n\t\t\tswitch (event.type) {\n\t\t\tcase \"meta\":\n\t\t\t\tstatus[event.subtype] = event;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\tObject.values(status).forEach(event => events.push({\n\t\t...event,\n\t\ttick: 0,\n\t}));\n\n\tevents.push({\n\t\ttick: endTick - startTick,\n\t\ttype: \"meta\",\n\t\tsubtype: \"endOfTrack\",\n\t});\n\n\ttrackAbsToDelta(events);\n\n\treturn events;\n};\n\n\nconst sliceMidi = (midi, startTick, endTick) => ({\n\theader: midi.header,\n\ttracks: midi.tracks.map(track => sliceTrack(track, startTick, endTick)),\n});\n\n\nconst TICKS_PER_BEATS = 480;\n\nconst EXCLUDE_MIDI_EVENT_SUBTYPES = [\n\t\"endOfTrack\", \"trackName\",\n\t\"noteOn\", \"noteOff\",\n];\n\n\nfunction encodeToMIDIData(notation, {startTime, unclosedNoteDuration = 30e+3} = {}) {\n\tnotation.microsecondsPerBeat = notation.microsecondsPerBeat || 500000;\n\n\tconst ticksPerBeat = TICKS_PER_BEATS;\n\tconst msToTicks = ticksPerBeat * 1000 / notation.microsecondsPerBeat;\n\n\tconst header = { formatType: 0, ticksPerBeat };\n\tconst track = [];\n\n\tif (!Number.isFinite(startTime)) {\n\t\tif (!notation.notes || !notation.notes[0])\n\t\t\tthrow new Error(\"encodeToMidiData: no start time specificed\");\n\n\t\tstartTime = notation.notes[0].start;\n\t}\n\n\ttrack.push({ time: startTime, type: \"meta\", subtype: \"copyrightNotice\", text: `Composed by MusicWdigets. BUILT on ${new Date(Number(process.env.VUE_APP_BUILD_TIME)).toDateString()}` });\n\n\tconst containsTempo = notation.events && notation.events.find(event => event.subtype == \"setTempo\");\n\tif (!containsTempo) {\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"timeSignature\", numerator: 4, denominator: 4, thirtyseconds: 8 });\n\t\ttrack.push({ time: startTime, type: \"meta\", subtype: \"setTempo\", microsecondsPerBeat: notation.microsecondsPerBeat });\n\t}\n\n\t//if (notation.correspondences)\n\t//\ttrack.push({ time: startTime, type: \"meta\", subtype: \"text\", text: \"find-corres:\" + notation.correspondences.join(\",\") });\n\n\tlet endTime = startTime || 0;\n\n\tif (notation.notes) {\n\t\tfor (const note of notation.notes) {\n\t\t\ttrack.push({\n\t\t\t\ttime: note.start,\n\t\t\t\ttype: \"channel\",\n\t\t\t\tsubtype: \"noteOn\",\n\t\t\t\tchannel: note.channel || 0,\n\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\tvelocity: note.velocity,\n\t\t\t\tfinger: note.finger,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, note.start);\n\n\t\t\tif (Number.isFinite(unclosedNoteDuration))\n\t\t\t\tnote.duration = note.duration || unclosedNoteDuration;\n\t\t\tif (note.duration) {\n\t\t\t\ttrack.push({\n\t\t\t\t\ttime: note.start + note.duration,\n\t\t\t\t\ttype: \"channel\",\n\t\t\t\t\tsubtype: \"noteOff\",\n\t\t\t\t\tchannel: note.channel || 0,\n\t\t\t\t\tnoteNumber: note.pitch,\n\t\t\t\t\tvelocity: 0,\n\t\t\t\t});\n\n\t\t\t\tendTime = Math.max(endTime, note.start + note.duration);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (notation.events) {\n\t\tconst events = notation.events.filter(event => !EXCLUDE_MIDI_EVENT_SUBTYPES.includes(event.data.subtype));\n\t\tfor (const event of events) {\n\t\t\ttrack.push({\n\t\t\t\ttime: event.time,\n\t\t\t\t...event.data,\n\t\t\t});\n\n\t\t\tendTime = Math.max(endTime, event.time);\n\t\t}\n\t}\n\n\ttrack.push({ time: endTime + 100, type: \"meta\", subtype: \"endOfTrack\" });\n\n\ttrack.sort(function (e1, e2) { return e1.time - e2.time; });\n\n\t// append finger event after every noteOn event\n\ttrack.map((event, index) => ({event, index}))\n\t\t.filter(({event}) => event.subtype == \"noteOn\" && event.finger != null)\n\t\t.reverse()\n\t\t.forEach(({event, index}) => track.splice(index + 1, 0, {\n\t\t\ttime: event.time,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `fingering(${event.finger})`,\n\t\t}));\n\n\ttrack.forEach(event => event.ticks = Math.round((event.time - startTime) * msToTicks));\n\ttrack.forEach((event, i) => event.deltaTime = (event.ticks - (i > 0 ? track[i - 1].ticks : 0)));\n\n\treturn {header, tracks: [track]};\n};\n\n\nfunction encodeToMIDI(notation, options) {\n\tconst data = encodeToMIDIData(notation, options);\n\treturn MIDI.encodeMidiFile(data);\n};\n\n\n\nmodule.exports = {\n\tsliceMidi,\n\tencodeToMIDIData,\n\tencodeToMIDI,\n};\n","\nconst MIDI = require(\"./source/inc/MIDI\");\nconst MusicNotation = require(\"./source/inc/MusicNotation\");\nconst MidiPlayer = require(\"./source/inc/MidiPlayer.js\");\nconst Matcher = require(\"./source/inc/Matcher\");\nconst MidiUtils = require(\"./source/inc/MidiUtils.js\");\n\n\n\nmodule.exports = {\n\tMIDI,\n\tMusicNotation,\n\tMidiPlayer,\n\tMatcher,\n\tMidiUtils,\n};\n","import pick from 'lodash/pick';\n\nimport { MusicNotation, MIDI } from '@k-l-lambda/music-widgets';\n\n//import {MeasureLayout, LayoutType} from\nimport { ImplicitType, ChordPosition } from './types';\n\nconst WHOLE_DURATION_MAGNITUDE = 1920;\nconst TICKS_PER_BEAT = WHOLE_DURATION_MAGNITUDE / 4;\n\ninterface Fraction {\n\tnumerator: number;\n\tdenominator: number;\n}\n\ninterface StaffNoteProperties {\n\trest: boolean;\n\ttied: boolean;\n\toverlapped: boolean;\n\timplicitType: ImplicitType;\n\tafterGrace: boolean;\n\tchordPosition: ChordPosition;\n\tdivision: number;\n\n\tcontextIndex: number;\n\tstaffTrack: number;\n}\n\ninterface MetaNote extends MusicNotation.Note, Partial {\n\tid: string;\n\tmeasure: number;\n\tendTick: number;\n}\n\ninterface SubNote {\n\tstartTick: number;\n\tendTick: number;\n\tpitch: number;\n\tvelocity?: number;\n}\n\ninterface MeasureNote extends Partial {\n\ttick: number;\n\tpitch: number;\n\tduration: number;\n\tchordPosition: ChordPosition;\n\tstaff: number;\n\n\ttrack: number;\n\tchannel: number;\n\tid: string;\n\tids: string[];\n\n\tsubNotes: SubNote[];\n}\n\ninterface MeasureEvent {\n\tdata: any;\n\ttrack: number;\n\tticks?: number;\n}\n\ninterface Measure {\n\ttick: number;\n\tduration: number;\n\n\tnotes: MeasureNote[];\n\tevents?: MeasureEvent[];\n\ttimeSignature?: Fraction;\n\tkeySignature?: number;\n}\n\ninterface PerformOptions {\n\twithRestTied?: boolean;\n}\n\ninterface MidiEvent extends MIDI.MidiEvent {\n\tticks?: number;\n\tmeasure?: number;\n\tids?: string[];\n\tstaffTrack?: number;\n\tstaff?: number;\n}\ntype MidiTrack = MidiEvent[];\n\nconst EXTRA_NOTE_FIELDS = ['rest', 'tied', 'overlapped', 'implicitType', 'afterGrace', 'contextIndex', 'staffTrack', 'chordPosition', 'division'];\nconst COMMON_NOTE_FIELDS = ['id', 'ids', 'pitch', 'velocity', 'track', 'channel', ...EXTRA_NOTE_FIELDS];\n\nclass MetaNotation {\n\t//pitchContextGroup: PitchContextTable[];\n\t//measureLayout: MeasureLayout;\n\tmeasures: Measure[];\n\n\ttrackNames: string[];\n\tidTrackMap: { [key: string]: number };\n\n\tripe: boolean = false;\n\n\tstatic fromAbsoluteNotes(notes: MetaNote[], measureHeads: number[], data?: Partial): MetaNotation {\n\t\tconst notation = new MetaNotation(data);\n\n\t\tnotation.measures = Array(measureHeads.length)\n\t\t\t.fill(null)\n\t\t\t.map((__, i) => {\n\t\t\t\tconst tick = measureHeads[i];\n\t\t\t\tconst duration = measureHeads[i + 1] ? measureHeads[i + 1] - tick : 0;\n\n\t\t\t\tconst mnotes = notes\n\t\t\t\t\t.filter((note) => note.measure === i + 1)\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(note) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\ttick: note.startTick - tick,\n\t\t\t\t\t\t\t\tduration: note.endTick - note.startTick,\n\t\t\t\t\t\t\t\t...pick(note, COMMON_NOTE_FIELDS),\n\t\t\t\t\t\t\t\tsubNotes: [],\n\t\t\t\t\t\t\t} as MeasureNote)\n\t\t\t\t\t);\n\n\t\t\t\t// reduce note data size\n\t\t\t\tmnotes.forEach((mn) =>\n\t\t\t\t\t['rest', 'tied', 'implicitType', 'afterGrace'].forEach((field) => {\n\t\t\t\t\t\tif (!mn[field]) delete mn[field];\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes: mnotes,\n\t\t\t\t};\n\t\t\t});\n\n\t\tnotation.idTrackMap = notes.reduce((map, note) => {\n\t\t\tif (note.id) map[note.id] = note.track;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn notation;\n\t}\n\n\tstatic performAbsoluteNotes(abNotes: MetaNote[], { withRestTied = false }: PerformOptions = {}): MusicNotation.Note[] {\n\t\tconst notes = abNotes\n\t\t\t.filter((note) => (withRestTied || (!note.rest && !note.tied)) && !note.overlapped)\n\t\t\t.map((note) => ({\n\t\t\t\tmeasure: note.measure,\n\t\t\t\tchannel: note.channel,\n\t\t\t\ttrack: note.track,\n\t\t\t\tstart: note.start,\n\t\t\t\tstartTick: note.startTick,\n\t\t\t\tendTick: note.endTick,\n\t\t\t\tpitch: note.pitch,\n\t\t\t\tduration: note.duration,\n\t\t\t\tvelocity: note.velocity || 127,\n\t\t\t\tid: note.id,\n\t\t\t\tids: note.ids,\n\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\tcontextIndex: note.contextIndex,\n\t\t\t\timplicitType: note.implicitType,\n\t\t\t\tchordPosition: note.chordPosition,\n\t\t\t}));\n\n\t\tconst noteMap = notes.reduce((map, note) => {\n\t\t\tconst key = `${note.channel}|${note.start}|${note.pitch}`;\n\t\t\tconst priorNote = map[key];\n\t\t\tif (priorNote) priorNote.ids.push(...note.ids);\n\t\t\telse map[key] = note;\n\n\t\t\treturn map;\n\t\t}, {});\n\n\t\treturn Object.values(noteMap);\n\t}\n\n\tconstructor(data?: Partial) {\n\t\tif (data) Object.assign(this, data);\n\t}\n\n\t/*get ordinaryMeasureIndices (): number[] {\n\t\tif (this.measureLayout)\n\t\t\treturn this.measureLayout.serialize(LayoutType.Ordinary);\n\n\t\treturn Array(this.measures.length).fill(null).map((_, i) => i + 1);\n\t}*/\n\n\t// In Lilypond 2.20.0, minus tick value at the head of a track result in MIDI event time bias,\n\t//\tSo store the bias values to correct MIDI time from lilyond.\n\tget trackTickBias(): { [key: string]: number } {\n\t\tconst headMeasure = this.measures[0];\n\t\treturn this.trackNames.reduce((map, name, track) => {\n\t\t\tmap[name] = 0;\n\t\t\tif (headMeasure) {\n\t\t\t\tconst note = headMeasure.notes.find((note) => note.track === track);\n\t\t\t\tif (note) map[name] = Math.min(note.tick, 0);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t}\n\n\tget idSet(): Set {\n\t\treturn this.measures.reduce(\n\t\t\t(set, measure) => (measure.notes.filter((note) => !note.rest).forEach((note) => note.ids.forEach((id) => set.add(id))), set),\n\t\t\tnew Set()\n\t\t);\n\t}\n\n\ttoJSON() {\n\t\treturn {\n\t\t\t__prototype: 'LilyNotation',\n\t\t\t//pitchContextGroup: this.pitchContextGroup,\n\t\t\t//measureLayout: this.measureLayout,\n\t\t\tmeasures: this.measures,\n\t\t\tidTrackMap: this.idTrackMap,\n\t\t\ttrackNames: this.trackNames,\n\t\t\tripe: this.ripe,\n\t\t};\n\t}\n\n\ttoAbsoluteNotes(measureIndices: number[] /*= this.ordinaryMeasureIndices*/): MetaNote[] {\n\t\tlet measureTick = 0;\n\t\tconst measureNotes: MetaNote[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst notes = measure.notes.map((mnote) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartTick: measureTick + mnote.tick,\n\t\t\t\t\tendTick: measureTick + mnote.tick + mnote.duration,\n\t\t\t\t\tstart: measureTick + mnote.tick,\n\t\t\t\t\tduration: mnote.duration,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t\t...pick(mnote, COMMON_NOTE_FIELDS),\n\t\t\t\t} as MetaNote;\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn notes;\n\t\t});\n\n\t\treturn [].concat(...measureNotes);\n\t}\n\n\t/*getMeasureIndices (type: LayoutType) {\n\t\treturn this.measureLayout.serialize(type);\n\t}*/\n\n\ttoPerformingNotation(measureIndices: number[] /*= this.ordinaryMeasureIndices*/, options: PerformOptions = {}): MusicNotation.Notation {\n\t\t//console.debug(\"toPerformingNotation:\", this, measureIndices);\n\t\tconst abNotes = this.toAbsoluteNotes(measureIndices);\n\t\tconst notes = MetaNotation.performAbsoluteNotes(abNotes, options);\n\n\t\t//const lastNote = notes[notes.length - 1];\n\t\tconst endTime = Math.max(...notes.map((note) => note.start + note.duration));\n\n\t\tconst endTick = measureIndices.reduce((tick, index) => tick + this.measures[index - 1].duration, 0);\n\n\t\tconst notation = new MusicNotation.Notation({\n\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\tmeta: {},\n\t\t\ttempos: [], // TODO\n\t\t\tchannels: [notes],\n\t\t\tendTime,\n\t\t\tendTick,\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\ttoPerformingMIDI(measureIndices: number[], { trackList }: { trackList?: boolean[] } = {}): MIDI.MidiData & { zeroTick: number } {\n\t\tif (!measureIndices.length) return null;\n\n\t\t// to avoid begin minus tick\n\t\tconst zeroTick = -Math.min(0, ...(this.measures[0]?.events.map((e) => e.ticks) || []), ...(this.measures[0]?.notes.map((note) => note.tick) || []));\n\n\t\tlet measureTick = zeroTick;\n\t\tconst measureEvents: MeasureEvent[][] = measureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\n\t\t\tconst events = measure.events.map((mevent) => ({\n\t\t\t\tticks: measureTick + mevent.ticks,\n\t\t\t\ttrack: mevent.track,\n\t\t\t\tdata: {\n\t\t\t\t\t...mevent.data,\n\t\t\t\t\tmeasure: index,\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tmeasureTick += measure.duration;\n\n\t\t\treturn events;\n\t\t});\n\n\t\tconst eventPriority = (event: MidiEvent): number => event.ticks + (event.subtype === 'noteOff' ? -1e-8 : 0);\n\n\t\tconst tracks: MidiTrack[] = [].concat(...measureEvents).reduce((tracks, mevent) => {\n\t\t\ttracks[mevent.track] = tracks[mevent.track] || [];\n\t\t\ttracks[mevent.track].push({\n\t\t\t\tticks: mevent.ticks,\n\t\t\t\t...mevent.data,\n\t\t\t});\n\n\t\t\treturn tracks;\n\t\t}, []);\n\n\t\ttracks[0] = tracks[0] || [];\n\t\t/*tracks[0].push({\n\t\t\tticks: 0,\n\t\t\ttype: \"meta\",\n\t\t\tsubtype: \"text\",\n\t\t\ttext: `${npmPackage.name} ${npmPackage.version}`,\n\t\t});*/\n\n\t\t// append note events\n\t\tmeasureTick = zeroTick;\n\t\tmeasureIndices.map((index) => {\n\t\t\tconst measure = this.measures[index - 1];\n\t\t\tconsole.assert(!!measure, 'invalid measure index:', index, this.measures.length);\n\t\t\tif (!Number.isFinite(measure.duration)) return;\n\n\t\t\tmeasure.notes.forEach((note) => {\n\t\t\t\tif (trackList && !trackList[note.track]) return;\n\n\t\t\t\tif (note.rest) return;\n\n\t\t\t\tconst tick = measureTick + note.tick;\n\n\t\t\t\tconst track = (tracks[note.track] = tracks[note.track] || []);\n\n\t\t\t\tnote.subNotes.forEach((subnote) => {\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.startTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOn',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: subnote.velocity,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\n\t\t\t\t\ttrack.push({\n\t\t\t\t\t\tticks: tick + subnote.endTick,\n\t\t\t\t\t\tmeasure: index,\n\t\t\t\t\t\tids: note.ids,\n\t\t\t\t\t\ttype: 'channel',\n\t\t\t\t\t\tsubtype: 'noteOff',\n\t\t\t\t\t\tchannel: note.channel,\n\t\t\t\t\t\tnoteNumber: subnote.pitch,\n\t\t\t\t\t\tvelocity: 0,\n\t\t\t\t\t\tstaffTrack: note.staffTrack,\n\t\t\t\t\t\tstaff: note.staff,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tmeasureTick += measure.duration;\n\t\t});\n\n\t\tconst finalTick = measureTick;\n\n\t\t// ensure no empty track\n\t\tfor (let t = 0; t < tracks.length; ++t) tracks[t] = tracks[t] || [];\n\n\t\t// sort & make deltaTime\n\t\ttracks.forEach((events) => {\n\t\t\tevents.sort((e1, e2) => eventPriority(e1) - eventPriority(e2));\n\n\t\t\tlet ticks = 0;\n\t\t\tevents.forEach((event) => {\n\t\t\t\tevent.deltaTime = event.ticks - ticks;\n\t\t\t\tif (!Number.isFinite(event.deltaTime)) event.deltaTime = 0;\n\t\t\t\telse ticks = event.ticks;\n\t\t\t});\n\n\t\t\tevents.push({ deltaTime: Math.max(finalTick - ticks, 0), type: 'meta', subtype: 'endOfTrack' });\n\t\t});\n\n\t\treturn {\n\t\t\theader: {\n\t\t\t\tformatType: 0,\n\t\t\t\tticksPerBeat: TICKS_PER_BEAT,\n\t\t\t},\n\t\t\ttracks,\n\t\t\tzeroTick,\n\t\t};\n\t}\n\n\ttoPerformingNotationWithEvents(measureIndices: number[], options: { trackList?: boolean[] } = {}): MusicNotation.Notation {\n\t\tif (!measureIndices.length) return null;\n\n\t\tconst { zeroTick, ...midi } = this.toPerformingMIDI(measureIndices, options);\n\t\tconst notation = MusicNotation.Notation.parseMidi(midi);\n\n\t\tassignNotationNoteDataFromEvents(notation);\n\n\t\tlet tick = zeroTick;\n\n\t\tnotation.measures = measureIndices.map((index) => {\n\t\t\tconst startTick = tick;\n\t\t\ttick += this.measures[index - 1].duration;\n\n\t\t\treturn {\n\t\t\t\tindex,\n\t\t\t\tstartTick,\n\t\t\t\tendTick: tick,\n\t\t\t};\n\t\t});\n\n\t\treturn notation;\n\t}\n\n\t// find the MIDI event of setTempo in measures data, and change the value of microsecondsPerBeat\n\tsetTempo(bpm: number): boolean {\n\t\tlet found = false;\n\t\tfor (const measure of this.measures) {\n\t\t\tfor (const event of measure.events) {\n\t\t\t\tif (event.data.subtype === 'setTempo') {\n\t\t\t\t\tevent.data.microsecondsPerBeat = 60e6 / bpm;\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn found;\n\t}\n}\n\nconst assignNotationNoteDataFromEvents = (midiNotation: MusicNotation.NotationData, fields = ['ids', 'measure', 'staffTrack']) => {\n\tconst noteId = (channel: number, pitch: number, tick: number): string => `${channel}|${pitch}|${tick}`;\n\n\tconst noteMap = midiNotation.notes.reduce((map, note) => {\n\t\tmap[noteId(note.channel, note.pitch, note.startTick)] = note;\n\n\t\treturn map;\n\t}, {});\n\n\tmidiNotation.events.forEach((event) => {\n\t\tif (event.data.subtype === 'noteOn') {\n\t\t\tconst id = noteId(event.data.channel, event.data.noteNumber, event.ticks);\n\t\t\tconst note = noteMap[id];\n\t\t\tconsole.assert(!!note, 'cannot find note of', id);\n\n\t\t\tif (note) Object.assign(note, pick(event.data, fields));\n\t\t}\n\t});\n};\n\nexport { MetaNote, MetaNotation, MidiEvent };\n",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));","import _SHA256 from 'crypto-js/sha256';\n\nconst SHA256 = (source: string): Uint8Array => {\n\tconst { words, sigBytes } = _SHA256(source);\n\tconst uwords = words.map((x) => (x < 0 ? x + 0x100000000 : x));\n\tconst word_len = sigBytes / words.length;\n\n\treturn new Uint8Array(sigBytes).map((_, i) => (uwords[Math.floor(i / word_len)] >> ((3 - (i % word_len)) * 8)) & 0xff);\n};\n\ntype Hash = Uint8Array;\nconst HASH_LEN = 256;\n\nclass HashVector {\n\tfields: number[];\n\n\tstatic fromHash(hash: Hash): HashVector {\n\t\tconst fields = [];\n\t\tfor (const byte of hash) {\n\t\t\tfor (let b = 0; b < 8; ++b) fields.push((byte >> b) & 1 ? 1 : -1);\n\t\t}\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic fromString(source: string): HashVector {\n\t\tconst hash = SHA256(source);\n\t\treturn HashVector.fromHash(hash);\n\t}\n\n\tstatic fromWords(words: string[]): HashVector {\n\t\tconst vs = words.map((word) => HashVector.fromString(word));\n\t\treturn vs.reduce((sum, v) => sum.add(v), HashVector.zero);\n\t}\n\n\tstatic concat(...vectors: HashVector[]): HashVector {\n\t\tconst fields = vectors.map((v) => v.fields).flat(1);\n\n\t\treturn new HashVector(fields);\n\t}\n\n\tconstructor(fields: number[] | null = null) {\n\t\tthis.fields = fields || Array(HASH_LEN).fill(0);\n\t}\n\n\tget length(): number {\n\t\treturn this.fields.length;\n\t}\n\n\ttoHash(): Hash {\n\t\treturn Uint8Array.from(\n\t\t\tArray(this.length / 8)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, i) => {\n\t\t\t\t\tconst bits = this.fields.slice(i * 8, (i + 1) * 8);\n\n\t\t\t\t\treturn bits.reduce((byte, bit, b) => byte | ((bit > 0 ? 1 : 0) << b), 0);\n\t\t\t\t})\n\t\t) as Hash;\n\t}\n\n\tadd(vec: HashVector): this {\n\t\tthis.fields.forEach((value, i) => (this.fields[i] = value + vec.fields[i]));\n\n\t\treturn this;\n\t}\n\n\tscale(factor: number): this {\n\t\tthis.fields = this.fields.map((value) => value * factor);\n\n\t\treturn this;\n\t}\n\n\tsub(crop: number): HashVector {\n\t\tconst fields = crop > 0 ? this.fields.slice(0, crop) : this.fields.slice(crop);\n\t\treturn new HashVector(fields);\n\t}\n\n\tstatic get zero(): HashVector {\n\t\treturn new HashVector();\n\t}\n}\n\nconst odds = (byte: number): number => {\n\tlet result = 0;\n\tfor (let b = byte; b > 0; b >>= 1) {\n\t\tif (b % 2) ++result;\n\t}\n\n\treturn result;\n};\nconst ODDS = Array(2 ** 8)\n\t.fill(0)\n\t.map((_, i) => odds(i));\nconst ODDS_HEX = ODDS.reduce((table, odd, i) => ({ ...table, [('0' + i.toString(16)).slice(-2)]: odd }), {});\n\nconst countOnes = (hash: Hash): number => hash.reduce((sum, byte) => sum + ODDS[byte], 0);\n\nconst xorHashes = (hash1: Hash, hash2: Hash): Hash => hash1.map((byte, i) => byte ^ hash2[i]) as Hash;\n\nconst cosHashes = (hash1: Hash, hash2: Hash): number => {\n\tconst len = hash1.length * 8;\n\n\tconst xor = xorHashes(hash1, hash2);\n\tconst ones = countOnes(xor);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst cosBigInts = (hash1: bigint, hash2: bigint, len: number = HASH_LEN): number => {\n\tconst xor = hash1 ^ hash2;\n\tconst xor_hex = '0'.repeat(len / 4) + xor.toString(16);\n\n\tconst ones = Array(len / 8)\n\t\t.fill(0)\n\t\t.reduce((ones, _, i) => ones + ODDS_HEX[xor_hex.slice((i + 1) * -2, i ? i * -2 : undefined)], 0);\n\n\treturn (len - ones * 2) / len;\n};\n\nconst i2hex = (i) => ('0' + i.toString(16)).slice(-2);\nconst hashToHex = (hash: Hash): string => Array.from(hash).map(i2hex).join('');\n\nconst hexToHash = (hex: string): Hash =>\n\tUint8Array.from(\n\t\tArray(hex.length / 2)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => hex.substring(i * 2, (i + 1) * 2))\n\t\t\t.map((x) => parseInt(x, 16))\n\t);\n\nconst hashToBigInt = (hash: Hash): bigint => {\n\t// __NOT_FOR_BROWSER_\n\treturn Array.from(hash).reduce((r, x) => r * 0x100n + BigInt(x), 0n);\n\t/*\n\t// _NOT_FOR_BROWSER__\n\tthrow new Error('BigInt not supported');\n\t//*/\n};\n\nconst hashFromWords = (words: string[]): Hash => HashVector.fromWords(words).toHash();\n\nexport { Hash, HashVector, cosHashes, cosBigInts, hashToHex, hexToHash, hashToBigInt, hashFromWords };\n","import { MetaNotation, TokenPosition } from '../performer';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { cosHashes, Hash, hashToBigInt, hashToHex, HashVector } from './hashVector';\nimport { Performing, RegulationOptions, TermMeasure, TermVoice, VoiceMeasure, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { ContextedTerm, EventTerm, TempoTerm, TermPitch, WHOLE_DURATION } from './term';\nimport { TokenType } from './token';\nimport { argmax, frac, fractionMul, noteToPitch, printFraction, reducedFraction } from './utils';\n\nexport const emptyVoiceFromStaffMeasure = (staff: TermMeasure, chiefVoice: boolean = false): VoiceMeasure => {\n\treturn {\n\t\tempty: true,\n\t\tduration: staff.duration,\n\t\ttickMap: {\n\t\t\t[0]: EventTerm.space({ duration: staff.duration, tick: 0 }),\n\t\t},\n\t\ttimeSignature: staff.timeSignature,\n\t\ttimeSigNumeric: staff.timeSigNumeric,\n\t\tkeySignature: staff.keySignature,\n\t\tcontextedTerms: staff.terms.filter((term) => term instanceof ContextedTerm && (!term.staffLevel || chiefVoice)) as ContextedTerm[],\n\t\tmarks: [],\n\t};\n};\n\nconst removeEmptyMeasuresInVoicesStaves = (staves: VoicesStaff[]): void => {\n\t//console.assert(staves[0] && staves[0].voices[0], 'voices is empty:', staves);\n\tif (!(staves[0] && staves[0].voices[0])) {\n\t\tconsole.warn('empty voices:', staves);\n\t\treturn;\n\t}\n\n\tconst measureCount = staves[0].voices[0].measures.length;\n\tconst measureEmpties = Array(measureCount)\n\t\t.fill(null)\n\t\t.map((_, m) => {\n\t\t\tfor (const staff of staves) {\n\t\t\t\tfor (const voice of staff.voices) {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tif (!measure.empty) return false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\tmeasureEmpties.forEach((empty, m) => {\n\t\tif (empty) {\n\t\t\tstaves.forEach((staff) =>\n\t\t\t\tstaff.voices.forEach((voice) => {\n\t\t\t\t\tconst measure = voice.measures[m];\n\t\t\t\t\tmeasure.tickMap = {};\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t});\n};\n\nconst markingTiesInVoice = (voice: TermVoice) => {\n\tconst events = [].concat(...voice.measures.map((m) => Object.values(m.tickMap).filter((event) => event instanceof EventTerm)));\n\t//console.log(\"events:\", events);\n\n\tfor (let i = 1; i < events.length; ++i) {\n\t\tconst event0 = events[i - 1];\n\t\tconst event1 = events[i];\n\t\tif (!event0.rest && !event1.rest) {\n\t\t\tif (event0.accessories.some((acc) => acc.type === TokenType.SlurBegin) && event1.accessories.some((acc) => acc.type === TokenType.SlurEnd)) {\n\t\t\t\tconst pitches = event0.pitches.filter((p0) => event1.pitches.some((p1) => p1.note === p0.note && p1.alter === p0.alter));\n\t\t\t\tif (pitches.length > 0) {\n\t\t\t\t\tevent0.tying = true;\n\t\t\t\t\tevent1.tied = true;\n\n\t\t\t\t\tpitches.forEach((p0) => {\n\t\t\t\t\t\tp0.tying = true;\n\t\t\t\t\t\tconst p1 = event1.pitches.find((p1) => p1.note === p0.note && p1.alter === p0.alter);\n\t\t\t\t\t\tp1.tied = true;\n\t\t\t\t\t});\n\n\t\t\t\t\t// remove slurs from accessories\n\t\t\t\t\tpitches.forEach(() => {\n\t\t\t\t\t\tconst si0 = event0.accessories.findIndex((acc) => acc.type === TokenType.SlurBegin);\n\t\t\t\t\t\tif (si0 >= 0) event0.accessories.splice(si0, 1);\n\n\t\t\t\t\t\tconst si1 = event1.accessories.findIndex((acc) => acc.type === TokenType.SlurEnd);\n\t\t\t\t\t\tif (si1 >= 0) event1.accessories.splice(si1, 1);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nclass Spartito extends SimpleClass {\n\tstatic className = 'Spartito';\n\n\tstavesCount: number;\n\tstaffGroups: number[][];\n\tmeasures: SpartitoMeasure[];\n\n\ttags: string[];\n\n\tconstructor(data: any) {\n\t\tsuper();\n\t\tsuper.assign(data);\n\n\t\tthis.measures.forEach((measure) => (measure.staffGroups = this.staffGroups));\n\t}\n\n\tget regulated(): boolean {\n\t\treturn this.measures.every((m) => m.regulated);\n\t}\n\n\tget solidMeasureCount(): number {\n\t\treturn this.measures.filter((measure) => !measure.empty).length;\n\t}\n\n\tget measureIndexMapping(): number[] {\n\t\tlet n = 0;\n\t\treturn this.measures.map((measure) => {\n\t\t\treturn !measure.empty ? n++ : null;\n\t\t});\n\t}\n\n\tget headBPM(): number {\n\t\tfor (const measure of this.measures) {\n\t\t\tif (measure.marks) {\n\t\t\t\tconst tempoMark = measure.marks.find((mark) => mark instanceof TempoTerm && mark.isValid()) as TempoTerm;\n\t\t\t\tif (tempoMark) return tempoMark.bpm;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tget measureLayoutCode(): string {\n\t\tconst ms = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure, i) => ({\n\t\t\t\tindex: i + 1,\n\t\t\t\tvb: measure.voltaBegin,\n\t\t\t\tve: measure.voltaEnd,\n\t\t\t\talter: measure.alternative,\n\t\t\t\tleftSign: '',\n\t\t\t\trightSign: '',\n\t\t\t}));\n\t\tms.forEach((m, i) => {\n\t\t\tif (m.vb) {\n\t\t\t\tconst nextI = ms.slice(i + 1).findIndex((mm) => mm.vb);\n\t\t\t\tconst nextVBI = nextI >= 0 ? i + nextI : ms.length;\n\t\t\t\tif (ms.slice(i, nextVBI - 1).some((mm) => mm.ve))\n\t\t\t\t\t// check if volta range closed\n\t\t\t\t\tm.leftSign = '2*[';\n\t\t\t}\n\n\t\t\tif (m.ve) {\n\t\t\t\tconst pms = ms.slice(0, i + 1).reverse();\n\t\t\t\tconst lastVEI = pms.slice(1).findIndex((mm) => mm.ve);\n\t\t\t\tif (lastVEI >= 0) {\n\t\t\t\t\tif (!pms.slice(1, lastVEI + 1).some((mm) => mm.vb))\n\t\t\t\t\t\t// ignore unclosed right volta\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (m.alter) {\n\t\t\t\t\tconst lastMI = pms.findIndex((m) => !m.alter);\n\t\t\t\t\tif (lastMI > 0) {\n\t\t\t\t\t\tpms[lastMI].rightSign = ']';\n\t\t\t\t\t\tpms[lastMI - 1].leftSign = '{[';\n\n\t\t\t\t\t\tm.rightSign = '],';\n\n\t\t\t\t\t\tif (ms[i + 1]) ms[i + 1].rightSign = '},';\n\t\t\t\t\t}\n\t\t\t\t} else m.rightSign = '],';\n\n\t\t\t\tif (!pms.some((m) => m.vb)) ms[0].leftSign = '2*[';\n\t\t\t}\n\t\t});\n\n\t\treturn ms\n\t\t\t.map((m) => m.leftSign + m.index.toString() + m.rightSign + (m.rightSign ? '' : ','))\n\t\t\t.join(' ')\n\t\t\t.replace(/,$/, '');\n\t}\n\n\tget qualityScore(): number {\n\t\tconst measures = this.measures.filter((measure) => !measure.empty);\n\t\tconst qss = measures.map(evaluateMeasure).map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\t//console.log('qss:', qss);\n\n\t\treturn measures.length ? sum / measures.length : null;\n\t}\n\n\tdumpEvaluations(): void {\n\t\tconst es = this.measures.filter((measure) => !measure.empty).map((m) => ({ measureIndex: m.measureIndex, ...evaluateMeasure(m) }));\n\t\tconst qss = es.map((e) => e.qualityScore);\n\t\tconst sum = qss.reduce((a, b) => a + b, 0);\n\t\tconsole.log('qualityScore:', sum / es.length);\n\n\t\tconsole.table(es);\n\t}\n\n\tregulate(options: RegulationOptions = {}): void {\n\t\tthis.measures.forEach((m) => m.regulated || m.regulate(options));\n\t}\n\n\tcleanupRegulation(): void {\n\t\tthis.measures.forEach((m) => (m.voices = null));\n\t}\n\n\t// measures' estimatedDuration should be valid\n\trectifyTimeSignatures(logger: Logger = new DummyLogger()): void {\n\t\tconst mis = this.measures\n\t\t\t.map((measure, index) => ({ measure, index }))\n\t\t\t.filter(({ measure, index }) => !index || measure.timeSignatureChanged)\n\t\t\t.map(({ index }) => index);\n\t\tconst segments = mis\n\t\t\t.map((index, si) => this.measures.slice(index, si < mis.length - 1 ? mis[si + 1] : this.measures.length))\n\t\t\t.map((ms) => ms.filter((m) => m.estimatedDuration > 0))\n\t\t\t.filter((seg) => seg.length >= 3 || seg.some((measure) => measure.doubtfulTimesig));\n\t\t//console.log(\"segments:\", segments.map(ms => ms.map(m => m.measureIndex)));\n\n\t\tsegments.forEach((measures) => {\n\t\t\tif (measures[0].patched) {\n\t\t\t\t// rectify according to patched head measure\n\t\t\t\tconst newTimeSignature = measures[0].timeSignature;\n\t\t\t\tconst measuresToFix = measures\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.filter((measure) => !measure.patched && printFraction(measure.timeSignature) !== printFraction(newTimeSignature));\n\t\t\t\tif (measuresToFix.length) {\n\t\t\t\t\tconst originTimeSignature = measuresToFix[0].timeSignature;\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by patched head:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${printFraction(newTimeSignature)}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originTimeSignature = measures[0].timeSignature;\n\t\t\tconst regularD = Number.isInteger(Math.log2(originTimeSignature.denominator));\n\n\t\t\tlet denominator = regularD ? 4 : 8;\n\t\t\tif (regularD) denominator = Math.max(denominator, measures[0].timeSignature.denominator);\n\n\t\t\tconst numerators = measures.map((measure) => Math.round((measure.estimatedDuration * denominator) / WHOLE_DURATION));\n\t\t\tconst countings = Object.entries(numerators.reduce((c, n) => ((c[n] = (c[n] || 0) + 1), c), {} as Record)).sort(\n\t\t\t\t(p1, p2) => p2[1] - p1[1]\n\t\t\t);\n\t\t\tconst peakCount = countings[0][1];\n\t\t\tconst candidateNumerators = countings.filter(([_, c]) => c > peakCount * 0.6);\n\t\t\tconst bestCounting = candidateNumerators.reduce((best, c) => (Number(c[0]) > Number(best[0]) ? c : best));\n\t\t\tif (bestCounting[1] > 1) {\n\t\t\t\t//console.log(\"countings:\", countings, bestCounting[0]);\n\t\t\t\tlet numerator = Number(bestCounting[0]);\n\t\t\t\tif (!regularD || originTimeSignature.denominator * numerator !== originTimeSignature.numerator * denominator) {\n\t\t\t\t\tif (regularD && denominator !== originTimeSignature.denominator) {\n\t\t\t\t\t\tconst reducedN = (numerator * originTimeSignature.denominator) / denominator;\n\t\t\t\t\t\tif (Number.isInteger(reducedN)) {\n\t\t\t\t\t\t\tnumerator = reducedN;\n\t\t\t\t\t\t\tdenominator = originTimeSignature.denominator;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst measuresToFix = measures.filter((measure) => !measure.patched);\n\n\t\t\t\t\tconst newTimeSignature = frac(numerator, denominator);\n\t\t\t\t\tmeasuresToFix.forEach((measure) => measure.basics.forEach((basic) => (basic.timeSignature = newTimeSignature)));\n\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t'[rectifyTimeSignatures]\ttimesignator overwrote by estimation:',\n\t\t\t\t\t\t`${printFraction(originTimeSignature)} -> ${numerator}/${denominator}`,\n\t\t\t\t\t\tmeasuresToFix.map((m) => m.measureIndex)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tmakeVoiceStaves(): VoicesStaff[] {\n\t\tthis.regulate();\n\n\t\tconst voiceCount = Math.max(...this.measures.map((measure) => measure.voices.length));\n\t\tif (!voiceCount || !Number.isFinite(voiceCount)) return null;\n\n\t\t// mark tied pitches for patched measues\n\t\tthis.measures\n\t\t\t.filter((measure) => measure.patched)\n\t\t\t.forEach((measure) => {\n\t\t\t\tmeasure.events.forEach((event) => {\n\t\t\t\t\tif (event.tied) event.pitches.forEach((pitch) => (pitch.tied = true));\n\t\t\t\t});\n\t\t\t});\n\n\t\t// Move courtesy clefs to the next measure.\n\t\t// A courtesy clef that appears after all events on its staff announces the\n\t\t// clef change for the next measure rather than applying to the current one.\n\t\tfor (let mi = 0; mi < this.measures.length - 1; mi++) {\n\t\t\tconst measure = this.measures[mi];\n\t\t\tconst nextMeasure = this.measures[mi + 1];\n\t\t\tif (!measure.contexts || !nextMeasure?.contexts) continue;\n\n\t\t\tfor (let si = 0; si < measure.contexts.length; si++) {\n\t\t\t\tconst ctxList = measure.contexts[si];\n\t\t\t\tif (!ctxList) continue;\n\n\t\t\t\tconst staffEvents = measure.events?.filter((e: any) => e.staff === si) || [];\n\t\t\t\tconst maxEventX = staffEvents.reduce((max: number, e: any) => Math.max(max, e.x || 0), -Infinity);\n\t\t\t\tif (!Number.isFinite(maxEventX)) continue;\n\n\t\t\t\tconst deferred: ContextedTerm[] = [];\n\t\t\t\tmeasure.contexts[si] = ctxList.filter((term) => {\n\t\t\t\t\tif (term.type === 0 /* ContextType.Clef */ && term.x > maxEventX) {\n\t\t\t\t\t\tdeferred.push(term);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\n\t\t\t\tif (deferred.length > 0 && nextMeasure.contexts[si]) {\n\t\t\t\t\tdeferred.forEach((term) => (term.tick = 0));\n\t\t\t\t\tnextMeasure.contexts[si] = [...deferred, ...nextMeasure.contexts[si]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// [measure, voice]\n\t\tconst measures: VoiceMeasure[][] = this.measures.map((measure /*, mi*/) => {\n\t\t\tconsole.assert(measure.validRegulated, '[makeVoiceStaves] measure is invalid:', measure);\n\n\t\t\tconst eventMap: { [key: number]: EventTerm } = {};\n\t\t\tmeasure.events.forEach((event) => (eventMap[event.id] = event));\n\n\t\t\tconst leftStaves = new Set(\n\t\t\t\tArray(measure.contexts.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map((_, i) => i)\n\t\t\t);\n\n\t\t\tlet bar = null;\n\t\t\tif (measure.barType) {\n\t\t\t\tswitch (measure.barType) {\n\t\t\t\t\tcase 'Segment':\n\t\t\t\t\t\tbar = '||';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Terminal':\n\t\t\t\t\t\tbar = '|.';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst voices: VoiceMeasure[] = measure.voices.map((ids /*, vi*/) => {\n\t\t\t\tconst events = ids.map((id) => eventMap[id]);\n\t\t\t\tevents.sort((e1, e2) => e1.tick - e2.tick);\n\n\t\t\t\tconst tickMap = {};\n\t\t\t\tlet tick = 0;\n\t\t\t\tlet lastEvent = null;\n\t\t\t\tfor (const event of events) {\n\t\t\t\t\tif (!Number.isFinite(event?.tick)) {\n\t\t\t\t\t\tconsole.warn('invalid event tick:', event);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (event.tick > tick) tickMap[tick] = EventTerm.space({ tick, duration: event.tick - tick });\n\t\t\t\t\telse if (!event.grace && event.tick < tick && lastEvent)\n\t\t\t\t\t\tlastEvent.timeWarp = reducedFraction(event.tick - lastEvent.tick, lastEvent.duration);\n\t\t\t\t\t//console.log(\"timewarp:\", event.tick - lastEvent.tick, lastEvent.duration, lastEvent.timeWarp);\n\n\t\t\t\t\ttickMap[event.tick] = event;\n\n\t\t\t\t\tif (!event.zeroHolder) {\n\t\t\t\t\t\ttick = Math.round(event.tick + event.duration);\n\t\t\t\t\t\tlastEvent = event;\n\n\t\t\t\t\t\t// sub grace events\n\t\t\t\t\t\tif (event.graceIds) {\n\t\t\t\t\t\t\tevent.graceIds.forEach((id) => {\n\t\t\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\t\t\tif (grace) tickMap[grace.tick] = grace;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (measure.endEvent && measure.endEvent.graceIds) {\n\t\t\t\t\tmeasure.endEvent.graceIds.forEach((id) => {\n\t\t\t\t\t\tconst grace = measure.eventMap[id];\n\t\t\t\t\t\tif (grace && (!lastEvent || grace.staff === lastEvent.staff)) tickMap[grace.tick] = grace;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (tick < measure.duration) tickMap[tick] = EventTerm.space({ tick, duration: measure.duration - tick });\n\t\t\t\telse if (tick > measure.duration && Number.isFinite(measure.duration))\n\t\t\t\t\t//console.warn(\"duration out of range:\", tick, column.duration, mi, vi);\n\t\t\t\t\tlastEvent.timeWarp = reducedFraction(measure.duration - lastEvent.tick, lastEvent.duration);\n\n\t\t\t\tconsole.assert(\n\t\t\t\t\t!lastEvent || !lastEvent.timeWarp || (Number.isInteger(lastEvent.timeWarp.numerator) && Number.isInteger(lastEvent.timeWarp.denominator)),\n\t\t\t\t\t'invalid time warp:',\n\t\t\t\t\tlastEvent\n\t\t\t\t);\n\n\t\t\t\tconst staffIndex = events[0] ? events[0].staff : 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\n\t\t\t\t//const row = measure.rows[staffIndex];\n\t\t\t\tconst contextedTerms = measure.contexts[staffIndex];\n\n\t\t\t\tconst tailEvent = events[events.length - 1];\n\t\t\t\tconst tailStaff = tailEvent ? tailEvent.staff : 0;\n\n\t\t\t\t// TODO: modify full measure rests duration\n\n\t\t\t\treturn {\n\t\t\t\t\ttickMap,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t...basic,\n\t\t\t\t\t// TODO: consider staff altered voice\n\t\t\t\t\tcontextedTerms,\n\t\t\t\t\tmarks: [],\n\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\theadStaff: staffIndex,\n\t\t\t\t\ttailStaff,\n\t\t\t\t\tbar,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\twhile (voices.length < voiceCount) {\n\t\t\t\tconst staffIndex = leftStaves.values().next().value || 0;\n\t\t\t\tleftStaves.delete(staffIndex);\n\n\t\t\t\tconst basic = measure.basics[staffIndex];\n\t\t\t\tconst terms = measure.contexts[staffIndex];\n\n\t\t\t\tconst chiefVoice = voices.every((voice) => voice.headStaff !== staffIndex);\n\n\t\t\t\tconst voice = emptyVoiceFromStaffMeasure(\n\t\t\t\t\t{\n\t\t\t\t\t\tterms,\n\t\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\t\t...basic,\n\t\t\t\t\t\tbreak: measure.break,\n\t\t\t\t\t\tpageBreak: measure.pageBreak,\n\t\t\t\t\t},\n\t\t\t\t\tchiefVoice\n\t\t\t\t);\n\t\t\t\tvoice.headStaff = staffIndex;\n\t\t\t\tvoice.tailStaff = staffIndex;\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\n\t\t\treturn voices;\n\t\t});\n\n\t\t// compute traits for voice-measures\n\t\tmeasures.forEach((voices) =>\n\t\t\tvoices.forEach((measure) => {\n\t\t\t\tconst words = [];\n\n\t\t\t\tif (!measure.empty) {\n\t\t\t\t\twords.push(`s${measure.headStaff}`);\n\t\t\t\t\twords.push(`s${measure.tailStaff}`);\n\t\t\t\t}\n\n\t\t\t\tObject.values(measure.tickMap).forEach((event) => {\n\t\t\t\t\tif (event instanceof EventTerm) {\n\t\t\t\t\t\twords.push(`s${event.staff}`);\n\n\t\t\t\t\t\tif (event.stemDirection) {\n\t\t\t\t\t\t\tconst sd = `st${event.staff}-${event.stemDirection}`;\n\t\t\t\t\t\t\twords.push(sd, sd);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (event.grace) words.push(`gd${event.mainDuration}`);\n\t\t\t\t\t\telse words.push(`d${event.mainDuration}`);\n\n\t\t\t\t\t\tif (event.rest) words.push('r-' + event.rest);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tevent.pitches.forEach((pitch) => {\n\t\t\t\t\t\t\t\twords.push(`p1-${pitch.note}`);\n\t\t\t\t\t\t\t\twords.push(`p8-${Math.round(pitch.note / 8)}`);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tmeasure.trait = HashVector.fromWords(words);\n\t\t\t})\n\t\t);\n\t\t//console.log(\"measure traits:\");\n\t\t//console.table(measures.map(voices => voices.map(measure => hashToHex(measure.trait.toHash()))));\n\n\t\tconst staffToGroup: Record = this.staffGroups\n\t\t\t.flat(1)\n\t\t\t.reduce((map, si) => ((map[si] = this.staffGroups.findIndex((group) => group.includes(si))), map), {});\n\n\t\t// sort voices to connect voices between neighhoring measures\n\t\tconst voiceTraits = Array(voiceCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, index) => ({ vector: HashVector.zero, index, weight: 0, headStaff: null }));\n\t\tmeasures.forEach((voices, mi) => {\n\t\t\tvoiceTraits.sort((v1, v2) => v2.weight - v1.weight);\n\n\t\t\tconst leftVoices = new Set(voices);\n\t\t\tvoiceTraits.forEach((voiceTrait) => {\n\t\t\t\tconst vs = [...leftVoices];\n\t\t\t\tlet measure = vs[0];\n\t\t\t\tif (mi > 0 && vs.length > 1) {\n\t\t\t\t\tconst consistencies = vs.map((measure) =>\n\t\t\t\t\t\tstaffToGroup[measure.headStaff] === staffToGroup[voiceTrait.headStaff]\n\t\t\t\t\t\t\t? cosHashes(voiceTrait.vector.toHash(), measure.trait.toHash())\n\t\t\t\t\t\t\t: -1\n\t\t\t\t\t);\n\t\t\t\t\tmeasure = vs[argmax(consistencies)];\n\t\t\t\t}\n\t\t\t\tleftVoices.delete(measure);\n\n\t\t\t\tmeasure.voiceIndex = voiceTrait.index;\n\t\t\t\tvoiceTrait.vector.scale(0.4).add(measure.trait);\n\n\t\t\t\tvoiceTrait.weight = Object.keys(measure.tickMap).length;\n\n\t\t\t\tif (mi === 0) voiceTrait.headStaff = measure.headStaff;\n\t\t\t});\n\n\t\t\tvoices.sort((m1, m2) => m1.voiceIndex - m2.voiceIndex);\n\t\t});\n\n\t\t//const staffTraits = Array(this.stavesCount).fill(null).map((_, si) => HashVector.fromString(`s${si}`).toHash());\n\t\tconst staffVoiceIndices = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map(() => []);\n\t\tvoiceTraits.forEach((trait) => {\n\t\t\t//const consistencies = staffTraits.map(staff => cosHashes(trait.vector.toHash(), staff));\n\t\t\t//staffVoiceIndices[argmax(consistencies)].push(trait.index);\n\t\t\tstaffVoiceIndices[trait.headStaff].push(trait.index);\n\t\t});\n\n\t\tconst staves = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, si) => {\n\t\t\t\tif (!measures[0]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvoices: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//const voiceIndicies = measures[0].map((voice, vi) => ({ voice, vi })).filter(({ voice }) => voice.headStaff === si).map(({ vi }) => vi);\n\t\t\t\tconst voiceIndicies = staffVoiceIndices[si];\n\n\t\t\t\tconst voices = voiceIndicies.map((vi): TermVoice => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmode: 'relative',\n\t\t\t\t\t\tmeasures: measures.map((m) => m[vi]),\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn { voices };\n\t\t\t});\n\n\t\tremoveEmptyMeasuresInVoicesStaves(staves);\n\t\tstaves.forEach((staff) => staff.voices.forEach(markingTiesInVoice));\n\n\t\treturn staves;\n\t}\n\n\tperform(): Performing {\n\t\tconst staves = this.makeVoiceStaves();\n\t\tif (!staves) return null;\n\n\t\tconst tokenMap = new Map();\n\n\t\t// TODO: store staff channels in score\n\t\tconst staffToChannel = Array(this.stavesCount)\n\t\t\t.fill(null)\n\t\t\t.reduce((map, _, i) => {\n\t\t\t\tmap[i] = i;\n\t\t\t\treturn map;\n\t\t\t}, {});\n\n\t\tconst voiceChannels = [].concat(...staves.map((staff, si) => staff.voices.map(() => staffToChannel[si])));\n\n\t\tlet hasTempo = false;\n\n\t\tlet nextTick = 0;\n\t\tlet events0 = null;\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => !measure.empty)\n\t\t\t.map((measure) => {\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst voices: VoiceMeasure[] = [].concat(...staves.map((staff) => staff.voices.map((voice) => voice.measures[measureIndex])));\n\t\t\t\tconst voice0 = voices[0];\n\t\t\t\tconst tick = nextTick;\n\n\t\t\t\t//const signatureDuration = (WHOLE_DURATION * voice0.timeSignature.numerator) / voice0.timeSignature.denominator;\n\n\t\t\t\tnextTick += voice0.duration;\n\n\t\t\t\tconst notes = [].concat(\n\t\t\t\t\t...voices.map((measure, vi) => {\n\t\t\t\t\t\tconst tickFactor = 1; //measure.duration ? signatureDuration / measure.duration : 1;\n\n\t\t\t\t\t\tconst channel = voiceChannels[vi];\n\n\t\t\t\t\t\tconst chords = Object.values(measure.tickMap)\n\t\t\t\t\t\t\t.filter((term) => term instanceof EventTerm && !term.rest)\n\t\t\t\t\t\t\t.map((term: EventTerm) => {\n\t\t\t\t\t\t\t\tconst duration = Math.round(term.duration * tickFactor);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(term.tick), 'invalid event term tick:', term);\n\t\t\t\t\t\t\t\tconsole.assert(Number.isFinite(duration), 'invalid event term duration:', term);\n\n\t\t\t\t\t\t\t\tif (term.tick >= 0) {\n\t\t\t\t\t\t\t\t\t// exclude minus tick tokens\n\t\t\t\t\t\t\t\t\tterm.noteIds.forEach((id) => {\n\t\t\t\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: term.roundX,\n\t\t\t\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(term.staff));\n\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttick: Math.round(term.tick * tickFactor),\n\t\t\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\t\t\tpitches: term.pitches,\n\t\t\t\t\t\t\t\t\tnoteIds: term.noteIds,\n\t\t\t\t\t\t\t\t\tpart,\n\t\t\t\t\t\t\t\t\tstaff: term.staff,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn [].concat(\n\t\t\t\t\t\t\t...chords.map((chord) => {\n\t\t\t\t\t\t\t\t// exclude repeated pitches\n\t\t\t\t\t\t\t\tconst pitchMap: { [pitch: number]: TermPitch } = chord.pitches.reduce((map, pitch) => {\n\t\t\t\t\t\t\t\t\tmap[noteToPitch(pitch)] = pitch;\n\t\t\t\t\t\t\t\t\treturn map;\n\t\t\t\t\t\t\t\t}, {});\n\t\t\t\t\t\t\t\tconst pitches = Object.values(pitchMap).sort((p1, p2) => p1.note - p2.note);\n\n\t\t\t\t\t\t\t\treturn pitches\n\t\t\t\t\t\t\t\t\t.filter((pitch) => !pitch.tied)\n\t\t\t\t\t\t\t\t\t.map((pitch, i) => {\n\t\t\t\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttick: chord.tick,\n\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\t\t\t\ttrack: chord.part,\n\t\t\t\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\t\t\t\tchannel,\n\t\t\t\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\tconst events = [];\n\t\t\t\tevents0 = events0 || events;\n\n\t\t\t\tif (measure.marks)\n\t\t\t\t\tmeasure.marks.forEach((mark) => {\n\t\t\t\t\t\tif (mark instanceof TempoTerm) {\n\t\t\t\t\t\t\tconst bpm = mark.bpm;\n\t\t\t\t\t\t\tif (mark.isValid()) {\n\t\t\t\t\t\t\t\tconst es = hasTempo ? events : events0; // set the first tempo to the beginning of the track\n\t\t\t\t\t\t\t\tconst tick = hasTempo ? mark.tick : 0;\n\t\t\t\t\t\t\t\tes.push({\n\t\t\t\t\t\t\t\t\ttrack: 0,\n\t\t\t\t\t\t\t\t\tticks: tick,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\ttype: 'meta',\n\t\t\t\t\t\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\t\t\t\t\t\tmicrosecondsPerBeat: Math.round(60e6 / bpm),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\thasTempo = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration: measure.duration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents,\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tif (!hasTempo) {\n\t\t\tmeasures[0].events.push({\n\t\t\t\ttrack: 0,\n\t\t\t\tticks: 0,\n\t\t\t\tdata: {\n\t\t\t\t\ttype: 'meta',\n\t\t\t\t\tsubtype: 'setTempo',\n\t\t\t\t\tmicrosecondsPerBeat: 0.5e6, // TODO\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tperformByEstimation(): Performing {\n\t\tconst tokenMap = new Map();\n\t\tlet nextTick = 0;\n\n\t\tconst measures = this.measures\n\t\t\t.filter((measure) => measure.events.some((event) => event.predisposition))\n\t\t\t.map((measure) => {\n\t\t\t\tconst tick = nextTick;\n\t\t\t\tconst duration = Math.round(measure.estimatedDuration || fractionMul(WHOLE_DURATION, measure.timeSignature));\n\t\t\t\tconst basic = measure.basics[0];\n\n\t\t\t\tnextTick += duration;\n\n\t\t\t\tconst { systemIndex, right: endX } = measure.position;\n\t\t\t\tconst measureIndex = measure.measureIndex;\n\n\t\t\t\tconst chords = measure.events.filter((event) => event.predisposition && event.predisposition.fake < 0.5 && !event.rest);\n\t\t\t\tconst notes = chords\n\t\t\t\t\t.map((chord) => {\n\t\t\t\t\t\tconst noteTick = Math.round(chord.predisposition.tick);\n\n\t\t\t\t\t\tchord.noteIds.forEach((id) => {\n\t\t\t\t\t\t\ttokenMap.set(id, {\n\t\t\t\t\t\t\t\tsystem: systemIndex,\n\t\t\t\t\t\t\t\tmeasure: measureIndex,\n\t\t\t\t\t\t\t\tx: chord.roundX,\n\t\t\t\t\t\t\t\tendX,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn chord.pitches.map((pitch, i) => {\n\t\t\t\t\t\t\tconst pitchValue = noteToPitch(pitch);\n\t\t\t\t\t\t\tconst id = chord.noteIds && chord.noteIds[i];\n\t\t\t\t\t\t\tconst part = this.staffGroups.findIndex((group) => group.includes(chord.staff));\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttick: noteTick,\n\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\tduration: chord.duration,\n\t\t\t\t\t\t\t\tchordPosition: {\n\t\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\t\tcount: chord.pitches.length,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttied: pitch.tied,\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\tids: [id],\n\t\t\t\t\t\t\t\ttrack: part,\n\t\t\t\t\t\t\t\tstaff: chord.staff,\n\t\t\t\t\t\t\t\tchannel: 0,\n\t\t\t\t\t\t\t\tsubNotes: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstartTick: 0,\n\t\t\t\t\t\t\t\t\t\tendTick: chord.duration,\n\t\t\t\t\t\t\t\t\t\tpitch: pitchValue,\n\t\t\t\t\t\t\t\t\t\tvelocity: 127,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.flat(1);\n\n\t\t\t\treturn {\n\t\t\t\t\ttick,\n\t\t\t\t\tduration,\n\t\t\t\t\tnotes,\n\t\t\t\t\tevents: [],\n\t\t\t\t\ttimeSignature: basic && basic.timeSignature,\n\t\t\t\t\tkeySignature: basic && basic.keySignature,\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst notation = new MetaNotation({ measures });\n\n\t\treturn {\n\t\t\tnotation,\n\t\t\ttokenMap,\n\t\t};\n\t}\n\n\tfeatureHash(): Hash {\n\t\tconst headMeasures = this.measures.slice(0, 16);\n\t\tconst measureWords = headMeasures.map((measure) => measure.featureWords);\n\n\t\tconst levels = [1, 4, 16].map((len) => {\n\t\t\tconst meaures = measureWords.slice(0, len).filter(Boolean);\n\t\t\tconst ys = meaures.map((words) => words[0]).flat(1);\n\t\t\tconst melodies = meaures.map((words) => words[1]).flat(1);\n\t\t\tconst rhythm = meaures.map((words) => words[2]).flat(1);\n\n\t\t\tconst [vecY, vecMelody, vecRhythm] = [ys, melodies, rhythm].map(HashVector.fromWords);\n\n\t\t\treturn HashVector.concat(vecY, vecMelody.sub(128), vecRhythm.sub(128));\n\t\t});\n\n\t\treturn HashVector.concat(...levels).toHash();\n\t}\n\n\tfeatureHashHex(): string {\n\t\treturn hashToHex(this.featureHash());\n\t}\n\n\tfeatureHashBigInt(): bigint {\n\t\treturn hashToBigInt(this.featureHash());\n\t}\n\n\tassignMeasureNumbers(): void {\n\t\tlet n = null as any;\n\t\tfor (const measure of this.measures) {\n\t\t\tif (!measure.discard && !measure.events.length) continue;\n\n\t\t\tif (measure.indent) n = null;\n\n\t\t\tif (!Number.isFinite(n)) n = measure.partialDuration ? 0 : 1;\n\n\t\t\tmeasure.measureNumber = n++;\n\t\t}\n\t}\n}\n\nexport { SpartitoMeasure, Spartito };\n","import { Fraction } from './interfaces';\nimport { ContextedTerm, ContextType } from './term';\nimport { Logger, DummyLogger } from './logger';\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nexport const mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst PHONETS = 'CDEFGAB';\n\nconst ALTER_NAMES = {\n\t[-2]: '\\u266D\\u266D',\n\t[-1]: '\\u266D',\n\t[0]: '\\u266E',\n\t[1]: '\\u266F',\n\t[2]: '\\uD834\\uDD2A',\n};\n\n/*\n\tCoordinates:\n\n\t\tnote:\n\t\t\tzero: the middle C line (maybe altered)\n\t\t\tpositive: high (right on piano keyboard)\n\t\t\tunit: a step in scales of the current staff key\n\n\t\tstaff Y:\n\t\t\tzero: the third (middle) line among 5 staff lines\n\t\t\tpositive: down\n\t\t\tunit: a interval between 2 neighbor staff lines\n*/\n\nexport default class StaffContext {\n\tlogger: Logger = new DummyLogger();\n\n\tclef: number = -3;\n\tkeyAlters: number[] = [];\n\toctaveShift: number = 0;\n\talters: number[] = [];\n\n\ttimeSignature: Fraction = {\n\t\tnumerator: 4,\n\t\tdenominator: 4,\n\t};\n\ttimeSigNumeric: boolean = false;\n\ttimeSigNumSet: boolean = false;\n\ttimeSigDenSet: boolean = false;\n\tdoubtingTimesig: boolean = true;\n\n\tchange(term: ContextedTerm) {\n\t\tswitch (term.type) {\n\t\t\tcase ContextType.Clef:\n\t\t\t\tthis.clef = term.clef;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.KeyAcc:\n\t\t\t\tthis.keyAlters[mod7(this.yToNote(term.y))] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.Acc:\n\t\t\t\tthis.alters[this.yToNote(term.y)] = term.alter;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.OctaveShift:\n\t\t\t\tthis.octaveShift = term.octaveShift;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureC:\n\t\t\t\tthis.timeSigNumeric = false;\n\t\t\t\tswitch (term.tokenType) {\n\t\t\t\t\tcase 'timesig-C44':\n\t\t\t\t\t\tthis.timeSignature.numerator = 4;\n\t\t\t\t\t\tthis.timeSignature.denominator = 4;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'timesig-C22':\n\t\t\t\t\t\tthis.timeSignature.numerator = 2;\n\t\t\t\t\t\tthis.timeSignature.denominator = 2;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t\tcase ContextType.TimeSignatureN:\n\t\t\t\tthis.timeSigNumeric = true;\n\t\t\t\tswitch (term.y) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif (this.timeSigDenSet) this.timeSignature.denominator = this.timeSignature.denominator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.denominator = term.number;\n\n\t\t\t\t\t\tthis.timeSigDenSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase -1:\n\t\t\t\t\t\tif (this.timeSigNumSet) this.timeSignature.numerator = this.timeSignature.numerator * 10 + term.number;\n\t\t\t\t\t\telse this.timeSignature.numerator = term.number;\n\n\t\t\t\t\t\tthis.timeSigNumSet = true;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.logger.warn('unexpected time signature Y:', term.y);\n\t\t\t\t}\n\t\t\t\tthis.doubtingTimesig = this.partialTimeSignature;\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tresetMeasure() {\n\t\tthis.alters = [];\n\n\t\tthis.timeSigNumSet = false;\n\t\tthis.timeSigDenSet = false;\n\t}\n\n\tresetSystem() {\n\t\tthis.keyAlters = [];\n\t}\n\n\tget keySignature(): number {\n\t\treturn this.keyAlters.filter((a) => Number.isInteger(a)).reduce((sum, a) => sum + a, 0);\n\t}\n\n\tget partialTimeSignature(): boolean {\n\t\treturn !this.timeSigNumSet !== !this.timeSigDenSet;\n\t}\n\n\tnoteToY(note: number): number {\n\t\treturn -note / 2 - this.clef - this.octaveShift * 3.5;\n\t}\n\n\tpitchToNote(pitch: number, { preferredAlter = null } = {}): { note: number; alter: number } {\n\t\tif (!preferredAlter) preferredAlter = this.keySignature < 0 ? -1 : 1;\n\n\t\tconst group = Math.floor((pitch - MIDDLE_C) / 12);\n\t\tconst gp = mod12(pitch);\n\t\tconst alteredGp = GROUP_N_TO_PITCH.includes(gp) ? gp : mod12(gp - preferredAlter);\n\t\tconst gn = GROUP_N_TO_PITCH.indexOf(alteredGp);\n\t\tthis.logger.assert(gn >= 0, 'invalid preferredAlter:', pitch, preferredAlter, alteredGp);\n\n\t\tconst naturalNote = group * 7 + gn;\n\n\t\tconst alterValue = gp - alteredGp;\n\t\tconst keyAlterValue = this.keyAlters[gn] || 0;\n\t\tconst onAcc = Number.isInteger(this.alters[naturalNote]);\n\n\t\tconst alter = onAcc ? alterValue : alterValue === keyAlterValue ? null : alterValue;\n\n\t\treturn { note: naturalNote, alter };\n\t}\n\n\tpitchToY(pitch: number, { preferredAlter = null } = {}): { y: number; alter: number } {\n\t\tconst { note, alter } = this.pitchToNote(pitch, { preferredAlter });\n\t\tconst y = this.noteToY(note);\n\n\t\treturn { y, alter };\n\t}\n\n\tyToNote(y: number): number {\n\t\tthis.logger.assert(Number.isInteger(y * 2), 'invalid y:', y);\n\n\t\treturn (-y - this.octaveShift * 3.5 - this.clef) * 2;\n\t}\n\n\talterOnNote(note: number): number {\n\t\tif (Number.isInteger(this.alters[note])) return this.alters[note];\n\n\t\tconst gn = mod7(note);\n\t\tif (Number.isInteger(this.keyAlters[gn])) return this.keyAlters[gn];\n\n\t\treturn 0;\n\t}\n\n\tnoteToPitch(note: number): number {\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tconst pitch = MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + this.alterOnNote(note);\n\t\tif (!Number.isFinite(pitch)) {\n\t\t\tthis.logger.warn('invalid pitch value:', pitch, note, group, gn);\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn pitch;\n\t}\n\n\tyToPitch(y: number): number {\n\t\treturn this.noteToPitch(this.yToNote(y));\n\t}\n\n\tyToPitchName(y: number): string {\n\t\tconst note = this.yToNote(y);\n\t\tconst group = Math.floor(note / 7);\n\t\tconst gn = mod7(note);\n\n\t\tlet alter = this.alterOnNote(note);\n\t\tif (!alter && !Number.isInteger(this.alters[note])) alter = null;\n\n\t\treturn `${ALTER_NAMES[alter] ? ALTER_NAMES[alter] : ''}${PHONETS[gn]}${group + 4}`;\n\t}\n}\n","import sha1 from 'js-sha1';\n\nimport * as measureLayout from '../measureLayout';\nimport * as staffLayout from '../staffLayout';\nimport { SimpleClass } from './aux_/typedJSON';\nimport { EventSystem, MeasureBrief, MusicSheet, RecognitionSettings, ScoreData, TermMeasure, TermStaff, VoicesStaff } from './interfaces';\nimport { DummyLogger, Logger } from './logger';\nimport { evaluateMeasure } from './measureEvaluator';\nimport { PatchMeasure } from './patch';\nimport { Measure, Page, Staff, System } from './scoreComponents';\nimport { hashSemanticPoint, SemanticPoint, SemanticType } from './semanticPoint';\nimport { BOS_ELEMENT, fractionToElems, SemanticCluster, SemanticElement, SemanticElementType } from './semanticTopology';\nimport { Spartito, SpartitoMeasure } from './spartito';\nimport StaffContext from './staffContext';\nimport { ContextedTerm, ContextType, EventTerm, WHOLE_DURATION } from './term';\nimport type { SemanticPointInMeasure } from './timewiseGraph';\nimport { TimewiseGraph } from './timewiseGraph';\nimport { Token, TokenType } from './token';\nimport { distance2D, solveOverlapping } from './utils';\n\nexport const VERSION = 14;\n\ninterface Topology {\n\tclusters: SemanticCluster[];\n}\n\ninterface PaperOptions {\n\traggedLast: boolean;\n\traggedBottom: boolean;\n\traggedLastBottom: boolean;\n}\n\nconst GRAND_STAFF_LAYOUT = '{-}';\n\nconst processStaffContext = (staff: TermStaff, logger: Logger = new DummyLogger()): void => {\n\tconst context = new StaffContext();\n\tcontext.logger = logger;\n\n\tfor (const row of staff.rows) {\n\t\tfor (const measure of row) {\n\t\t\tconst startEvent = measure.terms.find((term) => term instanceof EventTerm) as EventTerm;\n\t\t\tlet tick = startEvent ? Math.min(startEvent.tick, 0) : 0;\n\n\t\t\tmeasure.terms.forEach((term) => {\n\t\t\t\tif (term instanceof ContextedTerm) {\n\t\t\t\t\tterm.tick = tick; // TODO: not working here because measure not regulated yet\n\t\t\t\t\tcontext.change(term);\n\t\t\t\t} else if (term instanceof EventTerm) {\n\t\t\t\t\tconst endTick = term.tick + (term.duration || 0);\n\t\t\t\t\tif (endTick > tick) tick = endTick;\n\n\t\t\t\t\tif (term.ys) {\n\t\t\t\t\t\tterm.pitches = term.ys.map((y) => {\n\t\t\t\t\t\t\tconst note = context.yToNote(y);\n\t\t\t\t\t\t\tconst alter = context.alterOnNote(note);\n\n\t\t\t\t\t\t\treturn { note, alter, octaveShift: context.octaveShift };\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeasure.timeSignature = { ...context.timeSignature };\n\t\t\tmeasure.timeSigNumeric = context.timeSigNumeric;\n\t\t\tmeasure.doubtfulTimesig =\n\t\t\t\tcontext.doubtingTimesig ||\n\t\t\t\t!Number.isInteger(Math.log2(measure.timeSignature.denominator)) ||\n\t\t\t\tmeasure.timeSignature.numerator <= measure.timeSignature.denominator / 4;\n\n\t\t\tmeasure.keySignature = context.keySignature;\n\n\t\t\t// fill empty measure duration\n\t\t\tif (measure.duration === 0) measure.duration = (WHOLE_DURATION * measure.timeSignature.numerator) / measure.timeSignature.denominator;\n\n\t\t\tcontext.resetMeasure();\n\t\t}\n\n\t\tcontext.resetSystem();\n\t}\n};\n\nconst upgradeScoreData = (data: ScoreData): ScoreData => {\n\tif (data.version < 3) {\n\t\tconst { version, stavesCount, layoutTemplate, ...fields } = data;\n\t\tvoid version;\n\t\tvoid layoutTemplate;\n\n\t\tlet staffLayoutCode =\n\t\t\tstavesCount > 1\n\t\t\t\t? Array(stavesCount - 1)\n\t\t\t\t\t\t.fill(',')\n\t\t\t\t\t\t.join('')\n\t\t\t\t: '';\n\n\t\t// use graph staff by default for 2 staves score\n\t\tif (stavesCount === 2) staffLayoutCode = '{-}';\n\n\t\tdata = {\n\t\t\tversion: 3,\n\t\t\tstaffLayoutCode,\n\t\t\t...fields,\n\t\t};\n\t}\n\n\tif (data.version < 8) {\n\t\t// upgrade system measure bar semantics\n\t\tdata.pages.forEach((page) => {\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tif (system.semantics) {\n\t\t\t\t\tconst bars = system.semantics.filter((point) => point.semantic === SemanticType.vline_BarMeasure);\n\n\t\t\t\t\tsystem.semantics = [].concat(\n\t\t\t\t\t\t...system.staves.map((staff) => {\n\t\t\t\t\t\t\tconst oy = staff.top + staff.staffY;\n\n\t\t\t\t\t\t\treturn bars.map((point) => ({\n\t\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\t\ty: point.y + oy,\n\t\t\t\t\t\t\t\textension: {\n\t\t\t\t\t\t\t\t\t...point.extension,\n\t\t\t\t\t\t\t\t\ty1: point.extension.y1 + oy,\n\t\t\t\t\t\t\t\t\ty2: point.extension.y2 + oy,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tdata.version = 8;\n\t}\n\n\tif (data.version < 9) {\n\t\t// remove old format spartito\n\t\tdata.spartito = null;\n\n\t\tdata.version = 9;\n\t}\n\n\treturn data;\n};\n\nconst bitsToMask = (bits: number[]): number => bits.reduce((mask, bit, i) => (bit ? mask | (1 << i) : mask), 0);\n\ninterface PointPosition {\n\tpoint: SemanticPoint;\n\tpageIndex: number;\n\tsystemIndex: number;\n\tstaffIndex: number;\n}\n\ninterface MeasureValidation {\n\ttickMap: { [tick: number]: number };\n}\n\ninterface Size {\n\twidth: number;\n\theight: number;\n}\n\nclass Score extends SimpleClass {\n\tstatic className = 'Score';\n\n\tversion = VERSION;\n\n\ttitle: string;\n\t// in pixels\n\tpageSize: Size;\n\tunitSize: number;\n\tstaffLayoutCode: string;\n\n\tpaperOptions?: Partial;\n\n\theaders: { [key: string]: string };\n\n\ttextAnnotations: { [id: string]: string };\n\n\ttags?: string[];\n\n\tinstrumentDict: { [key: string]: string };\n\n\tpages: Page[];\n\ttopology: Topology;\n\tspartito?: Spartito;\n\n\tpatches?: PatchMeasure[];\n\n\tsettings: RecognitionSettings;\n\n\tconstructor(data: ScoreData) {\n\t\tsuper();\n\t\tsuper.assign(upgradeScoreData(data));\n\n\t\tthis.pages = this.pages || [];\n\t\tthis.headers = this.headers || {};\n\t\tthis.instrumentDict = this.instrumentDict || {};\n\n\t\tthis.pageSize = this.pageSize || {\n\t\t\t// A4 paper\n\t\t\twidth: 794,\n\t\t\theight: 1122,\n\t\t};\n\n\t\tthis.unitSize = this.unitSize || null;\n\n\t\tthis.staffLayoutCode = this.staffLayoutCode || (this.maxStavesCount === 2 ? GRAND_STAFF_LAYOUT : Array(this.maxStavesCount).fill('').join(','));\n\t}\n\n\tget systems(): System[] {\n\t\treturn [].concat(...this.pages.map((page) => page.systems));\n\t}\n\n\tget measureCount(): number {\n\t\treturn this.systems.reduce((sum, system) => sum + (system.measureCount || 0), 0);\n\t}\n\n\tget imageKeys(): string[] {\n\t\treturn [\n\t\t\t...this.pages.map((page) => page.source?.url),\n\t\t\t...this.systems.map((system) => system.backgroundImage),\n\t\t\t...[].concat(\n\t\t\t\t...this.systems.map((system) =>\n\t\t\t\t\t[...system.staves.map((staff) => staff.backgroundImage), ...system.staves.map((staff) => staff.maskImage)].filter(Boolean)\n\t\t\t\t)\n\t\t\t),\n\t\t].filter(Boolean);\n\t}\n\n\tget breakSystemIndices(): number[] {\n\t\tconst indices = [];\n\t\tlet systemCount = 0;\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tif (i < this.pages.length - 1) {\n\t\t\t\tsystemCount += page.systems.length;\n\t\t\t\tindices.push(systemCount - 1);\n\t\t\t}\n\t\t});\n\n\t\treturn indices;\n\t}\n\n\tget staffLayout(): staffLayout.StaffLayout {\n\t\treturn staffLayout.parseCode(this.staffLayoutCode);\n\t}\n\n\tget measureLayoutCode(): string {\n\t\treturn this.spartito?.measureLayoutCode;\n\t}\n\n\tget maxStavesCount(): number {\n\t\treturn Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t}\n\n\tget sidBlackList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidBlackList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget sidWhiteList(): Set {\n\t\tconst ids = [].concat(...this.systems.map((system) => system.sidWhiteList));\n\n\t\treturn new Set(ids);\n\t}\n\n\tget semanticHash(): string {\n\t\tconst ids = [].concat(\n\t\t\t...this.systems.map((system) =>\n\t\t\t\t[].concat(...system.staves.map((staff) => (staff.semantics ? system.qualifiedSemantics(staff.semantics).map((s) => s.id) : [])))\n\t\t\t)\n\t\t);\n\t\treturn sha1(ids.join(''));\n\t}\n\n\teventSystemsToTermStaves(eventSystems: EventSystem[], logger: Logger = new DummyLogger()): TermStaff[] {\n\t\t// [staff]\n\t\tconst termStaves: TermStaff[] = Array(this.maxStavesCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, staffIndex): TermStaff => {\n\t\t\t\treturn {\n\t\t\t\t\t// [system, measure]\n\t\t\t\t\trows: eventSystems.map((sys, i) =>\n\t\t\t\t\t\tsys.columns.map((column, ii): TermMeasure => {\n\t\t\t\t\t\t\tconst measure = column.rows[staffIndex];\n\t\t\t\t\t\t\tconsole.assert(measure, '[eventSystemsToTermStaves] measure is null:', staffIndex, column.rows);\n\n\t\t\t\t\t\t\tconst contexts = measure.contexts;\n\n\t\t\t\t\t\t\t// prepend octave shift 0 at begin of every system\n\t\t\t\t\t\t\tif (ii === 0) {\n\t\t\t\t\t\t\t\tif (!contexts.some((term) => term.type === ContextType.OctaveShift)) {\n\t\t\t\t\t\t\t\t\tcontexts.unshift(\n\t\t\t\t\t\t\t\t\t\tnew ContextedTerm({\n\t\t\t\t\t\t\t\t\t\t\tstaff: staffIndex,\n\t\t\t\t\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t\t\t\t\t\ttokenType: TokenType.OctaveShift0,\n\t\t\t\t\t\t\t\t\t\t\ttick: 0,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst terms = [...(measure.events || []), ...contexts].sort((t1, t2) => t1.x - t2.x);\n\n\t\t\t\t\t\t\tconst pageBreak = staffIndex === 0 && ii === sys.columns.length - 1 && this.breakSystemIndices.includes(i);\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tterms,\n\t\t\t\t\t\t\t\t//xToTick: column.xToTick,\n\t\t\t\t\t\t\t\tduration: column.duration,\n\t\t\t\t\t\t\t\tpageBreak,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t\t),\n\t\t\t\t};\n\t\t\t});\n\t\ttermStaves.forEach((staff) => processStaffContext(staff, logger));\n\n\t\treturn termStaves;\n\t}\n\n\tresetPageLayout(parameters: { unitSize?: number; pageSize?: Size }) {\n\t\tconst { unitSize = this.unitSize, pageSize = this.pageSize } = parameters;\n\n\t\tconst newCenter = {\n\t\t\tx: (pageSize.width * 0.5) / unitSize,\n\t\t\ty: (pageSize.height * 0.5) / unitSize,\n\t\t};\n\n\t\tthis.pages.forEach((page) => {\n\t\t\tconst offsetX = newCenter.x - page.width / 2;\n\t\t\tconst offsetY = newCenter.y - page.height / 2;\n\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tsystem.left += offsetX;\n\t\t\t\tsystem.top += offsetY;\n\t\t\t});\n\n\t\t\tif (page.semantics) {\n\t\t\t\tpage.semantics.forEach((point) => {\n\t\t\t\t\tpoint.x += offsetX;\n\t\t\t\t\tpoint.y += offsetY;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tpage.width = pageSize.width / unitSize;\n\t\t\tpage.height = pageSize.height / unitSize;\n\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations });\n\t\t});\n\n\t\tthis.unitSize = unitSize;\n\t\tthis.pageSize = pageSize;\n\t}\n\n\tgetMeasure(measureIndex: number): {\n\t\tmeasureIndex: number;\n\t\tsystem: System;\n\t\tlocalIndex: number;\n\t\tleft: number;\n\t\tright: number;\n\t\tmeasures: Measure[];\n\t} {\n\t\tlet index = measureIndex;\n\t\tfor (const system of this.systems) {\n\t\t\tif (index < system.measureCount) {\n\t\t\t\tconst staff = system.staves[0];\n\t\t\t\tconst measure = staff.measures[index];\n\t\t\t\tconsole.assert(measure, 'measure is null:', system.measureCount, index, staff.measures);\n\t\t\t\tconst measures = system.getStaffArray(this.maxStavesCount).map((staff) => staff && staff.measures[index]);\n\n\t\t\t\treturn {\n\t\t\t\t\tmeasureIndex,\n\t\t\t\t\tsystem,\n\t\t\t\t\tlocalIndex: index,\n\t\t\t\t\tleft: measure.left,\n\t\t\t\t\tright: measure.right,\n\t\t\t\t\tmeasures,\n\t\t\t\t};\n\t\t\t}\n\t\t\tindex -= system.measureCount;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetRawCluster(measureIndex: number, threshold: number, { timeSignature }: Partial = {}): SemanticCluster {\n\t\tconst position = this.getMeasure(measureIndex);\n\t\tif (!position) return null;\n\n\t\tconst { system, left, right } = position;\n\t\t//console.log(\"measure:\", system, left, right);\n\n\t\tconst elements: SemanticElement[] = [BOS_ELEMENT];\n\n\t\tif (timeSignature) elements.push(...fractionToElems(timeSignature));\n\n\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tlet points = system.qualifiedSemantics(staff.semantics, threshold).filter((point) => point.x > left && point.x < right);\n\t\t\tpoints = solveOverlapping(points);\n\n\t\t\t// exlude tempo noteheads\n\t\t\tconst tempoNhs = points.filter((point) => point.semantic === SemanticType.TempoNotehead);\n\t\t\ttempoNhs.forEach((tempoNh) => {\n\t\t\t\tconst index = points.findIndex((point) => /^Notehead/.test(point.semantic) && distance2D(tempoNh, point) < 0.3);\n\t\t\t\tif (index >= 0) points.splice(index, 1);\n\t\t\t});\n\n\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\n\t\t\tpoints.forEach((point) => {\n\t\t\t\tconst type = SemanticElementType[point.semantic];\n\t\t\t\tif (type) {\n\t\t\t\t\tlet y1 = point.y;\n\t\t\t\t\tlet y2 = point.y;\n\t\t\t\t\tif (type === SemanticElementType.vline_Stem) {\n\t\t\t\t\t\ty1 = point.extension.y1;\n\t\t\t\t\t\ty2 = point.extension.y2;\n\t\t\t\t\t}\n\n\t\t\t\t\telements.push({\n\t\t\t\t\t\tid: point.id,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tstaff: staff.index,\n\t\t\t\t\t\tx: point.x - left,\n\t\t\t\t\t\ty1: y1 + y0,\n\t\t\t\t\t\ty2: y2 + y0,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new SemanticCluster({\n\t\t\tindex: measureIndex,\n\t\t\telements,\n\t\t});\n\t}\n\n\tgetRawClusters(threshold: number = 1): SemanticCluster[] {\n\t\t//const times = this.getMeasuresTime();\n\n\t\treturn Array(this.measureCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, mi) => this.getRawCluster(mi, threshold /*, times[mi]*/));\n\t}\n\n\tmakeSpartito(logger: Logger = new DummyLogger()): Spartito {\n\t\tlet eventSystems: EventSystem[] = this.systems.map((system) => system.getEvents(this.maxStavesCount));\n\n\t\t/*if (this.topology) {\n\t\t\tconst clusters = this.topology.clusters;\n\n\t\t\t// [measure, staff, event]\n\t\t\tconst eventsColumns: ChordColumn[][][] = clusters\n\t\t\t\t.filter((cluster) => cluster.index < this.measureCount)\n\t\t\t\t.reduce((columns, cluster) => {\n\t\t\t\t\tconst { system, measures } = this.getMeasure(cluster.index);\n\t\t\t\t\tconst events = cluster.getEvents();\n\n\t\t\t\t\tconst systemY0 = system.staves[0].top + system.staves[0].staffY - 2;\n\t\t\t\t\tconst x0 = measures.filter(Boolean)[0].left;\n\n\t\t\t\t\tconst staves = system.getStaffArray(this.maxStavesCount);\n\n\t\t\t\t\t// translate by staff & measure relative offset\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst staff = staves[event.staff];\n\t\t\t\t\t\tconst y0 = staff.top + staff.staffY - systemY0;\n\t\t\t\t\t\tevent.ys = event.ys.map((y) => roundNumber(y - y0, 0.5));\n\n\t\t\t\t\t\tevent.left += x0;\n\t\t\t\t\t\tevent.right += x0;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst column = measures.map((measure, staffIndex) => {\n\t\t\t\t\t\tif (!measure) return [];\n\n\t\t\t\t\t\t//console.log(\"m:\", mi, \"s:\", staffIndex);\n\t\t\t\t\t\tconst localEvents = events.filter((event) => event.staff === staffIndex);\n\t\t\t\t\t\t//measure.assignModifiersOnEvents(localEvents);\n\t\t\t\t\t\tmeasure.assignAccessoriesOnEvents(localEvents);\n\n\t\t\t\t\t\treturn localEvents;\n\t\t\t\t\t});\n\n\t\t\t\t\tcolumns[cluster.index] = column;\n\n\t\t\t\t\treturn columns;\n\t\t\t\t}, []);\n\n\t\t\tconst breakSystemIndices = this.breakSystemIndices;\n\n\t\t\tconst basicEventSystems = eventSystems;\n\t\t\teventSystems = [];\n\n\t\t\tlet measures = 0;\n\t\t\tfor (const system of this.systems) {\n\t\t\t\tconst esys = system.getEventsFunctional(this.maxStavesCount, (si, mi) => eventsColumns[measures + mi] && eventsColumns[measures + mi][si], [], {\n\t\t\t\t\tuseXMap: false,\n\t\t\t\t});\n\n\t\t\t\tconst basicSys = basicEventSystems[system.index];\n\t\t\t\t//onst nullN = esys.columns.filter(c => !c).length;\n\t\t\t\t//if (nullN)\n\t\t\t\t//\tconsole.log(\"null:\", nullN, esys.columns.length);\n\t\t\t\tesys.columns = esys.columns.map((column, i) => (column ? column : basicSys.columns[i]));\n\n\t\t\t\tconst sysIndex = this.systems.indexOf(system);\n\t\t\t\tconst pageBreak = breakSystemIndices.includes(sysIndex);\n\t\t\t\tconst lastColumn = esys.columns[esys.columns.length - 1];\n\t\t\t\tif (lastColumn) {\n\t\t\t\t\tlastColumn.break = true;\n\t\t\t\t\tlastColumn.pageBreak = pageBreak;\n\t\t\t\t}\n\n\t\t\t\teventSystems.push(esys);\n\t\t\t\tmeasures += system.measureCount;\n\t\t\t}\n\t\t}*/\n\n\t\tconst staves = this.eventSystemsToTermStaves(eventSystems, logger);\n\n\t\t// assign staff basics for columns\n\t\teventSystems.forEach((sys, ri) => {\n\t\t\tsys.columns.forEach((column, mi) => {\n\t\t\t\tcolumn.basics = staves.map((staff) => {\n\t\t\t\t\tconst { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig } = staff.rows[ri][mi];\n\n\t\t\t\t\treturn { timeSignature, timeSigNumeric, keySignature, doubtfulTimesig };\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tconst clusters = null; //this.topology && this.topology.clusters;\n\n\t\tconst measures = [].concat(\n\t\t\t...eventSystems.map((esys) =>\n\t\t\t\tesys.columns.map((column) => {\n\t\t\t\t\tconst measureIndex = column.measureIndex;\n\t\t\t\t\tconst { system, localIndex, left, right } = this.getMeasure(measureIndex);\n\n\t\t\t\t\tconst cluster = clusters && clusters.find((cluster) => cluster.index === measureIndex);\n\n\t\t\t\t\tconst staffYsFull = [];\n\t\t\t\t\tsystem.staves.forEach((staff) => (staffYsFull[staff.index] = staff.top + staff.staffY));\n\n\t\t\t\t\tconst patch = this.patches && this.patches.find((patch) => patch.measureIndex === measureIndex);\n\t\t\t\t\tconst events = patch ? patch.events : SpartitoMeasure.reorderEvents([].concat(...column.rows.map((row) => row.events)), staffYsFull);\n\n\t\t\t\t\tconst barTypes = Object.fromEntries(Object.entries(column.barTypes).map(([k, v]) => [k, v / system.staves.length]));\n\t\t\t\t\tconst indent = localIndex === 0 && system.indent;\n\n\t\t\t\t\treturn new SpartitoMeasure({\n\t\t\t\t\t\tmeasureIndex,\n\t\t\t\t\t\tstaffMask: esys.staffMask,\n\t\t\t\t\t\tposition: {\n\t\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\t\tlocalIndex,\n\t\t\t\t\t\t\tleft,\n\t\t\t\t\t\t\tright,\n\t\t\t\t\t\t\tstaffYs: system.staves.map((staff) => staff.top + staff.staffY),\n\t\t\t\t\t\t\tstaffYsFull,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t//startX: column.startX,\n\t\t\t\t\t\t//width: column.width,\n\t\t\t\t\t\tduration: patch ? patch.duration : column.duration,\n\t\t\t\t\t\tevents,\n\t\t\t\t\t\tcontexts: column.rows.map((row) => row.contexts),\n\t\t\t\t\t\tmarks: column.marks,\n\t\t\t\t\t\tbreak: column.break,\n\t\t\t\t\t\tpageBreak: column.pageBreak,\n\t\t\t\t\t\tvoltaBegin: column.voltaBegin,\n\t\t\t\t\t\tvoltaEnd: column.voltaEnd,\n\t\t\t\t\t\talternative: column.alternative,\n\t\t\t\t\t\tbarTypes,\n\t\t\t\t\t\tindent,\n\t\t\t\t\t\tbasics: patch ? patch.basics : column.basics,\n\t\t\t\t\t\tmatrixH: cluster && cluster.matrixH,\n\t\t\t\t\t\tmatrixV: cluster && cluster.matrixV,\n\t\t\t\t\t\tvoices: patch ? patch.voices : null,\n\t\t\t\t\t\tpatched: !!patch,\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\t\tconst staffLayout = this.staffLayout;\n\t\tconst staffGroups = staffLayout.standaloneGroups.map((ids) => ids.map((id) => staffLayout.staffIds.indexOf(id)));\n\n\t\tthis.spartito = new Spartito({\n\t\t\tstavesCount: this.maxStavesCount,\n\t\t\tstaffGroups,\n\t\t\tmeasures,\n\t\t});\n\n\t\treturn this.spartito;\n\t}\n\n\tmakeMusicSheet(): MusicSheet {\n\t\tconst spartito = this.spartito || this.makeSpartito();\n\n\t\tif (!spartito.regulated) console.warn('[makeMusicSheet]\tspartito not regulated.');\n\n\t\tconst voiceStaves = spartito.makeVoiceStaves();\n\n\t\tconst { title, pageSize, unitSize, staffLayout, paperOptions, headers, instrumentDict } = this;\n\t\tconst measureLayout = this.getMeasureLayout();\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tpageSize,\n\t\t\tunitSize,\n\t\t\tmeasureLayout,\n\t\t\tstaffLayout,\n\t\t\tpaperOptions,\n\t\t\theaders,\n\t\t\tvoiceStaves,\n\t\t\tinstrumentDict,\n\t\t};\n\t}\n\n\tfindPoint(sid: string): PointPosition {\n\t\tfor (const system of this.systems) {\n\t\t\tfor (let si = 0; si < system.staves.length; ++si) {\n\t\t\t\tconst point = system.staves[si].semantics.find((point) => point.id === sid);\n\t\t\t\tif (point) {\n\t\t\t\t\tconst pageIndex = this.pages.findIndex((page) => page.systems.includes(system));\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpoint,\n\t\t\t\t\t\tpageIndex,\n\t\t\t\t\t\tsystemIndex: system.index,\n\t\t\t\t\t\tstaffIndex: si,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tgetMeasureSemantics(systemIndex: number, localIndex: number): SemanticPointInMeasure[] {\n\t\tconst system = this.systems[systemIndex];\n\t\tif (!system) return null;\n\n\t\tconst left = localIndex ? system.measureBars[localIndex - 1] : 0;\n\t\tconst right = system.measureBars[localIndex] || system.width;\n\n\t\treturn system.staves\n\t\t\t.map((staff, si) => {\n\t\t\t\tconst staffY = staff.top + staff.staffY;\n\t\t\t\treturn staff.semantics\n\t\t\t\t\t.filter((point) => point.x >= left && point.x < right)\n\t\t\t\t\t.map((point) => {\n\t\t\t\t\t\tconst [y1, y2] = Number.isFinite(point.extension?.y1) ? [point.extension.y1, point.extension.y2] : [point.y, point.y];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...point,\n\t\t\t\t\t\t\tstaff: si,\n\t\t\t\t\t\t\tsy1: y1 + staffY,\n\t\t\t\t\t\t\tsy2: y2 + staffY,\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t})\n\t\t\t.flat(1);\n\t}\n\n\tmakeTimewiseGraph({ store = false }: { store?: boolean } = {}): TimewiseGraph {\n\t\tif (!this.spartito) return null;\n\n\t\tconst measures = this.spartito.measures\n\t\t\t.filter((measure) => measure.events.length > 0)\n\t\t\t.map((measure) => {\n\t\t\t\tconst points = this.getMeasureSemantics(measure.position.systemIndex, measure.position.localIndex);\n\n\t\t\t\tconst graph = {\n\t\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\t\tleft: measure.position.left,\n\t\t\t\t\tright: measure.position.right,\n\t\t\t\t\tpoints,\n\t\t\t\t};\n\n\t\t\t\tif (store) measure.graph = graph;\n\n\t\t\t\treturn graph;\n\t\t\t});\n\n\t\treturn { measures };\n\t}\n\n\tgetTokenMap(): Map {\n\t\tconst map = new Map();\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => staff.measures.forEach((measure) => measure.tokens.forEach((token) => map.set(token.id, token))))\n\t\t);\n\n\t\treturn map;\n\t}\n\n\tassemble(confidenceThreshold: number = 1, logger: Logger = new DummyLogger()) {\n\t\tconst ids = new Map();\n\n\t\tconst append = (systemIndex, staffIndex, point) => {\n\t\t\tconst id = hashSemanticPoint(systemIndex, staffIndex, point);\n\t\t\tlogger.assert(!ids.has(id), 'semantic point hash conflicted:', id, point, ids.get(id));\n\n\t\t\tids.set(id, point);\n\t\t};\n\n\t\tthis.pages.forEach((page, index) => (page.index = index));\n\n\t\tlet measureIndex = 0;\n\t\tthis.systems.forEach((system, systemIndex) => {\n\t\t\tsystem.index = systemIndex;\n\t\t\tsystem.headMeasureIndex = measureIndex;\n\t\t\tsystem.prev = this.systems[systemIndex - 1] || null;\n\t\t\tsystem.next = this.systems[systemIndex + 1] || null;\n\n\t\t\tif (system.semantics && system.semantics.length) system.semantics.forEach((point) => append(systemIndex, null, point));\n\n\t\t\tsystem.assemble(confidenceThreshold, logger);\n\t\t\tmeasureIndex += system.measureCount;\n\t\t});\n\n\t\tthis.pages.forEach((page, i) => {\n\t\t\tpage.systems.forEach((system) => (system.pageIndex = i));\n\t\t\tpage.assemble({ textAnnotations: this.textAnnotations }, logger);\n\t\t});\n\t}\n\n\tassembleSystem(system: System, confidenceThreshold: number = 1) {\n\t\tthis.systems.forEach((system, si) => (system.index = si));\n\t\tconst systemIndex = system.index;\n\n\t\tif (system.semantics && system.semantics.length) {\n\t\t\tsystem.semantics.forEach((point) => hashSemanticPoint(systemIndex, null, point));\n\t\t\tsystem.assemble(confidenceThreshold);\n\t\t}\n\t}\n\n\tmarkVoices(staves: VoicesStaff[]): void {\n\t\tconst tokenMap = this.getTokenMap();\n\t\tfor (const token of tokenMap.values()) token.voice = 0;\n\n\t\tconst vis = []\n\t\t\t.concat(...staves.map((staff, s) => (staff.voices || []).map((_, v) => [s, v])))\n\t\t\t.sort(([s1, v1], [s2, v2]) => v1 - v2 || s1 - s2)\n\t\t\t.map(([s, v]) => `${s}|${v}`);\n\n\t\tstaves.forEach((staff, si) =>\n\t\t\t(staff.voices || []).forEach((voice, vi) =>\n\t\t\t\tvoice.measures.forEach((measure) => {\n\t\t\t\t\tconst voiceIndex = vis.indexOf(`${si}|${vi}`);\n\n\t\t\t\t\tconst events = Object.values(measure.tickMap).filter((event) => event instanceof EventTerm) as EventTerm[];\n\t\t\t\t\tevents.forEach((event) => {\n\t\t\t\t\t\tconst notes = event.noteIds ? event.noteIds.map((id) => tokenMap.get(id)).filter(Boolean) : [];\n\t\t\t\t\t\tconst accessories = event.accessories ? event.accessories.map((acc) => tokenMap.get(acc.id)).filter(Boolean) : [];\n\t\t\t\t\t\t//console.log(\"notes:\", si, vi, mi, event.noteIds, notes, accessories);\n\n\t\t\t\t\t\t[...notes, ...accessories].forEach((token) => (token.voice |= 1 << voiceIndex));\n\n\t\t\t\t\t\tif (event.timeWarp) notes.forEach((note) => (note.timeWarped = true));\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n\n\tasync replaceImageKeys(proc: (x: string | Buffer) => Promise): Promise {\n\t\tawait Promise.all([\n\t\t\t...(this.pages.map(async (page) => {\n\t\t\t\tif (page.source) page.source.url = await proc(page.source.url);\n\t\t\t}) as Promise[]),\n\t\t\t...this.systems.map((system) =>\n\t\t\t\tPromise.all([\n\t\t\t\t\tproc(system.backgroundImage).then((key) => (system.backgroundImage = key)),\n\t\t\t\t\t...(system.staves.map(async (staff) => {\n\t\t\t\t\t\tstaff.backgroundImage = await proc(staff.backgroundImage);\n\t\t\t\t\t\tstaff.maskImage = await proc(staff.maskImage);\n\t\t\t\t\t}) as Promise[]),\n\t\t\t\t])\n\t\t\t),\n\t\t]);\n\t}\n\n\tinferenceStaffLayout(): void {\n\t\t// inference the complete layout\n\t\tconst staffTotal = Math.max(...this.systems.map((system) => system.staves.length), 0);\n\t\tthis.staffLayoutCode = Array(staffTotal).fill('').join(',');\n\n\t\tconst completeSystems = this.systems.filter((system) => system.staves.length === staffTotal && system.bracketsAppearance);\n\t\tif (!completeSystems.length) return; // no enough evidence\n\n\t\tconst candidateCodes = completeSystems\n\t\t\t.map((system) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst layout = staffLayout.parseCode(system.bracketsAppearance);\n\t\t\t\t\tif (layout.staffIds.length !== system.staves.length) return null;\n\n\t\t\t\t\treturn system.bracketsAppearance;\n\t\t\t\t} catch (_) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(Boolean);\n\t\tif (!candidateCodes.length) return; // no valid layout\n\n\t\tconst codeCounting = candidateCodes.reduce((acc, code) => {\n\t\t\tconst count = acc[code] || 0;\n\t\t\tacc[code] = count + 1;\n\t\t\treturn acc;\n\t\t}, {} as { [code: string]: number });\n\t\tconst maxCount = Math.max(...Object.values(codeCounting));\n\t\tconst code = Object.entries(codeCounting).find(([_, count]) => count === maxCount)[0];\n\n\t\t// added connection lines between braces {-}\n\t\tconst connectedCode = code.replace(/\\{,*\\}/g, (match) => match.replace(/,/g, '-'));\n\t\tconst layout = staffLayout.parseCode(connectedCode);\n\n\t\tthis.staffLayoutCode = connectedCode;\n\t\t//console.log(\"complete code:\", code);\n\n\t\t// inference systems' mask\n\t\tlet lastSys: System = null;\n\t\tfor (const system of this.systems) {\n\t\t\tif (lastSys && system.staves.length === lastSys.staves.length && system.bracketsAppearance === lastSys.bracketsAppearance) {\n\t\t\t\tsystem.staffMaskChanged = null;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (system.staves.length < staffTotal && system.bracketsAppearance) {\n\t\t\t\t// validate the system brackets code\n\t\t\t\ttry {\n\t\t\t\t\tif (!staffLayout.parseCode(system.bracketsAppearance)) continue;\n\t\t\t\t} catch (_) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst search = (bits: (0 | 1)[]): number => {\n\t\t\t\t\tif (bits.length > layout.staffIds.length) return null;\n\n\t\t\t\t\tif (bits.reduce((sum, bit) => sum + bit, 0) === system.staves.length) return bitsToMask(bits);\n\n\t\t\t\t\tfor (const bit of [1, 0]) {\n\t\t\t\t\t\tconst bb = [...bits, bit] as (0 | 1)[];\n\t\t\t\t\t\tconst code1 = layout.partialMaskCode(bb);\n\t\t\t\t\t\tif (code1 === system.bracketsAppearance) return bitsToMask(bb);\n\t\t\t\t\t\telse if (system.bracketsAppearance.startsWith(code1)) {\n\t\t\t\t\t\t\tconst result = search(bb);\n\t\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\t\t\t\tconst mask = search([]);\n\t\t\t\t//console.log(\"mask:\", system.bracketsAppearance, mask.toString(2));\n\n\t\t\t\tsystem.staffMaskChanged = !lastSys || mask !== lastSys.staffMask ? mask : null;\n\t\t\t}\n\n\t\t\tlastSys = system;\n\t\t}\n\t}\n\n\tassignBackgroundForMeasure(measure: SpartitoMeasure): void {\n\t\tmeasure.backgroundImages = [];\n\n\t\tconst system = this.systems[measure.position.systemIndex];\n\t\tif (system.backgroundImage) {\n\t\t\tmeasure.backgroundImages.push({\n\t\t\t\turl: system.backgroundImage,\n\t\t\t\tposition: system.imagePosition,\n\t\t\t\toriginal: true,\n\t\t\t});\n\t\t}\n\n\t\tsystem.staves.forEach((staff) => {\n\t\t\tif (!system.backgroundImage && staff.backgroundImage)\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.backgroundImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t\toriginal: true,\n\t\t\t\t});\n\n\t\t\tif (staff.maskImage) {\n\t\t\t\tmeasure.backgroundImages.push({\n\t\t\t\t\turl: staff.maskImage.toString(),\n\t\t\t\t\tposition: {\n\t\t\t\t\t\t...staff.imagePosition,\n\t\t\t\t\t\ty: staff.imagePosition.y + staff.top,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tblackoutFakeNotes(scope: 'patched' | 'perfect' | 'all' = 'patched'): string[] {\n\t\tif (!this.spartito) return;\n\n\t\tlet inScope = (_) => true;\n\t\tswitch (scope) {\n\t\t\tcase 'patched':\n\t\t\t\tinScope = (measure) => measure.patched;\n\t\t\t\tbreak;\n\t\t\tcase 'perfect':\n\t\t\t\tinScope = (measure) => measure.patched || (measure.regulated && evaluateMeasure(measure).perfect);\n\t\t\t\tbreak;\n\t\t}\n\t\tconst measures = this.spartito.measures.filter(inScope);\n\n\t\tconst fakeIds = measures.reduce((ids, measure) => {\n\t\t\tif (!measure.regulated) return;\n\n\t\t\tconst voicedIds = measure.voices.flat(1);\n\t\t\tconst fakeChords = measure.events.filter((event) => !event.rest && !event.grace && !voicedIds.includes(event.id));\n\n\t\t\tfakeChords.forEach((event) => event.noteIds && ids.push(...event.noteIds));\n\n\t\t\treturn ids;\n\t\t}, [] as string[]);\n\t\tconst fakeIdSet = new Set(fakeIds);\n\n\t\tthis.systems.forEach((system) =>\n\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\tconst blackIds = staff.semantics.filter((point) => fakeIdSet.has(point.id)).map((point) => point.id);\n\t\t\t\tsystem.sidBlackList.push(...blackIds);\n\t\t\t})\n\t\t);\n\n\t\treturn fakeIds;\n\t}\n\n\tgetMeasureLayout(): measureLayout.MeasureLayout {\n\t\tconst code = this.spartito && this.spartito.measureLayoutCode;\n\t\tif (code) {\n\t\t\ttry {\n\t\t\t\treturn measureLayout.parseCode(code);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.debug('invalid measure layout code:', err);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t*splitToSingleScoresGen(): Generator {\n\t\tthis.assemble();\n\t\tconst startSysIndices = this.systems.filter((system) => system.index > 0 && system.indent && system.timeSignatureOnHead).map((system) => system.index);\n\n\t\tif (!startSysIndices.length) {\n\t\t\tyield this.deepCopy();\n\t\t\treturn;\n\t\t}\n\n\t\tconst templateScore = new Score({ ...this, pages: [], topology: undefined, spartito: undefined, patches: undefined });\n\n\t\t// clear temporary objects before deep dopy\n\t\tthis.pages.forEach((page) => {\n\t\t\tdelete page.tokens;\n\t\t\tpage.systems.forEach((system) => {\n\t\t\t\tdelete system.tokens;\n\t\t\t\tsystem.staves.forEach((staff) => {\n\t\t\t\t\tstaff.measures = [];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tlet startSysIndex = 0;\n\t\tfor (const endSysIndex of [...startSysIndices, this.systems.length]) {\n\t\t\tconst sysInRange = (system) => system.index >= startSysIndex && system.index < endSysIndex;\n\t\t\tconst pages = this.pages\n\t\t\t\t.filter((page) => page.systems.some(sysInRange))\n\t\t\t\t.map((page) => {\n\t\t\t\t\tconst { systems, ...fields } = page;\n\t\t\t\t\treturn new Page({ ...fields, systems: systems.filter(sysInRange).map((system) => new System({ ...system })) });\n\t\t\t\t});\n\n\t\t\tconst newScore = templateScore.deepCopy();\n\t\t\tnewScore.headers.SubScoreSystem = `${startSysIndex}-${endSysIndex - 1}`;\n\t\t\tnewScore.headers.SubScorePage = `${pages[0].index}-${pages[pages.length - 1].index}`;\n\n\t\t\t//newScore.pages = pages.map((page) => page.deepCopy());\n\t\t\tnewScore.pages = pages;\n\t\t\tnewScore.assemble();\n\t\t\tnewScore.inferenceStaffLayout();\n\n\t\t\tstartSysIndex = endSysIndex;\n\n\t\t\tyield newScore;\n\t\t}\n\t}\n\n\tsplitToSingleScores(): Score[] {\n\t\treturn [...this.splitToSingleScoresGen()];\n\t}\n}\n\nexport { PaperOptions, Score, Page, System, Staff, Measure, MeasureValidation };\nexport type { SemanticPointInMeasure };\n","import { RegulationSolution, RegulationSolutionEvent, EventPredisposition } from './interfaces';\nimport { SpartitoMeasure } from './spartitoMeasure';\nimport { EventCluster, EventElement, EventElementType } from './eventTopology';\nimport { argmax, frac } from './utils';\nimport { WHOLE_DURATION, StemBeam } from './term';\nimport { Logger, DummyLogger } from './logger';\n\ninterface BeadPicker {\n\tn_seq: number;\n\tquota: number;\n\tcost: number; // duration in milliseconds\n\n\tpredictCluster(cluster: EventCluster, tip: number): Promise;\n}\n\nenum BeadType {\n\tPass = 'i',\n\tDivision = 'd',\n\tDots = 'o',\n}\n\nconst DIVISION_NAMES = ['whole', 'half', 'quarter', 'eighth', 'sixteenth', 'thirtysecond', 'sixtyfourth', '128th', '256th'];\n\ninterface BeadNodeInitData {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n}\n\nconst RESIDUE_LOSS_WEIGHT = 0.2;\nconst VOICEN_LOSS_WEIGHT = 0.002;\nconst SPACE_LOSS_WEIGHT = 0.4 / WHOLE_DURATION;\nconst PRETENTIOUSNESS_LOSS_WEIGHT = 0.02;\n\nconst POSSIBILITY_LOW_BOUNDARY = 1e-12;\n\nconst PRETENTIOUSNESS_CLIP = 100;\n\ninterface ClusterEvaluation {\n\ttickErr: number;\n\ttwist: number;\n\tresidue: number;\n\tendTick: number;\n\tfatalError: boolean;\n\tvoiceN: number;\n\tspaceDuration: number;\n\tpretentiousness: number;\n\tloss: number;\n}\n\ninterface ElementState {\n\ttick: number;\n\tdivision: number;\n\tdots: number;\n\tbeam: StemBeam;\n\tstemDirection: string;\n\tgrace: boolean;\n\ttimeWarped: boolean;\n\tfullMeasure: boolean; // full measure rest\n\tfake: boolean;\n\torder: number;\n\tpredisposition: EventPredisposition;\n}\n\ninterface ClusterState {\n\telements: ElementState[];\n}\n\nconst STEM_DIRECTION_OPTIONS = [undefined, 'u', 'd'];\n\nconst BEAM_OPTIONS = [undefined, StemBeam.Open, StemBeam.Continue, StemBeam.Close];\n\nconst saveClusterState = (cluster: EventCluster): ClusterState => ({\n\telements: cluster.elements.map((elem) => ({\n\t\ttick: elem.tick!,\n\t\tdivision: elem.division!,\n\t\tdots: elem.dots!,\n\t\tbeam: elem.beam!,\n\t\tstemDirection: elem.stemDirection!,\n\t\tgrace: elem.grace!,\n\t\ttimeWarped: elem.timeWarped!,\n\t\tfullMeasure: elem.fullMeasure!,\n\t\tfake: elem.fake!,\n\t\torder: elem.order!,\n\t\tpredisposition: elem.predisposition!,\n\t})),\n});\n\nconst restoreClusterState = (cluster: EventCluster, state: ClusterState): void => cluster.elements.forEach((elem, i) => Object.assign(elem, state.elements[i]));\n\nconst measurePretentious = (p) => Math.min(PRETENTIOUSNESS_CLIP, -Math.log(p));\n\ninterface BeadDeductionContext {\n\tpicker: BeadPicker;\n\tlogger: Logger;\n\tptFactor: number; // pretentiousness tolerance factor\n}\n\nclass BeadNode {\n\tcluster: EventCluster;\n\telemIndex: number;\n\ttype: BeadType;\n\tpossibilities: number[];\n\tpretentiousness: number;\n\n\tchildren: Record;\n\taccessCount: number;\n\n\tconstructor(data: BeadNodeInitData) {\n\t\tObject.assign(this, data);\n\n\t\t//this.possibilities = this.possibilities.map((x, i) => (this.type === BeadType.Pass && !i) ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\n\t\tthis.children = {};\n\t\tthis.accessCount = 0;\n\t}\n\n\tnextBranch(): number | null {\n\t\tconst ps = this.possibilities.map((p, i) => p / (this.children[i] ? this.children[i].accessCount + 1 : 1));\n\t\t//const ps = this.possibilities.map((p, i) => p * (this.children[i] ? (2 ** -this.children[i].accessCount) : 1));\n\n\t\tif (ps.every((p) => !p)) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn null;\n\t\t}\n\n\t\treturn argmax(ps);\n\t}\n\n\tget currentElem(): EventElement {\n\t\treturn this.cluster.elements[this.elemIndex];\n\t}\n\n\tbranchID(ni: number): string {\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\treturn `i_${ni}`;\n\t\t\tcase BeadType.Division:\n\t\t\t\treturn DIVISION_NAMES[ni];\n\t\t\tcase BeadType.Dots:\n\t\t\t\treturn 'o' + '.'.repeat(ni);\n\t\t}\n\n\t\treturn '';\n\t}\n\n\tasync deduce({ picker, logger, ptFactor }: BeadDeductionContext, deep: number = 0): Promise {\n\t\t++this.accessCount;\n\n\t\tconst ni = this.nextBranch()!;\n\t\tlogger.debug(String.fromCodePoint(0x1f349) + ' '.repeat(deep), this.branchID(ni), this.accessCount > 1 ? `[${this.accessCount}]` : '');\n\n\t\tif (!Number.isInteger(ni) || ni < 0) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tthis.pretentiousness += measurePretentious(this.possibilities[ni]);\n\t\tif (this.pretentiousness > PRETENTIOUSNESS_CLIP * ptFactor) {\n\t\t\tthis.accessCount = Infinity;\n\t\t\treturn evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t}\n\n\t\tlet selfEval: null | ClusterEvaluation = null;\n\n\t\tswitch (this.type) {\n\t\t\tcase BeadType.Pass:\n\t\t\t\t{\n\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\tconst element = this.cluster.elements[ni];\n\t\t\t\t\tconsole.assert(element, 'null element:', ni, this.cluster.elements.length);\n\t\t\t\t\tif (element.type === EventElementType.EOS) {\n\t\t\t\t\t\tselfEval = evaluateCluster(this.cluster, tip, this.pretentiousness);\n\t\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.cluster.elements[0].order = tip;\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip + 1)).map((x, i) =>\n\t\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 || i === this.cluster.elements.length - 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: 0,\n\t\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.order = tip;\n\n\t\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\t\tconsole.assert(element.predisposition, 'no predisposition:', ni, this.possibilities);\n\t\t\t\t\t\t\tconst possibilities = element.predisposition!.divisionVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\t\telemIndex: ni,\n\t\t\t\t\t\t\t\ttype: BeadType.Division,\n\t\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Division:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.division = ni;\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tconst possibilities = this.currentElem.predisposition!.dotsVector.map((x) => Math.max(POSSIBILITY_LOW_BOUNDARY, x));\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Dots,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase BeadType.Dots:\n\t\t\t\t{\n\t\t\t\t\tthis.currentElem.dots = ni;\n\n\t\t\t\t\tselfEval = evaluateCluster(this.cluster, this.currentElem.order! + 1, this.pretentiousness);\n\t\t\t\t\tif (!selfEval.residue || selfEval.fatalError) {\n\t\t\t\t\t\tthis.accessCount = Infinity;\n\t\t\t\t\t\treturn selfEval!;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!this.children[ni]) {\n\t\t\t\t\t\tif (!picker.quota) return selfEval;\n\n\t\t\t\t\t\tconst tip = this.currentElem.order! + 1;\n\t\t\t\t\t\tconst possibilities = (await picker.predictCluster(this.cluster, tip)).map((x, i) =>\n\t\t\t\t\t\t\tthis.cluster.elements[i].order! < tip + 1 ? 0 : Math.max(POSSIBILITY_LOW_BOUNDARY, x)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.children[ni] = new BeadNode({\n\t\t\t\t\t\t\tcluster: this.cluster,\n\t\t\t\t\t\t\telemIndex: this.elemIndex,\n\t\t\t\t\t\t\ttype: BeadType.Pass,\n\t\t\t\t\t\t\tpossibilities,\n\t\t\t\t\t\t\tpretentiousness: this.pretentiousness,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst evaluation = await this.children[ni].deduce({ picker, logger, ptFactor }, deep + 1);\n\t\tif (selfEval && evaluation.fatalError) {\n\t\t\tconst tip = this.currentElem.order!;\n\t\t\tthis.cluster.elements.forEach((elem) => {\n\t\t\t\tif (elem.order! > tip) elem.order = undefined;\n\t\t\t});\n\n\t\t\t// clear children data\n\t\t\tthis.cluster.elements.forEach((elem) => (elem.order = elem.order! > this.currentElem.order! ? undefined : elem.order));\n\t\t\tthis.cluster.elements[this.cluster.elements.length - 1].tick = selfEval.endTick;\n\n\t\t\treturn selfEval;\n\t\t}\n\n\t\treturn evaluation;\n\t}\n}\n\nconst estimateElementDuration = (elem: EventElement) => WHOLE_DURATION * 2 ** -elem.division! * (2 - 2 ** -elem.dots!);\n\nconst evaluateCluster = (cluster: EventCluster, tip: number, pretentiousness: number): ClusterEvaluation => {\n\tconst events = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order) && elem.order! < tip\n\t);\n\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\tconst eos = cluster.elements[cluster.elements.length - 1];\n\n\tlet tick = 0;\n\tlet lastOrder = 0;\n\tlet endTick = 0;\n\tlet voiceN = 1;\n\n\t// [x, tick, estimated tick]\n\tconst scales: [number, number, number][] = [[eos.x, cluster.signatureDuration, cluster.signatureDuration]];\n\n\tlet totalDuration = 0;\n\n\t// assign tick for events\n\tevents.forEach((event) => {\n\t\tif (event.order! > lastOrder + 1) {\n\t\t\ttick = 0;\n\t\t\t++voiceN;\n\t\t}\n\n\t\tconst referenceScale = scales.find((s) => s[1] >= tick);\n\t\tif (referenceScale && event.x > referenceScale[0] + 3) {\n\t\t\tconst nearScale = scales.reduce((n, s) => (Math.abs(event.predisposition!.tick - s[2]) < Math.abs(event.predisposition!.tick - n[2]) ? s : n));\n\t\t\tif (Math.abs(nearScale[0] - event.x) < 2) tick = Math.max(tick, nearScale[1]);\n\t\t}\n\n\t\tevent.tick = tick;\n\n\t\tconst si = Math.max(\n\t\t\t0,\n\t\t\tscales.findIndex((s) => s[0] > event.x)\n\t\t);\n\t\tscales.splice(si, 0, [event.x, event.tick, event.predisposition!.tick]);\n\n\t\t//let duration = WHOLE_DURATION * (2 ** -event.division!) * (2 - 2 ** -event.dots!);\n\t\tlet duration = estimateElementDuration(event);\n\t\tif (event.predisposition!.timeWarped > 0.5) duration = (duration * 2) / 3;\n\n\t\ttick += duration;\n\t\ttotalDuration += duration;\n\t\tendTick = Math.max(endTick, tick);\n\t\tlastOrder = event.order!;\n\t});\n\n\t/*const pretentiousness = events.reduce((p, event) => p +\n\t\tmeasurePretentious(event.predisposition!.divisionVector![event.division!]) +\n\t\tmeasurePretentious(event.predisposition!.dotsVector![event.dots!]), 0);*/\n\n\tif (endTick > 0) cluster.elements[cluster.elements.length - 1].tick = endTick;\n\n\tconst xSpan = cluster.elements[cluster.elements.length - 1].pivotX! - cluster.elements[1].pivotX!;\n\tconst tickSpan = Math.max(...events.map((e) => e.tick!), endTick);\n\n\t// tick twist loss\n\tconst eventsXOrder = [...events].sort((e1, e2) => e1.pivotX! - e2.pivotX!);\n\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\tconst e1 = eventsXOrder[i];\n\t\tconst dx = e2.pivotX! - e1.pivotX!;\n\t\tconst dt = e2.tick! - e1.tick!;\n\n\t\tif (!dt) return dx / xSpan;\n\n\t\tconst rate = Math.atan2(dt / tickSpan, dx / xSpan);\n\n\t\t//if (dt < 0)\n\t\t//\tconsole.log(\"minus dt:\", dt, dx, rate);\n\n\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t});\n\t//console.debug(\"tickTwists:\", tickTwists, eventsXOrder);\n\n\tconst twist = Math.max(...tickTwists, 0);\n\n\tconst tickMSE = events.map((event) => (event.tick! - event.predisposition!.tick) ** 2);\n\t//console.debug(\"tickMSE:\", tickMSE.map(Math.sqrt));\n\tconst tickErr = tickMSE.length ? Math.sqrt(tickMSE.reduce((sum, mse) => sum + mse, 0) / tickMSE.length) : 0;\n\t//console.debug(\"tick/twist:\", tickErr / WHOLE_DURATION, twist);\n\n\tconst residueElements = cluster.elements.filter(\n\t\t(elem) =>\n\t\t\t[EventElementType.CHORD, EventElementType.REST].includes(elem.type) &&\n\t\t\t!(Number.isInteger(elem.order) && elem.order! < tip) &&\n\t\t\t!(elem.predisposition && elem.predisposition.fakeP > 0.5)\n\t);\n\tconst residue = residueElements.length;\n\n\tconst fatalError = twist >= 1 || endTick > cluster.signatureDuration;\n\n\t//const spaceDuration = Math.max(0, cluster.signatureDuration - endTick);\n\tconst spaceDuration = Math.max(0, cluster.signatureDuration - totalDuration / voiceN);\n\n\tconst loss =\n\t\ttickErr / WHOLE_DURATION +\n\t\ttwist +\n\t\tresidue * RESIDUE_LOSS_WEIGHT +\n\t\tvoiceN * VOICEN_LOSS_WEIGHT +\n\t\tspaceDuration * SPACE_LOSS_WEIGHT +\n\t\tpretentiousness * PRETENTIOUSNESS_LOSS_WEIGHT;\n\n\treturn {\n\t\ttickErr,\n\t\ttwist,\n\t\tresidue,\n\t\tendTick,\n\t\tfatalError,\n\t\tvoiceN,\n\t\tspaceDuration,\n\t\tpretentiousness,\n\t\tloss,\n\t};\n};\n\nconst solveCluster = async (\n\tcluster: EventCluster,\n\tpicker: BeadPicker,\n\tlogger: Logger,\n\tquota: number = 200,\n\tstopLoss: number = 0,\n\tptFactor: number = 1\n): Promise => {\n\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\tconst suc0 = await picker.predictCluster(cluster, 1);\n\n\tconst root = new BeadNode({ cluster, elemIndex: 0, pretentiousness: 0, type: BeadType.Pass, possibilities: suc0 });\n\n\tlet bestEvaluation: ClusterEvaluation | null = null;\n\tlet bestState: ClusterState | null = null;\n\n\tpicker.quota = quota;\n\twhile (picker.quota) {\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\n\t\tconst evaluation = await root.deduce({ picker, logger, ptFactor });\n\n\t\tlogger.debug('loss:', evaluation);\n\n\t\tif (!bestEvaluation || evaluation.loss < bestEvaluation.loss) {\n\t\t\tbestEvaluation = evaluation;\n\n\t\t\tcluster.duration = bestEvaluation.endTick;\n\t\t\tbestState = saveClusterState(cluster);\n\n\t\t\tif (Number.isFinite(stopLoss) && bestEvaluation.loss <= stopLoss!) break;\n\t\t}\n\n\t\tif (!Number.isFinite(root.accessCount)) break;\n\t}\n\tlogger.debug('bestEvaluation:', bestEvaluation);\n\n\trestoreClusterState(cluster, bestState!);\n\n\t// solve residue elements\n\tconst fixedEvents = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\tconst pendingEvents = cluster.elements.filter(\n\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && !Number.isInteger(elem.order)\n\t);\n\tif (fixedEvents.length) {\n\t\tpendingEvents.forEach((event) => {\n\t\t\t// exclude fake events (includes grace, fullMeasure) from voices\n\t\t\tevent.tick = undefined;\n\n\t\t\tif (event.predisposition!.fakeP < 0.5) {\n\t\t\t\t//const near = fixedEvents.reduce((n, e) => Math.abs(e.predisposition!.tick - event.predisposition!.tick) < Math.abs(n.predisposition!.tick - event.predisposition!.tick) ? e : n);\n\t\t\t\tconst duration = estimateElementDuration(event);\n\t\t\t\tconst candidates = fixedEvents.filter((e) => e.tick! + duration <= bestEvaluation!.endTick);\n\t\t\t\tif (candidates.length) {\n\t\t\t\t\tconst near = candidates.reduce((n, e) => (Math.abs(e.x - event.x) < Math.abs(n.x - event.x) ? e : n));\n\t\t\t\t\tevent.tick = near.tick;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfixedEvents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t// properties\n\t[...fixedEvents, ...pendingEvents].forEach((event) => {\n\t\tevent.grace = !Number.isFinite(event.tick) && event.predisposition!.grace;\n\t\tevent.timeWarped = event.predisposition!.timeWarped > 0.5;\n\t\tevent.fullMeasure = event.predisposition!.fullMeasure > 0.5;\n\t\tevent.stemDirection = STEM_DIRECTION_OPTIONS[argmax(event.predisposition!.stemDirectionVector)];\n\t\tevent.beam = BEAM_OPTIONS[argmax(event.predisposition!.beamVector)];\n\t});\n\n\t// construct matrixH\n\tconst ids = cluster.elements.map((e) => e.index);\n\tconst idx = (id: number): number => ids.indexOf(id);\n\tcluster.matrixH = cluster.elements.map(() => Array(cluster.elements.length).fill(0));\n\tfixedEvents.forEach((event, i) => {\n\t\tconst lastEvent = fixedEvents[i - 1];\n\t\tif (!lastEvent || lastEvent.order! < event.order! - 1) {\n\t\t\tcluster.matrixH![idx(event.index!)][0] = 1;\n\t\t\tif (lastEvent) cluster.matrixH![cluster.elements.length - 1][idx(lastEvent.index!)] = 1;\n\t\t} else {\n\t\t\tconsole.assert(\n\t\t\t\tcluster.matrixH![idx(event.index!)] && Number.isFinite(cluster.matrixH![idx(event.index!)][idx(lastEvent.index!)]),\n\t\t\t\t'matrixH out of range:',\n\t\t\t\tevent.index,\n\t\t\t\tlastEvent.index,\n\t\t\t\tcluster.matrixH!.length\n\t\t\t);\n\n\t\t\tcluster.matrixH![idx(event.index!)][idx(lastEvent.index!)] = 1;\n\t\t}\n\t});\n\tif (!pendingEvents.length && fixedEvents.length) cluster.matrixH![cluster.elements.length - 1][idx(fixedEvents[fixedEvents.length - 1].index!)] = 1;\n\n\treturn bestEvaluation!;\n};\n\ninterface BeadSolverOptions {\n\tpicker: BeadPicker;\n\tstopLoss?: number;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tptFactor?: number;\n\tlogger?: Logger;\n}\n\nconst solveMeasure = async (measure: SpartitoMeasure, options: BeadSolverOptions): Promise => {\n\tconst { stopLoss = 0.09, quotaMax = 1000, quotaFactor = 5, ptFactor = 1, logger = new DummyLogger() } = options;\n\n\tlet worstLoss = 0;\n\n\tconst clusters = measure.createClusters();\n\tfor (const cluster of clusters) {\n\t\tconst quota = Math.min(quotaMax, Math.ceil(cluster.elements.length * quotaFactor));\n\t\tlogger.info(`[measure-${measure.measureIndex}]`, quota);\n\t\tconst { loss } = await solveCluster(cluster, options.picker, logger, quota, stopLoss, ptFactor);\n\t\tworstLoss = Math.max(worstLoss, loss);\n\t}\n\n\tconst voices = [] as number[][];\n\n\tconst durations = [] as number[];\n\n\tconst solutionEvents = [] as RegulationSolutionEvent[];\n\n\tclusters.forEach((cluster) => {\n\t\tconst events = cluster.elements.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isInteger(elem.order));\n\t\tevents.sort((e1, e2) => e1.order! - e2.order!);\n\n\t\tif (!events.length) return;\n\n\t\tlet voice = [] as number[];\n\t\tvoices.push(voice);\n\t\tlet lastOrder = 0;\n\t\tevents.forEach((event) => {\n\t\t\tif (event.fullMeasure || event.grace || event.tremoloCatcher) return;\n\n\t\t\tif (event.order! > lastOrder + 1) {\n\t\t\t\tvoice = [event.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t} else voice.push(event.index!);\n\n\t\t\tlastOrder = event.order!;\n\t\t});\n\n\t\tlet tipElem = events[events.length - 1];\n\n\t\t// complete voices from pending events\n\t\tconst pendingEvents = cluster.elements.filter(\n\t\t\t(elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type) && Number.isFinite(elem.tick) && !Number.isInteger(elem.order)\n\t\t);\n\t\twhile (pendingEvents.length) {\n\t\t\tconst ei = pendingEvents.findIndex((e) => e.tick! >= tipElem.tick! + estimateElementDuration(tipElem));\n\t\t\tif (ei >= 0) voice.push(pendingEvents.splice(ei, 1)[0].index!);\n\t\t\telse {\n\t\t\t\ttipElem = pendingEvents.splice(0, 1)[0];\n\t\t\t\tvoice = [tipElem.index!];\n\t\t\t\tvoices.push(voice);\n\t\t\t}\n\t\t}\n\n\t\tif (events.some((elem) => !elem.fullMeasure && Number.isInteger(elem.order))) {\n\t\t\tconst eos = cluster.elements.find((elem) => elem.type === EventElementType.EOS);\n\t\t\tdurations.push(eos!.tick!);\n\t\t}\n\n\t\tconst eventMap = measure.eventMap;\n\n\t\tconst tickSet = cluster.elements.reduce((set, elem) => {\n\t\t\tif (Number.isFinite(elem.tick)) set.add(elem.tick!);\n\t\t\treturn set;\n\t\t}, new Set());\n\t\tconst ticks = Array.from(tickSet).sort((t1, t2) => t1 - t2);\n\n\t\t// fill solutionEvents\n\t\tevents.forEach((elem) => {\n\t\t\tconst event = eventMap[elem.index!];\n\t\t\tif (event) {\n\t\t\t\tsolutionEvents.push({\n\t\t\t\t\tid: event.id!,\n\t\t\t\t\ttick: elem.tick!,\n\t\t\t\t\ttickGroup: ticks.indexOf(elem.tick!),\n\t\t\t\t\tdivision: elem.division !== event.division ? elem.division : undefined,\n\t\t\t\t\tdots: elem.dots !== event.dots ? elem.dots : undefined,\n\t\t\t\t\ttimeWarp: elem.timeWarped ? frac(2, 3) : undefined, // TODO:\n\t\t\t\t\tbeam: elem.beam !== event.beam ? elem.beam : undefined,\n\t\t\t\t\tgrace: elem.grace !== !!event.grace ? elem.grace : undefined,\n\t\t\t\t\tfullMeasure: elem.fullMeasure || undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\n\tconst estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n\n\treturn {\n\t\tvoices: voices.filter((voice) => voice.length),\n\t\tduration: Math.max(...durations),\n\t\tevents: solutionEvents,\n\t\tpriority: -worstLoss,\n\t\testimatedDuration,\n\t};\n};\n\ninterface GlimpseMeasureOptions {\n\tpicker: BeadPicker;\n\tresetSignatureForDoubtfulOnly?: boolean;\n}\n\nconst glimpseMeasure = async (measure: SpartitoMeasure, { picker, resetSignatureForDoubtfulOnly }: GlimpseMeasureOptions): Promise => {\n\tconst clusters = measure.createClusters();\n\tconst eventMap = measure.eventMap;\n\n\tfor (const cluster of clusters) {\n\t\tif (!resetSignatureForDoubtfulOnly || measure.doubtfulTimesig) cluster.signatureDuration = 0; // re-estimate measure duration\n\t\tcluster.elements.forEach((elem, i) => (elem.order = i ? undefined : 0));\n\t\tawait picker.predictCluster(cluster, 1);\n\n\t\tcluster.elements\n\t\t\t.filter((elem) => [EventElementType.CHORD, EventElementType.REST].includes(elem.type))\n\t\t\t.forEach((elem) => {\n\t\t\t\tconst event = eventMap[elem.index!];\n\t\t\t\tevent.predisposition = elem.predisposition!;\n\t\t\t});\n\t}\n\n\tmeasure.estimatedDuration = Math.max(...clusters.map((c) => c.estimatedDuration));\n};\n\nconst estimateMeasure = async (measure: SpartitoMeasure, picker: BeadPicker): Promise =>\n\tglimpseMeasure(measure, { picker, resetSignatureForDoubtfulOnly: true });\n\nexport { BeadPicker, solveCluster, solveMeasure, estimateMeasure, glimpseMeasure };\n","import { EventTerm } from './term';\nimport type { SpartitoMeasure } from './spartitoMeasure';\n\ninterface EventRectification {\n\tid: number;\n\tdivision?: number;\n\tdots?: number;\n}\n\n// Here suppose sum of pvals equal to 1.\nconst multinomial_1 = (pvals: number[]): number => {\n\tconst n = Math.random();\n\n\tlet s = 0;\n\tfor (let i = 0; i < pvals.length; ++i) {\n\t\ts += pvals[i];\n\t\tif (s > n) return i;\n\t}\n\n\treturn pvals.length - 1;\n};\n\nconst looseVector = (ns: number[], factor = 0.9): number[] => {\n\tconst logits = ns.map((n) => Math.log(n) * factor);\n\tconst n2 = logits.map(Math.exp);\n\n\tconst sum = n2.reduce((sum, x) => sum + x, 0);\n\n\treturn n2.map((x) => x / sum);\n};\n\nconst looseEvent = (event: EventTerm): EventTerm => {\n\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return event;\n\n\tconst divisionVector = event.predisposition?.divisionVector ? looseVector(event.predisposition.divisionVector) : null;\n\tconst dotsVector = event.predisposition?.dotsVector ? looseVector(event.predisposition.dotsVector) : null;\n\n\treturn new EventTerm({\n\t\t...event,\n\t\tpredisposition: {\n\t\t\t...event.predisposition,\n\t\t\tdivisionVector,\n\t\t\tdotsVector,\n\t\t},\n\t});\n};\n\nclass MeasureRectification {\n\tevents: EventRectification[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\ttoString(): string {\n\t\treturn this.events\n\t\t\t.map((event) => {\n\t\t\t\tif (!event) return '';\n\n\t\t\t\tconst { division = '', dots = '' } = event;\n\t\t\t\treturn `${division}|${dots}`;\n\t\t\t})\n\t\t\t.join(',');\n\t}\n\n\tstatic default(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tconst division = event.predisposition.divisionVector ? event.division : undefined;\n\t\t\t\tconst dots = event.predisposition.dotsVector ? event.dots : undefined;\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n\n\tstatic roll(events: EventTerm[]): MeasureRectification {\n\t\treturn new MeasureRectification({\n\t\t\tevents: events.map((event) => {\n\t\t\t\tif (!event.predisposition?.divisionVector && !event.predisposition?.dotsVector) return null;\n\n\t\t\t\tlet division = undefined;\n\t\t\t\tlet dots = undefined;\n\n\t\t\t\tif (event.predisposition.divisionVector) division = multinomial_1(event.predisposition.divisionVector);\n\n\t\t\t\tif (event.predisposition.dotsVector) dots = multinomial_1(event.predisposition.dotsVector);\n\n\t\t\t\treturn { id: event.id, division, dots };\n\t\t\t}),\n\t\t});\n\t}\n}\n\nconst genMeasureRectifications = function* (measure: SpartitoMeasure): Generator {\n\tconst keys = new Set();\n\n\tconst origin = MeasureRectification.default(measure.events);\n\tkeys.add(origin.toString());\n\n\tyield origin;\n\n\tlet stale = 0;\n\tlet events = measure.events;\n\n\twhile (stale < 100) {\n\t\tif (stale && stale % 10 === 0) events = events.map(looseEvent);\n\n\t\tconst rectification = MeasureRectification.roll(events);\n\t\tconst key = rectification.toString();\n\n\t\tif (keys.has(key)) {\n\t\t\t++stale;\n\t\t\tcontinue;\n\t\t}\n\n\t\tstale = 0;\n\n\t\tkeys.add(key);\n\t\tyield rectification;\n\t}\n};\n\nexport { MeasureRectification, genMeasureRectifications };\n","import { WeakLRUCache } from 'weak-lru-cache';\n\nimport { RegulationSolution, SpartitoMeasure } from '../../src/starry';\n\nconst lruCache = new WeakLRUCache();\n\ninterface SolutionStore {\n\tget: (key: string) => Promise;\n\tset: (key: string, val: RegulationSolution) => Promise;\n\tbatchGet: (keys: string[]) => Promise;\n}\n\n// 默认store\nconst DefaultSolutionStore: SolutionStore = {\n\tasync get(key: string) {\n\t\treturn lruCache.getValue(key) as RegulationSolution;\n\t},\n\tasync set(key: string, val: RegulationSolution) {\n\t\tlruCache.setValue(key, val);\n\t},\n\tasync batchGet(keys: string[]) {\n\t\treturn keys.map((key) => lruCache.getValue(key) as RegulationSolution);\n\t},\n};\n\nconst enum MeasureStatus {\n\tDiscard = -1,\n\tSolved = 0,\n\tIssue = 1,\n\tFatal = 2,\n}\n\ninterface IssueMeasure {\n\tscoreId: string;\n\tmeasureIndex: number;\n\tmeasure: SpartitoMeasure;\n\tstatus: MeasureStatus;\n}\n\ntype SaveIssueMeasure = (data: Omit) => void;\n\nexport { SolutionStore, DefaultSolutionStore, MeasureStatus, IssueMeasure, SaveIssueMeasure };\n","import * as starry from '../../src/starry';\nimport { Logger } from './ZeroClient';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure, MeasureStatus } from './store';\n\ninterface BeadRegulationCounting {\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface RegulationBeadStat {\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tmeasures: BeadRegulationCounting;\n\tqualityScore: number;\n}\n\ninterface RegulationBeadSummary {\n\tscoreN: number;\n\n\ttotalCost: number; // in milliseconds\n\tpickerCost: number; // in milliseconds\n\tcostPerMeasure: number | null; // in milliseconds\n\tcostPerTime: number | null; // in milliseconds\n\n\tcached: number;\n\tsimple: number;\n\tcomputed: number;\n\ttryTimes: number;\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\ninterface ProgressInfo {\n\tpass: number;\n\tremaining: number;\n\ttotal: number;\n}\n\ninterface RegulateBeadOption {\n\tlogger?: Logger;\n\tpickers: starry.BeadPicker[];\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tfreshOnly?: boolean;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n\tonProgress?: (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => void;\n\tonPassStart?: (pass: number, conditionName: string, pendingCount: number) => void;\n}\n\ninterface MeasureReord {\n\torigin: starry.SpartitoMeasure;\n\tcurrent: starry.SpartitoMeasure;\n\tevaluation?: starry.MeasureEvaluation;\n\tbaseQuality: number;\n\tpicker: starry.BeadPicker;\n}\n\ninterface BeadSolverOptions {\n\tstopLoss: number;\n\tquotaMax: number;\n\tquotaFactor: number;\n\tptFactor: number;\n}\n\nenum PendingCondition {\n\tErrorOnly,\n\tNotFine,\n\tImperfect,\n}\n\nconst isPending = (evaluation: starry.MeasureEvaluation, condition: PendingCondition) => {\n\tswitch (condition) {\n\t\tcase PendingCondition.ErrorOnly:\n\t\t\treturn evaluation.error;\n\n\t\tcase PendingCondition.Imperfect:\n\t\t\treturn !evaluation.perfect;\n\t}\n\n\treturn !evaluation.fine;\n};\n\ntype OnUpdate = (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean) => void;\n\nconst solveMeasureRecords = async (\n\trecords: MeasureReord[],\n\tonUpdate: OnUpdate,\n\tstdout: NodeJS.WritableStream | null,\n\toptions: Partial,\n\tpendingCondition: PendingCondition = PendingCondition.NotFine,\n\tpass: number = 0,\n\tonProgress?: RegulateBeadOption['onProgress']\n): Promise => {\n\tconst pendingRecords = records.filter(({ evaluation }) => !evaluation || isPending(evaluation, pendingCondition));\n\tstdout?.write('.'.repeat(pendingRecords.length));\n\tstdout?.write('\\b'.repeat(pendingRecords.length));\n\n\tconst total = pendingRecords.length;\n\tlet done = 0;\n\n\tfor (const record of pendingRecords) {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tconst solution = await starry.beadSolver.solveMeasure(measure, { picker: record.picker, ...options });\n\t\tmeasure.applySolution(solution);\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better =\n\t\t\t!record.evaluation ||\n\t\t\tevaluation.fine > record.evaluation.fine ||\n\t\t\t(evaluation.qualityScore > record.evaluation.qualityScore && evaluation.fine === record.evaluation.fine);\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\t\t}\n\n\t\tonUpdate(record.current, evaluation, better);\n\n\t\tdone++;\n\t\tonProgress?.(record.current, evaluation, better, { pass, remaining: total - done, total });\n\t}\n\n\tif (pendingRecords.length) stdout?.write('\\n');\n\n\treturn pendingRecords.length;\n};\n\nconst regulateWithBeadSolver = async (\n\tscore: starry.Score,\n\t{ logger, pickers, solutionStore = DefaultSolutionStore, ignoreCache, freshOnly, onSaveIssueMeasure, onProgress, onPassStart }: RegulateBeadOption\n): Promise => {\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\tlogger?.info(`[regulateWithBeadSolver] begin, measure total: ${spartito.measures.length}.`, ignoreCache ? 'ignoreCache' : '', freshOnly ? 'freshOnly' : '');\n\n\tconst records = spartito.measures\n\t\t.filter((measure) => measure.events?.length && !measure.patched)\n\t\t.map(\n\t\t\t(measure) =>\n\t\t\t\t({\n\t\t\t\t\torigin: measure.deepCopy(),\n\t\t\t\t\tcurrent: measure,\n\t\t\t\t\tevaluation: undefined,\n\t\t\t\t\tbaseQuality: 0,\n\t\t\t\t} as MeasureReord)\n\t\t);\n\n\t// rectify time signature\n\tfor (const measure of spartito.measures.filter((measure) => measure.events?.length)) {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > measure.events.length + 1);\n\t\tif (picker) await starry.beadSolver.estimateMeasure(measure, picker);\n\t}\n\tspartito.rectifyTimeSignatures(logger as any);\n\n\t// zero pickers' cost\n\tpickers.forEach((picker) => (picker.cost = 0));\n\n\tconst counting = {\n\t\tcached: 0,\n\t\tsimple: 0,\n\t\tcomputed: 0,\n\t\ttryTimes: 0,\n\t\tsolved: 0,\n\t\tissue: 0,\n\t\tfatal: 0,\n\t};\n\n\tlogger?.info(`[regulateWithBeadSolver] measures estimation finished.`);\n\n\t// apply solutions\n\tif (solutionStore && !ignoreCache)\n\t\tfor (const record of records) {\n\t\t\tconst solution = await solutionStore.get(record.origin.regulationHash0);\n\t\t\tif (solution) {\n\t\t\t\trecord.current.applySolution(solution);\n\t\t\t\t++counting.cached;\n\n\t\t\t\trecord.evaluation = starry.evaluateMeasure(record.current);\n\t\t\t\trecord.baseQuality = record.evaluation.qualityScore;\n\t\t\t}\n\t\t}\n\n\tlogger?.info('[regulateWithBeadSolver]', `${counting.cached}/${records.length}`, 'solutions loaded.');\n\n\tconst stdout = logger ? null : process.stdout;\n\tif (counting.cached) stdout?.write(`${counting.cached}c`);\n\n\trecords.forEach((record) => {\n\t\tconst picker = pickers.find((picker) => picker.n_seq > record.current.events.length + 1);\n\t\tif (!picker) {\n\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] size out of range:`, record.current.events.length);\n\t\t} else record.picker = picker;\n\t});\n\n\tconst pendingRecords = records.filter((record) => record.picker && (!record.evaluation || (!record.evaluation.fine && !freshOnly))) as (MeasureReord & {\n\t\tevaluation: starry.MeasureEvaluation;\n\t})[];\n\n\t// solve by simple policy\n\tpendingRecords.forEach((record) => {\n\t\tconst measure = record.current.deepCopy();\n\t\tmeasure.staffGroups = record.current.staffGroups;\n\n\t\tmeasure.regulate({ policy: 'simple' });\n\n\t\tconst evaluation = starry.evaluateMeasure(measure);\n\t\tconst better = !record.evaluation || evaluation.qualityScore > record.evaluation.qualityScore;\n\t\tif (better) {\n\t\t\trecord.evaluation = evaluation;\n\t\t\tObject.assign(record.current, measure);\n\n\t\t\tif (evaluation.perfect) {\n\t\t\t\tlogger?.info(`[regulateWithBeadSolver] measure[${record.current.measureIndex}] regulated by simple policy.`);\n\t\t\t\t++counting.simple;\n\t\t\t}\n\t\t}\n\t});\n\tcounting.computed = pendingRecords.length - counting.simple;\n\n\tif (counting.simple) stdout?.write(`${counting.simple}s`);\n\n\tconst onUpdate = (measure, evaluation, better) => {\n\t\tlogger?.info(\n\t\t\t`[regulateWithBeadSolver] measure[${measure.measureIndex}/${spartito.measures.length}] regulated${\n\t\t\t\tbetter ? '+' : '-'\n\t\t\t}: ${evaluation.qualityScore.toFixed(3)}, ${evaluation.fine ? 'solved' : evaluation.error ? 'error' : 'issue'}, ${measure.regulationHash}`\n\t\t);\n\n\t\tstdout?.write(`\\x1b[${evaluation.fine ? '32' : evaluation.error ? '31' : '33'}m${better ? '+' : '-'}\\x1b[0m`);\n\t};\n\n\t// Global progress: total = all measures, remaining = non-fine measures across all passes\n\tconst totalMeasures = spartito.measures.length;\n\tconst computeRemaining = () => pendingRecords.filter((r) => !r.evaluation?.fine).length;\n\tconst wrappedOnProgress = onProgress\n\t\t? (measure: starry.SpartitoMeasure, evaluation: starry.MeasureEvaluation, better: boolean, progress: ProgressInfo) => {\n\t\t\t\tonProgress(measure, evaluation, better, { pass: progress.pass, remaining: computeRemaining(), total: totalMeasures });\n\t\t }\n\t\t: undefined;\n\n\tonPassStart?.(1, 'Imperfect', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.05, quotaMax: 200, quotaFactor: 3, ptFactor: 1 },\n\t\tPendingCondition.Imperfect,\n\t\t1,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(2, 'NotFine', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 20, ptFactor: 1.6 },\n\t\tPendingCondition.NotFine,\n\t\t2,\n\t\twrappedOnProgress\n\t);\n\tonPassStart?.(3, 'ErrorOnly', computeRemaining());\n\tcounting.tryTimes += await solveMeasureRecords(\n\t\tpendingRecords,\n\t\tonUpdate,\n\t\tstdout,\n\t\t{ stopLoss: 0.08, quotaMax: 1000, quotaFactor: 40, ptFactor: 3 },\n\t\tPendingCondition.ErrorOnly,\n\t\t3,\n\t\twrappedOnProgress\n\t);\n\n\tpendingRecords.forEach(({ evaluation, baseQuality, current, origin }) => {\n\t\tif (evaluation.fine) ++counting.solved;\n\t\telse if (evaluation.error) ++counting.fatal;\n\t\telse ++counting.issue;\n\n\t\tif (evaluation.qualityScore > baseQuality || !baseQuality) {\n\t\t\tsolutionStore.set(origin.regulationHash0, { ...current.asSolution(origin), priority: -current?.solutionStat?.loss! });\n\t\t\tif (current.regulationHash !== origin.regulationHash0)\n\t\t\t\tsolutionStore.set(current.regulationHash, { ...current.asSolution(), priority: -current?.solutionStat?.loss! });\n\t\t\t//console.log('better:', current.measureIndex, evaluation.qualityScore, baseQuality);\n\t\t}\n\n\t\tif (!evaluation.fine) {\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: current.measureIndex,\n\t\t\t\tmeasure: new starry.EditableMeasure(current),\n\t\t\t\tstatus: evaluation.error ? MeasureStatus.Fatal : MeasureStatus.Issue,\n\t\t\t});\n\t\t}\n\t});\n\n\tconst t1 = Date.now();\n\tconst pickerCost = pickers.reduce((cost, picker) => cost + picker.cost, 0);\n\n\tconst qualityScore = spartito.qualityScore;\n\tconst totalCost = t1 - t0;\n\n\tlogger?.info('[regulateWithBeadSolver] done in ', totalCost, 'ms, qualityScore:', qualityScore);\n\n\t// zero 'cached' statistics for freshOnly mode\n\tif (freshOnly) counting.cached = 0;\n\n\treturn {\n\t\ttotalCost: t1 - t0,\n\t\tpickerCost,\n\t\tmeasures: counting,\n\t\tqualityScore,\n\t};\n};\n\nconst abstractRegulationBeadStats = (stats: RegulationBeadStat[]): RegulationBeadSummary => {\n\tconst { totalCost, pickerCost, measureN, timeN } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\ttotalCost: sum.totalCost + stat.totalCost,\n\t\t\tpickerCost: sum.pickerCost + stat.pickerCost,\n\t\t\tmeasureN: sum.measureN + stat.measures.computed,\n\t\t\ttimeN: sum.timeN + stat.measures.tryTimes,\n\t\t}),\n\t\t{\n\t\t\ttotalCost: 0,\n\t\t\tpickerCost: 0,\n\t\t\tmeasureN: 0,\n\t\t\ttimeN: 0,\n\t\t}\n\t);\n\n\tconst costPerMeasure = measureN > 0 ? totalCost / measureN : null;\n\tconst costPerTime = timeN > 0 ? totalCost / timeN : null;\n\n\tconst { cached, simple, computed, tryTimes, solved, issue, fatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.measures.cached,\n\t\t\tsimple: sum.simple + stat.measures.simple,\n\t\t\tcomputed: sum.computed + stat.measures.computed,\n\t\t\ttryTimes: sum.tryTimes + stat.measures.tryTimes,\n\t\t\tsolved: sum.solved + stat.measures.solved,\n\t\t\tissue: sum.issue + stat.measures.issue,\n\t\t\tfatal: sum.fatal + stat.measures.fatal,\n\t\t}),\n\t\t{ cached: 0, simple: 0, computed: 0, tryTimes: 0, solved: 0, issue: 0, fatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\ttotalCost,\n\t\tpickerCost,\n\t\tcostPerMeasure,\n\t\tcostPerTime,\n\t\tcached,\n\t\tsimple,\n\t\tcomputed,\n\t\ttryTimes,\n\t\tsolved,\n\t\tissue,\n\t\tfatal,\n\t};\n};\n\nexport { regulateWithBeadSolver, abstractRegulationBeadStats, RegulationBeadStat, ProgressInfo };\n","import * as starry from '../../src/starry';\nimport { PyClients } from './predictors';\nimport { Logger } from './ZeroClient';\nimport { SpartitoMeasure, EditableMeasure, evaluateMeasure } from '../../src/starry';\nimport { EquationPolicy } from '../../src/starry/spartitoMeasure';\nimport { genMeasureRectifications } from '../../src/starry/measureRectification';\nimport { SolutionStore, DefaultSolutionStore, SaveIssueMeasure } from './store';\nexport * from './regulationBead';\n\nglobalThis.btoa = globalThis.btoa || ((str) => Buffer.from(str, 'binary').toString('base64'));\n\nconst RECTIFICATION_SEARCH_ITERATIONS = parseInt(process.env.RECTIFICATION_SEARCH_ITERATIONS || '30');\nconst BASE_QUOTA_FACTOR = parseInt(process.env.BASE_QUOTA_FACTOR || '40');\nconst RECTIFICATION_QUOTA_FACTOR = parseInt(process.env.RECTIFICATION_QUOTA_FACTOR || '80');\n\nconst MATRIXH_INTERPOLATION_K = 0.9;\n\ninterface SolveMeasureOptions {\n\tsolver?: (...args: any[]) => any;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n\tsolutionStore?: SolutionStore;\n\tignoreCache?: boolean;\n\tlogger?: Logger;\n}\n\nconst computeQuota = (n: number, factor: number, limit: number) =>\n\tMath.min(Math.ceil((n + 1) * factor * Math.log(n + 2)), Math.ceil(limit * Math.min(1, (24 / (n + 1)) ** 2)));\n\ninterface BaseRegulationStat {\n\tcached: number;\n\tcomputed: number;\n\tsolved: number;\n}\n\nasync function solveMeasures(\n\tmeasures: SpartitoMeasure[],\n\t{ solver, quotaMax = 1000, quotaFactor = BASE_QUOTA_FACTOR, solutionStore = DefaultSolutionStore, ignoreCache = false, logger }: SolveMeasureOptions = {}\n): Promise {\n\tlet cached = 0;\n\tlet solved = 0;\n\n\tlogger?.info(`[solveMeasures] begin, measure total: ${measures.length}.`);\n\n\tawait Promise.all(\n\t\tmeasures.map(async (measure) => {\n\t\t\tif (!ignoreCache) {\n\t\t\t\tconst solution = await solutionStore.get(measure.regulationHash);\n\t\t\t\tif (solution) {\n\t\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\t\t++cached;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst quota = computeQuota(measure.events.length, quotaFactor, quotaMax);\n\n\t\t\tawait measure.regulate({\n\t\t\t\tpolicy: 'equations',\n\t\t\t\tquota,\n\t\t\t\tsolver,\n\t\t\t});\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tif (!stat.error) solutionStore.set(measure.regulationHash0, { ...measure.asSolution(), priority: -measure?.solutionStat?.loss! });\n\t\t\tif (stat.perfect) ++solved;\n\n\t\t\tlogger?.info(\n\t\t\t\t`[solveMeasures] measure[${measure.measureIndex}/${measures.length}] regulated: ${stat.perfect ? 'solved' : stat.error ? 'error' : 'issue'}, ${\n\t\t\t\t\tmeasure.regulationHash\n\t\t\t\t}`\n\t\t\t);\n\t\t})\n\t);\n\n\tlogger?.info(`[solveMeasures] ${cached}/${measures.length} cache hit, ${solved} solved.`);\n\n\treturn {\n\t\tcached,\n\t\tcomputed: measures.length - cached,\n\t\tsolved,\n\t};\n}\n\nconst solveMeasuresWithRectifications = async (\n\tmeasure: SpartitoMeasure,\n\t{ solver, quotaMax = 4000 }: SolveMeasureOptions\n): Promise => {\n\tlet best = evaluateMeasure(measure);\n\tlet bestSolution: starry.RegulationSolution = measure.asSolution();\n\tconst quota = computeQuota(measure.events.length, RECTIFICATION_QUOTA_FACTOR, quotaMax);\n\tlet n_rec = 0;\n\n\t// @ts-ignore\n\tfor (const rec of genMeasureRectifications(measure)) {\n\t\tconst solution = await EquationPolicy.regulateMeasureWithRectification(measure, rec, { solver, quota });\n\n\t\tconst testMeasure = measure.deepCopy() as SpartitoMeasure;\n\t\ttestMeasure.applySolution(solution);\n\t\tconst result = evaluateMeasure(testMeasure);\n\n\t\tif (\n\t\t\tresult.perfect > best.perfect ||\n\t\t\tresult.error < best.error ||\n\t\t\t(!result.error && result.perfect >= best.perfect && solution.priority! > bestSolution.priority!)\n\t\t) {\n\t\t\tbest = result;\n\t\t\tbestSolution = solution;\n\t\t}\n\n\t\tif (result.perfect) break;\n\n\t\t++n_rec;\n\t\tif (n_rec > RECTIFICATION_SEARCH_ITERATIONS) break;\n\t}\n\n\treturn bestSolution;\n};\n\ninterface RegulateWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateMaybeWithTopoOption {\n\tsolutionStore: SolutionStore;\n\tpyClients?: PyClients;\n\tsolver: (...args: any[]) => any;\n\tonSaveIssueMeasure?: SaveIssueMeasure;\n}\n\ninterface RegulateSimpleOption {\n\tsolutionStore: SolutionStore;\n\tsolver: (...args: any[]) => any;\n\tlogger?: Logger;\n\tquotaMax?: number;\n\tquotaFactor?: number;\n}\n\ninterface TopoRegulationStat {\n\tsolved: number;\n\tissue: number;\n\tfatal: number;\n}\n\nasync function doRegulateWithTopo(\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateWithTopoOption\n): Promise {\n\tpyClients.logger.info(`[RegulateWithTopo] regulate score: ${score.title}, measures: ${score.spartito!.measures.length}`);\n\n\tconst issueMeasures = score.spartito!.measures.filter((measure) => {\n\t\tconst stat = evaluateMeasure(measure);\n\t\treturn !stat.perfect;\n\t});\n\tpyClients.logger.info(`[RegulateWithTopo] basic issues: ${issueMeasures.length}`);\n\n\tif (issueMeasures.length === 0) {\n\t\treturn {\n\t\t\tsolved: 0,\n\t\t\tissue: 0,\n\t\t\tfatal: 0,\n\t\t};\n\t}\n\n\tconst clusters = ([] as starry.EventCluster[]).concat(...issueMeasures.map((measure) => measure.createClusters()));\n\tconst results = await pyClients.predictScoreImages('topo', { clusters });\n\tconsole.assert(results.length === clusters.length, 'prediction number mismatch:', clusters.length, results.length);\n\n\tclusters.forEach((cluster, index) => {\n\t\tconst result = results[index];\n\t\tconsole.assert(result, 'no result for cluster:', cluster.index);\n\n\t\tcluster.assignPrediction(result);\n\t});\n\n\tissueMeasures.forEach((measure) => {\n\t\tconst cs = clusters.filter((c) => c.index === measure.measureIndex);\n\t\tmeasure.applyClusters(cs);\n\n\t\t// intepolate matrixH\n\t\tconst { matrixH } = EquationPolicy.estiamteMeasure(measure);\n\t\tmatrixH.forEach((row, i) =>\n\t\t\trow.forEach((v, j) => {\n\t\t\t\tmeasure.matrixH[i][j] = measure.matrixH[i][j] * MATRIXH_INTERPOLATION_K + v * (1 - MATRIXH_INTERPOLATION_K);\n\t\t\t})\n\t\t);\n\t});\n\n\tconst solvedIndices: number[] = [];\n\tconst errorIndices: number[] = [];\n\n\t// rectification search\n\tawait Promise.all(\n\t\tissueMeasures.map(async (measure) => {\n\t\t\tconst hash = measure.regulationHash0;\n\t\t\tconst solution = await solveMeasuresWithRectifications(measure, { solver });\n\t\t\tif (solution) {\n\t\t\t\tmeasure.applySolution(solution);\n\t\t\t\tsolutionStore.set(hash, solution);\n\t\t\t\tsolutionStore.set(measure.regulationHash, measure.asSolution());\n\t\t\t\tpyClients.logger.info(`[RegulateWithTopo] solutionStore set: ${measure.measureIndex}, ${hash}, ${measure.regulationHash}`);\n\t\t\t}\n\n\t\t\tconst stat = evaluateMeasure(measure);\n\t\t\tonSaveIssueMeasure?.({\n\t\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\t\tmeasure: new EditableMeasure(measure),\n\t\t\t\tstatus: stat.error ? 2 : 1,\n\t\t\t});\n\t\t\tif (stat.perfect) solvedIndices.push(measure.measureIndex);\n\t\t\telse if (stat.error) errorIndices.push(measure.measureIndex);\n\t\t})\n\t);\n\n\tconst n_issues = issueMeasures.length - solvedIndices.length - errorIndices.length;\n\tpyClients.logger.info(`[RegulateWithTopo] score: ${score.title}, solved/issue/fatal: ${solvedIndices.length}/${n_issues}/${errorIndices.length}`);\n\tif (solvedIndices.length) pyClients.logger.info(`[RegulateWithTopo] solved measures: ${solvedIndices.join(', ')}`);\n\tif (errorIndices.length) pyClients.logger.info(`[RegulateWithTopo] error measures: ${errorIndices.join(', ')}`);\n\n\treturn {\n\t\tsolved: solvedIndices.length,\n\t\tissue: n_issues,\n\t\tfatal: errorIndices.length,\n\t};\n}\n\ninterface RegulationStat {\n\tbaseCost: number; // in milliseconds\n\ttopoCost: number; // in milliseconds\n\tbaseMeasures: BaseRegulationStat;\n\ttopoMeasures?: TopoRegulationStat;\n\tqualityScore: number;\n}\n\nconst doRegulate = async (\n\tscore: starry.Score,\n\t{ pyClients, solver, solutionStore = DefaultSolutionStore, onSaveIssueMeasure }: RegulateMaybeWithTopoOption\n): Promise => {\n\tpyClients?.logger?.info(`[doRegulate] score: ${score.title}`);\n\n\tscore.spartito = undefined;\n\tscore.assemble();\n\tconst spartito = score.makeSpartito();\n\n\tspartito.measures.forEach((measure) => score.assignBackgroundForMeasure(measure));\n\n\tconst t0 = Date.now();\n\n\tconst baseMeasures = await solveMeasures(spartito.measures, { solver, quotaMax: 1000, solutionStore, logger: pyClients?.logger });\n\n\tconst t1 = Date.now();\n\n\tconst topoMeasures = pyClients ? await doRegulateWithTopo(score, { pyClients, solver, solutionStore, onSaveIssueMeasure }) : undefined;\n\n\tconst t2 = Date.now();\n\n\treturn {\n\t\tbaseCost: t1 - t0,\n\t\ttopoCost: t2 - t1,\n\t\tbaseMeasures,\n\t\ttopoMeasures,\n\t\tqualityScore: spartito.qualityScore,\n\t};\n};\n\nconst doSimpleRegulate = async (\n\tscore: starry.Score,\n\t{ solver, solutionStore = DefaultSolutionStore, logger, quotaMax = 240, quotaFactor = 16 }: RegulateSimpleOption\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\tconst measures = spartito.measures.filter((measure) => !measure.regulated);\n\n\tawait solveMeasures(measures, { solver, quotaMax, quotaFactor, solutionStore, logger });\n\n\tconsole.assert(score.spartito?.regulated, 'doSimpleRegulate: regulation incomplete:', spartito.measures.filter((measure) => !measure.regulated).length);\n};\n\nconst evaluateScoreQuality = async (score: starry.Score, options: RegulateSimpleOption): Promise => {\n\tif (!score.spartito?.regulated) await doSimpleRegulate(score, options);\n\n\treturn score.spartito!.regulated ? score.spartito!.qualityScore : null;\n};\n\ninterface RegulationSummary {\n\tscoreN: number;\n\n\tbaseCostTotal: number; // in milliseconds\n\ttopoCostTotal: number; // in milliseconds\n\tbaseCostPerMeasure: number | null; // in milliseconds\n\ttopoCostPerMeasure: number | null; // in milliseconds\n\n\tcached: number;\n\tbaseComputed: number;\n\tbaseSolved: number;\n\ttopoSolved: number;\n\ttopoIssue: number;\n\ttopoFatal: number;\n}\n\nconst abstractRegulationStats = (stats: RegulationStat[]): RegulationSummary => {\n\tconst { baseCostTotal, topoCostTotal, baseMeasures, topoMeasures } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tbaseCostTotal: sum.baseCostTotal + stat.baseCost,\n\t\t\ttopoCostTotal: sum.topoCostTotal + stat.topoCost,\n\t\t\tbaseMeasures: sum.baseMeasures + stat.baseMeasures.computed,\n\t\t\ttopoMeasures: sum.topoMeasures + (stat.topoMeasures!.solved + stat.topoMeasures!.issue + stat.topoMeasures!.fatal),\n\t\t}),\n\t\t{\n\t\t\tbaseCostTotal: 0,\n\t\t\ttopoCostTotal: 0,\n\t\t\tbaseMeasures: 0,\n\t\t\ttopoMeasures: 0,\n\t\t}\n\t);\n\n\tconst baseCostPerMeasure = baseMeasures > 0 ? baseCostTotal / baseMeasures : null;\n\tconst topoCostPerMeasure = topoMeasures > 0 ? topoCostTotal / topoMeasures : null;\n\n\tconst { cached, baseComputed, baseSolved, topoSolved, topoIssue, topoFatal } = stats.reduce(\n\t\t(sum, stat) => ({\n\t\t\tcached: sum.cached + stat.baseMeasures.cached,\n\t\t\tbaseComputed: sum.baseComputed + stat.baseMeasures.computed,\n\t\t\tbaseSolved: sum.baseSolved + stat.baseMeasures.solved,\n\t\t\ttopoSolved: sum.topoSolved + stat.topoMeasures!.solved,\n\t\t\ttopoIssue: sum.topoIssue + stat.topoMeasures!.issue,\n\t\t\ttopoFatal: sum.topoFatal + stat.topoMeasures!.fatal,\n\t\t}),\n\t\t{ cached: 0, baseComputed: 0, baseSolved: 0, topoSolved: 0, topoIssue: 0, topoFatal: 0 }\n\t);\n\n\treturn {\n\t\tscoreN: stats.length,\n\t\tbaseCostTotal,\n\t\ttopoCostTotal,\n\t\tbaseCostPerMeasure,\n\t\ttopoCostPerMeasure,\n\t\tcached,\n\t\tbaseComputed,\n\t\tbaseSolved,\n\t\ttopoSolved,\n\t\ttopoIssue,\n\t\ttopoFatal,\n\t};\n};\n\nexport { doRegulate, doSimpleRegulate, evaluateScoreQuality, abstractRegulationStats };\n","import SparkMD5 from 'spark-md5';\n//import JSZip from 'jszip';\nimport * as starry from '../../src/starry';\n//import { encodeFindResource } from '../../src/isomorphic/converter';\nimport sharp, { FormatEnum } from 'sharp';\nimport got from 'got';\n//import { Logger } from './ZeroClient';\nimport type { SolutionStore, SaveIssueMeasure } from './store';\nimport { ScoreJSON } from '../../src/isomorphic/types';\n\nconst SYSTEM_MARGIN = 4;\n\nexport const constructSystem = ({ page, backgroundImage, detection, imageSize, position }) => {\n\tconst systemWidth = (detection.phi2 - detection.phi1) / detection.interval;\n\tconst systemHeight = imageSize.height / detection.interval;\n\n\tconst lastSystem = page.systems[page.systems.length - 1];\n\tconst top = position ? position.y : (lastSystem ? lastSystem.top + lastSystem.height : 0) + SYSTEM_MARGIN;\n\tconst left = position ? position.x : SYSTEM_MARGIN;\n\n\tconst stavesTops = [\n\t\t0,\n\t\t...Array(detection.middleRhos.length - 1)\n\t\t\t.fill(0)\n\t\t\t.map((_, i) => (detection.middleRhos[i] + detection.middleRhos[i + 1]) / 2 / detection.interval),\n\t];\n\n\tconst measureBars = [systemWidth];\n\n\tconst staves = stavesTops.map(\n\t\t(top, i) =>\n\t\t\tnew starry.Staff({\n\t\t\t\ttop,\n\t\t\t\theight: (stavesTops[i + 1] || systemHeight) - top,\n\t\t\t\tstaffY: detection.middleRhos[i] / detection.interval - top,\n\t\t\t\tmeasureBars,\n\t\t\t})\n\t);\n\n\t//console.log(\"detection:\", detection, options, stavesTops);\n\n\tconst imagePosition = {\n\t\tx: -detection.phi1 / detection.interval,\n\t\ty: 0,\n\t\twidth: imageSize.width / detection.interval,\n\t\theight: imageSize.height / detection.interval,\n\t};\n\n\treturn new starry.System({\n\t\tstaves,\n\t\tleft,\n\t\ttop,\n\t\twidth: systemWidth,\n\t\tbackgroundImage,\n\t\timagePosition,\n\t\tmeasureBars,\n\t});\n};\n\nexport interface ConvertOption {\n\tformat?: keyof FormatEnum;\n\tquality?: number;\n\tmaxHeight?: number;\n}\n\nconst toBuffer = async (url: string | Buffer): Promise => {\n\tif (typeof url === 'string') {\n\t\tif (/^https?:\\/\\//.test(url)) {\n\t\t\treturn (await got(url, { responseType: 'buffer', decompress: true, https: { rejectUnauthorized: false } })).body;\n\t\t}\n\n\t\tif (/^data:image\\//.test(url)) {\n\t\t\treturn Buffer.from(url.split(',')[1], 'base64');\n\t\t}\n\n\t\treturn Buffer.from(url);\n\t}\n\n\treturn url;\n};\n\n/**\n * 转换图片格式,默认webp、最大高度1080,高度小于1080自动不做尺寸变换\n * @param url\n * @param format\n * @param maxHeight\n * @param quality\n */\nexport async function convertImage(url: string | Buffer, { format = 'webp', maxHeight = 1080, quality = 80 }: ConvertOption = {}) {\n\tlet buf = await toBuffer(url);\n\n\tconst webpBuffer = await new Promise((resolve) => {\n\t\tsharp(buf)\n\t\t\t.resize({\n\t\t\t\twidth: maxHeight,\n\t\t\t\theight: maxHeight,\n\t\t\t\tfit: 'inside',\n\t\t\t\twithoutEnlargement: true,\n\t\t\t})\n\t\t\t.toFormat(format, { quality })\n\t\t\t.toBuffer((err, buf) => {\n\t\t\t\tresolve(buf);\n\t\t\t});\n\t});\n\n\tconst md5 = SparkMD5.ArrayBuffer.hash(webpBuffer);\n\n\treturn {\n\t\tbuffer: webpBuffer,\n\t\tfilename: `${md5}.${format}`,\n\t};\n}\n\n/**\n * 替换scoreJson图片地址\n * @param scoreJson\n * @param onReplaceImage\n */\nexport const replaceScoreJsonImages = (scoreJson: ScoreJSON, onReplaceImage: (src: string) => string = (src) => src) => {\n\tconst json = JSON.parse(JSON.stringify(scoreJson));\n\n\tjson.pages.forEach((page) => {\n\t\tpage?.src && (page.src = onReplaceImage(page?.src));\n\t});\n\n\tjson.lines.forEach((system) => {\n\t\tsystem.lineStaves.forEach((line) => {\n\t\t\tline.imgs.forEach((staff) => {\n\t\t\t\tstaff?.src && (staff.src = onReplaceImage(staff.src));\n\t\t\t});\n\t\t});\n\t});\n\n\treturn json;\n};\n\n/**\n * 获取scoreJson图片资源列表\n * @param scoreJson\n */\nexport const getScoreJsonImages = (scoreJson: ScoreJSON) => {\n\treturn [\n\t\t...scoreJson.pages.map((page) => page?.src),\n\t\t...scoreJson.lines\n\t\t\t.map((system) => system.lineStaves.map((staff) => staff.imgs))\n\t\t\t.flat(2)\n\t\t\t.map((staff) => staff?.src)\n\t\t\t.filter(Boolean),\n\t];\n};\n\ninterface ScorePatchesUpdateOptions {\n\tsolutionStore?: SolutionStore;\n}\n\nexport const updateScorePatches = (score: starry.Score, measures: starry.SpartitoMeasure[], options: ScorePatchesUpdateOptions = {}): void => {\n\tconsole.assert(\n\t\tmeasures.every((measure) => measure.validRegulated),\n\t\t'[updateScorePatches] some measures not valid regulated:',\n\t\tmeasures.filter((measure) => !measure.validRegulated)\n\t);\n\n\tscore.patches = measures.map((measure) => measure.createPatch());\n\n\tif (options?.solutionStore) {\n\t\tscore.assemble();\n\t\tconst spartito = score.makeSpartito();\n\n\t\tmeasures.forEach((measure) => {\n\t\t\toptions.solutionStore!.set(measure.regulationHash, { ...measure.asSolution(), priority: 1 });\n\t\t\tif (measure.regulationHash0 !== measure.regulationHash) {\n\t\t\t\tconst originMeasure = spartito.measures.find((m) => m.measureIndex === measure.measureIndex);\n\t\t\t\toptions.solutionStore!.set(measure.regulationHash0, { ...measure.asSolution(originMeasure), priority: 1 });\n\t\t\t}\n\t\t});\n\t}\n};\n\ninterface EditableMeasuresSaveOptions {\n\tstatus?: number;\n\tsolutionStore?: SolutionStore;\n}\n\nexport const saveEditableMeasures = async (\n\tscore: starry.Score,\n\tmeasureIndices: number[],\n\tsaveMeasure: SaveIssueMeasure,\n\t{ status = 2, solutionStore }: EditableMeasuresSaveOptions = {}\n): Promise => {\n\tscore.assemble();\n\tconst spartito = score.spartito || score.makeSpartito();\n\n\tconst measures = measureIndices\n\t\t.map((index) => spartito.measures.find((measure) => measure.measureIndex === index))\n\t\t.filter(Boolean) as starry.SpartitoMeasure[];\n\n\tif (solutionStore) {\n\t\tconst solutions = await solutionStore.batchGet(measures.map((measure) => measure.regulationHash0));\n\t\tmeasures.forEach((measure, i) => {\n\t\t\tconst solution = solutions[i];\n\t\t\tif (solution) measure.applySolution(solution);\n\t\t});\n\t}\n\n\tmeasures.forEach((measure) => {\n\t\tsaveMeasure({\n\t\t\tmeasureIndex: measure.measureIndex,\n\t\t\tmeasure: new starry.EditableMeasure(measure),\n\t\t\tstatus,\n\t\t});\n\t});\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-30T10:34:16.090Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../libs/browserComponents';\n\nexport * from '../../libs/predictors';\nexport * from '../../libs/regulation';\nexport * from '../../libs/util';\nexport * as starry from '../../../src/starry';\n"],"names":["eventsModule","events","EventEmitter","Request","pack","unpack","getPortPromise","defaultsDeep","PythonShell","inherits_browserModule","inheritsModule","require$$0","require$$1","util","getPort","pick","sha1","GROUP_N_TO_PITCH","MIDDLE_C","mod7","argmax","Token.TokenClefs","Token.TokenOctshifts","Token.TokenTimesigsC","Token.TokenTimesigsN","EquationSolver.Solver","erf","parser","parse","parseCode","grammar","MIDI","MidiSequence","Notation","MusicNotation","MidiPlayer","Config","Node","Navigator","Matcher","MidiUtils","require$$2","require$$3","require$$4","undefined","require","staffLayout.parseCode","measureLayout.parseCode","WeakLRUCache","starry.beadSolver.solveMeasure","starry.evaluateMeasure","starry.beadSolver.estimateMeasure","starry.EditableMeasure","starry.Staff","starry.System","got","sharp","SparkMD5"],"mappings":"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E,EAAE,CAAC,EAAE;AACd,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACb,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACxG,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YACnJ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACf,YAAA,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7F,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACd,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACd,YAAA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACb,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACtD,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EA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"} \ No newline at end of file diff --git a/backend/omr/dist/worker.js b/backend/omr/dist/worker.js index 50f6b4bea0a17b063518bc96c7bd172c802ae48f..f13e31d3be363218aa5f790adb00d20fe4c7549b 100644 --- a/backend/omr/dist/worker.js +++ b/backend/omr/dist/worker.js @@ -7,5 +7,5 @@ * @copyright Chen, Yi-Cyuan 2014-2017 * @license MIT */ -(function(module){(function(){var root="object"==typeof window?window:{},NODE_JS=!root.JS_SHA1_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS&&(root=global);var COMMON_JS=!root.JS_SHA1_NO_COMMON_JS&&module.exports,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[],createOutputMethod=function(t){return function(e){return new Sha1(!0).update(e)[t]()}},createMethod=function(){var t=createOutputMethod("hex");NODE_JS&&(t=nodeWrap(t)),t.create=function(){return new Sha1},t.update=function(e){return t.create().update(e)};for(var e=0;e>2]|=t[n]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(o[i>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=64?(this.block=o[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},Sha1.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>2]|=EXTRA[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},Sha1.prototype.hash=function(){var t,e,s=this.h0,i=this.h1,n=this.h2,r=this.h3,o=this.h4,a=this.blocks;for(t=16;t<80;++t)e=a[t-3]^a[t-8]^a[t-14]^a[t-16],a[t]=e<<1|e>>>31;for(t=0;t<20;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|~i&r)+o+1518500249+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|~s&n)+r+1518500249+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|~o&i)+n+1518500249+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|~r&s)+i+1518500249+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|~n&o)+s+1518500249+a[t+4]|0,n=n<<30|n>>>2;for(;t<40;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o+1859775393+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r+1859775393+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n+1859775393+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i+1859775393+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s+1859775393+a[t+4]|0,n=n<<30|n>>>2;for(;t<60;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|i&r|n&r)+o-1894007588+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|s&n|i&n)+r-1894007588+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|o&i|s&i)+n-1894007588+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|r&s|o&s)+i-1894007588+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|n&o|r&o)+s-1894007588+a[t+4]|0,n=n<<30|n>>>2;for(;t<80;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o-899497514+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r-899497514+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n-899497514+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i-899497514+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s-899497514+a[t+4]|0,n=n<<30|n>>>2;this.h0=this.h0+s|0,this.h1=this.h1+i|0,this.h2=this.h2+n|0,this.h3=this.h3+r|0,this.h4=this.h4+o|0},Sha1.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[15&s]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[15&i]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]},Sha1.prototype.toString=Sha1.prototype.hex,Sha1.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return[t>>24&255,t>>16&255,t>>8&255,255&t,e>>24&255,e>>16&255,e>>8&255,255&e,s>>24&255,s>>16&255,s>>8&255,255&s,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&255,n>>16&255,n>>8&255,255&n]},Sha1.prototype.array=Sha1.prototype.digest,Sha1.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(20),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),t};var exports=createMethod();COMMON_JS?module.exports=exports:root.sha1=exports})()})(sha1),function(t){t.ClefG="ClefG",t.ClefF="ClefF",t.ClefC="ClefC",t.NoteheadS0="NoteheadS0",t.NoteheadS1="NoteheadS1",t.NoteheadS2="NoteheadS2",t.NoteheadS1stemU="NoteheadS1stemU",t.NoteheadS1stemD="NoteheadS1stemD",t.NoteheadS2stemU="NoteheadS2stemU",t.NoteheadS2stemD="NoteheadS2stemD",t.vline_Stem="vline_Stem",t.Flag3="Flag3",t.BeamLeft="BeamLeft",t.BeamContinue="BeamContinue",t.BeamRight="BeamRight",t.TremoloLeft="TremoloLeft",t.TremoloRight="TremoloRight",t.TremoloMiddle="TremoloMiddle",t.Dot="Dot",t.Rest0="Rest0",t.Rest1="Rest1",t.Rest2="Rest2",t.Rest3="Rest3",t.Rest4="Rest4",t.Rest5="Rest5",t.Rest6="Rest6",t.Rest0W="Rest0W",t.RestM1="RestM1",t.AccNatural="AccNatural",t.AccSharp="AccSharp",t.AccDoublesharp="AccDoublesharp",t.AccFlat="AccFlat",t.AccFlatflat="AccFlatflat",t.vline_VoltaLeft="vline_VoltaLeft",t.vline_VoltaRight="vline_VoltaRight",t.VoltaLeft="VoltaLeft",t.VoltaRight="VoltaRight",t.VoltaAlternativeBegin="VoltaAlternativeBegin",t.BarMeasure="BarMeasure",t.vline_BarMeasure="vline_BarMeasure",t.vline_BarTerminal="vline_BarTerminal",t.vline_BarSegment="vline_BarSegment",t.SlurBegin="SlurBegin",t.SlurEnd="SlurEnd",t.TimesigC44="TimesigC44",t.TimesigC22="TimesigC22",t.TimesigZero="TimesigZero",t.TimesigOne="TimesigOne",t.TimesigTwo="TimesigTwo",t.TimesigThree="TimesigThree",t.TimesigFour="TimesigFour",t.TimesigFive="TimesigFive",t.TimesigSix="TimesigSix",t.TimesigSeven="TimesigSeven",t.TimesigEight="TimesigEight",t.TimesigNine="TimesigNine",t.OctaveShift8va="OctaveShift8va",t.OctaveShift8vb="OctaveShift8vb",t.OctaveShift8="OctaveShift8",t.OctaveShift0="OctaveShift0",t.Zero="Zero",t.One="One",t.Two="Two",t.Three="Three",t.Four="Four",t.Five="Five",t.Six="Six",t.Seven="Seven",t.Eight="Eight",t.Nine="Nine",t.f="f",t.p="p",t.m="m",t.n="n",t.r="r",t.s="s",t.z="z",t.CrescendoBegin="CrescendoBegin",t.CrescendoEnd="CrescendoEnd",t.DecrescendoBegin="DecrescendoBegin",t.DecrescendoEnd="DecrescendoEnd",t.ScriptFermata="ScriptFermata",t.ScriptShortFermata="ScriptShortFermata",t.ScriptSforzato="ScriptSforzato",t.ScriptStaccato="ScriptStaccato",t.ScriptStaccatissimo="ScriptStaccatissimo",t.ScriptTurn="ScriptTurn",t.ScriptTrill="ScriptTrill",t.ScriptSegno="ScriptSegno",t.ScriptCoda="ScriptCoda",t.ScriptArpeggio="ScriptArpeggio",t.ScriptPrall="ScriptPrall",t.ScriptMordent="ScriptMordent",t.ScriptMarcato="ScriptMarcato",t.ScriptTenuto="ScriptTenuto",t.ScriptPortato="ScriptPortato",t.PedalStar="PedalStar",t.PedalPed="PedalPed",t.KeyAcc="KeyAcc",t.TempoNotehead="TempoNotehead",t.GraceNotehead="GraceNotehead",t.SignLined="SignLined",t.SignInterval="SignInterval",t.rect_Text="rect_Text",t.rect_Lyric="rect_Lyric"}(SemanticType||(SemanticType={})),SemanticType.BarMeasure,SemanticType.vline_BarMeasure,SemanticType.vline_BarTerminal,SemanticType.vline_BarSegment,SemanticType.vline_VoltaLeft,SemanticType.vline_VoltaRight,SemanticType.VoltaAlternativeBegin;const st=SemanticType;st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Zero,st.One,st.Two,st.Three,st.Four,st.Five,st.Six,st.Seven,st.Eight,st.Nine,st.ScriptStaccatissimo,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.Rest0W,st.RestM1,st.SignInterval,st.SignLined,st.BeamLeft,st.BeamContinue,st.BeamRight,st.ClefG,st.ClefF,st.ClefC,st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Dot,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.RestM1,st.AccNatural,st.AccSharp,st.AccDoublesharp,st.AccFlat,st.AccFlatflat,st.TimesigC44,st.TimesigC22,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.One,st.Two,st.Three,st.Four,st.Five,st.OctaveShift8,st.OctaveShift0,st.f,st.p,st.m,st.n,st.r,st.s,st.z,st.ScriptFermata,st.ScriptShortFermata,st.ScriptSforzato,st.ScriptStaccato,st.ScriptStaccatissimo,st.ScriptTurn,st.ScriptTrill,st.ScriptSegno,st.ScriptCoda,st.ScriptArpeggio,st.ScriptPrall,st.ScriptMordent,st.ScriptMarcato,st.ScriptTenuto,st.ScriptPortato,st.PedalStar,st.PedalPed;const roundNumber=(t,e,s=-1/0)=>Math.max(Math.round(t/e)*e,s),gcd=(t,e)=>Number.isInteger(t)&&Number.isInteger(e)?0===e?t:gcd(e,t%e):(console.error("non-integer gcd:",t,e),1),frac=(t,e)=>({numerator:t,denominator:e}),reducedFraction=(t,e)=>{t=Math.round(t),e=Math.round(e);const s=0!==t?gcd(t,e):e;return frac(t/s,e/s)},fractionMul=(t,e)=>e?t*e.numerator/e.denominator:t;class DummyLogger{debug(...t){}group(...t){}groupCollapsed(...t){}groupEnd(){}info(...t){}warn(...t){}assert(...t){}}const EOM=-1,GREAT_NUMBER=1920,DURATION_MULTIPLIER=1921920,floatToFrac=t=>{const e=Math.round(t*GREAT_NUMBER);return reducedFraction(e,GREAT_NUMBER)},floatToTimeWarp=t=>1===t?null:floatToFrac(t);var ActionType;!function(t){t[t.PLACE=0]="PLACE",t[t.VERTICAL=1]="VERTICAL",t[t.HORIZONTAL=2]="HORIZONTAL"}(ActionType||(ActionType={}));class Action{constructor(t){Object.assign(this,t)}static P(t){return new Action({type:ActionType.PLACE,e1:t})}static V(t,e,s=1){return new Action({type:ActionType.VERTICAL,e1:s>0?t:e,e2:s>0?e:t})}static H(t,e){return new Action({type:ActionType.HORIZONTAL,e1:t,e2:e})}get id(){switch(this.type){case ActionType.PLACE:return this.e1.toString();case ActionType.VERTICAL:return`${this.e1}|${this.e2}`;case ActionType.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(t,e){const s=Array(t.stages.length).fill(null).map(()=>Array(t.stages.length).fill(null).map(()=>new Set));t.actions.filter(t=>t.type===ActionType.HORIZONTAL).forEach(e=>{const i=t.stages.findIndex(t=>t.events.includes(e.e1)),n=t.stages.findIndex(t=>t.events.includes(e.e2));console.assert(i>=0&&n>=0,"invalid stages for H action:",t.id,t.stages,e),s[i][n].add(e.e1)}),s[0][t.stages.length-1].add(0);const i=t.stagedEvents,n=e.matrixH[e.matrixH.length-1].filter((t,e)=>!i.has(e)),r=Math.max(0,Math.max(...n)-.01),o=t.actions.filter(t=>t.type===ActionType.HORIZONTAL),a=Object.keys(e.eventMap).map(Number).filter(t=>!o.find(e=>e.e2===t));return t.stages.forEach(i=>{i.events.forEach(n=>{if(n>0){!o.find(t=>t.e1===n)&&e.matrixH[e.matrixH.length-1][n]>=r&&(a.some(t=>e.matrixH[t][n]>0)||s[i.index][t.stages.length-1].add(n))}})}),new StageMatrix({matrix:s})}constructor(t){Object.assign(this,t)}pathOf(t,e,s,i=0){if(this.matrix[t][e].size){const n=[...this.matrix[t][e]][i];if(e===s)return[n];for(let t=e+1;t<=s;++t){const i=this.pathOf(e,t,s);if(i)return[n,...i]}}return null}findDoublePath(t,e){const s=[];for(let i=e;i>=t+1;--i)for(let n=0;ne.forEach(e=>t.forEach(t=>e.delete(t))))}toEquations(t){const e=[];for(let s=1;sr[t]=1),n.forEach(t=>r[t]=-1),e.push(r),this.reducePath(i.length>n.length?i:n)}}}return e}}class PathNode{constructor(t){Object.assign(this,t),console.assert(this.logger,"logger is null:",t)}get actions(){const t=this.parent?this.parent.actions:[];return this.action?[...t,this.action]:t}get id(){return this.actions.map(t=>t.id).sort().join(" ")}get stagedEvents(){const t=new Set;return this.stages&&this.stages.forEach(e=>e.events.forEach(e=>e>=0&&t.add(e))),t}like(t){return t.split(" ").sort().join(" ")===this.id}constructStages(t){this.stages=[{events:[EOM]}];for(const e of this.actions)switch(e.type){case ActionType.PLACE:this.stages.unshift({events:[e.e1]});break;case ActionType.VERTICAL:{const t=this.stages.find(t=>t.events.includes(e.e1)),s=this.stages.find(t=>t.events.includes(e.e2));console.assert(t||s,"invalid V action:",this.stages,e),t&&s?(t.events.push(...s.events),s.events=null,this.stages=this.stages.filter(t=>t.events)):t?s||t.events.push(e.e2):s.events.unshift(e.e1)}break;case ActionType.HORIZONTAL:{const s=this.stages.find(t=>t.events.includes(e.e1)),i=this.stages.find(t=>t.events.includes(e.e2));console.assert(s||i,"invalid H action:",this.stages,e);const n=s=>{console.assert(t.eventMap[s],"invalid event id:",e.id,s,t.eventMap);const i=t.eventMap[s].x,n=this.stages.find(e=>e.events.some(e=>e>0&&t.eventMap[e].x<=i)&&e.events.some(e=>e>0&&t.eventMap[e].x>=i));if(n)n.events.push(s);else{const e={events:[s]},n=this.stages.findIndex(e=>e.events[0]===EOM||t.eventMap[e.events[0]].x>=i);this.stages.splice(n,0,e)}};s||n(e.e1),i||n(e.e2)}}this.stages.forEach((t,e)=>t.index=e)}constructConstraints(t){const e=Object.keys(t.eventMap).length,s=StageMatrix.fromNode(this,t).toEquations(e),i=Array(e).fill(null).map((e,s)=>t.eventMap[s].duration);this.constraints=s.map(t=>t.map((t,e)=>t*i[e]))}inbalancesConstraints(t){console.assert(this.constraints,"constraints not constructed.");const e=Object.keys(t.eventMap).length,s=Array(e).fill(!0),i=Array(e).fill(!1),n=[];for(const t of this.constraints){const e=t.reduce((t,e)=>t+e,0);if(0!==e){const r=e<0?t.map(t=>-t):t;if(r[0]>0)continue;n.push(r),r.forEach((t,e)=>{i[e]=i[e]||t<0,t&&(s[e]=t<0||i[e])})}}return this.constraints.forEach(t=>{0!==t.reduce((t,e)=>t+e,0)||t[0]||t.some((t,e)=>t&&!s[e])&&(t.forEach((t,e)=>t&&(s[e]=!1)),n.push(t))}),{ones:s,inbalances:n}}solveEquations({ones:t,inbalances:e}){if(!e.length)return t.map(()=>1);const s=t.map((t,e)=>({fixed:t,i:e})).filter(({fixed:t})=>!t).map(({i:t})=>t).filter(t=>e.some(e=>0!==e[t]));if(!s.length)return t.map(()=>1);const i=s.map(t=>Math.abs(e.find(e=>0!==e[t])[t])),n=new Map;let r=!1;const o=e.map(t=>({line:t.filter((t,e)=>s.includes(e)),bias:-t.reduce((t,e,i)=>t+(s.includes(i)?0:e),0)})).filter(({line:t,bias:e})=>{if(t.every(t=>0===t))return!1;const s=t.join(",");return n.has(s)?(r=n.get(s)!==e,!1):(n.set(s,e),!0)});if(r)return null;const a=o.slice(0,s.length),c=o.slice(s.length);if(a.lengths===e?1:s===n?-1:0),bias:0,prior:(i[e]+i[n])/DURATION_MULTIPLIER};a.some(t=>t.line[e]&&t.line[n])&&(r.prior-=10),a.some(t=>1===t.line.filter(Number).length&&(t.line[e]||t.line[n]))&&(r.prior+=1),t.push(r)}t.sort((t,e)=>t.prior-e.prior),a.push(...t.slice(0,s.length-a.length))}const h=a.map(({line:t})=>t),l=a.map(({bias:t})=>t),u=matrixInverse(h);if(!u)return this.logger.warn("null invert:",h),null;const d=u.map(t=>t.reduce((t,e,s)=>t+e*l[s],0));if(c.length&&c.some(t=>Math.abs(t.line.reduce((t,e,s)=>t+e*d[s],0))>.001))return null;const f=t.map(()=>1);return s.forEach((t,e)=>f[t]=d[e]),f}optimallySolve(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t),i=e.map((e,s)=>e?-1:roundNumber(t.eventMap[s].shrinkness,.01)).reduce((t,e,s)=>(e>=0&&(t[e]=t[e]||[],t[e].push(s)),t),{}),n=Object.entries(i).sort((t,e)=>Number(e[0])-Number(t[0])).map(t=>t[1]);for(let i=1;i!r.includes(e)),a=this.solveEquations({ones:o,inbalances:s});if(a&&a.every((e,s)=>e<=1&&e>t.eventMap[s].lowWarp))return a}return this.solveEquations({ones:e,inbalances:s})}isConflicted(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t);for(const i of s){if(i.reduce((s,i,n)=>s+i*(e[n]||i<=0?1:t.eventMap[n].lowWarp),0)>=0)return i.forEach((e,s)=>{e&&(t.eventTendencies[s]+=e>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:e,inbalances:s});return!i||!i.every((e,s)=>e>t.eventMap[s].lowWarp&&e<=1)}getSolution(t){const e=e=>t.eventMap[e.e2]?t.eventMap[e.e2].x+.06*Math.abs(t.eventMap[e.e2].x-t.eventMap[e.e1].x):t.eventMap[e.e1].x+1e4,s=this.actions.filter(t=>t.type===ActionType.HORIZONTAL).sort((t,s)=>e(t)-e(s)),i=s.reduce((t,e)=>({...t,[e.e1]:e.e2}),{}),n=new Set([...Object.keys(i)].map(Number));s.forEach(t=>n.delete(t.e2)),this.stages[0].events.forEach(t=>t>0&&n.add(t));let r=[...n].map(t=>{const e=[t];let s=t;for(;i[s]&&(s=i[s],!(s<0||e.includes(s)));)e.push(s);return e});const o=Object.values(t.eventMap).filter(t=>t.id>0).map(t=>({id:t.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),a=o.filter(t=>r.some(e=>e.includes(t.id))||s.some(e=>[e.e1,e.e2].includes(t.id))).reduce((t,e)=>({...t,[e.id]:e}),{});this.stages.forEach((t,e)=>t.events.forEach(t=>a[t]&&(a[t].tickGroup=e))),this.stages[0].tick=0,this.stages[0].events.forEach(t=>a[t]&&(a[t].tick=0));const c=this.optimallySolve(t);o.forEach(t=>t.timeWarp=floatToTimeWarp(c[t.id]));const h=this.stages.slice(0,this.stages.length-1),l=()=>{if(h.every(t=>Number.isFinite(t.tick)))return!1;let e=!1;return s.forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(n.tick)&&(n.tick=i.tick+fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),n.events.forEach(t=>a[t]&&(a[t].tick=n.tick)),e=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(n.tick)&&(i.tick=n.tick-fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),i.events.forEach(t=>a[t]&&(a[t].tick=i.tick)),e=!0)}),e};for(;l(););console.assert(h.every(t=>Number.isFinite(t.tick)),"stage ticks not all solved:",this.stages,this.id),o.filter(t=>Number.isFinite(t.tick)).forEach(e=>e.endTick=e.tick+fractionMul(t.eventMap[e.id].duration,e.timeWarp));const u=t.eventMap[0].duration;r.forEach(t=>{const e=t.findIndex(t=>a[t].endTick>u);if(e>=0){t.splice(e,t.length-e).forEach(t=>{a[t].tick=null,a[t].endTick=null})}}),r=r.filter(t=>t.length);const d=Math.max(0,...o.map(t=>t.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:r,events:o,duration:d,actions:this.actions.map(t=>t.id).join(" ")}}deduce(t,e){this.stages||this.constructStages(t);const s=t.actionAccessing.get(this.id)||{times:0};if(++s.times,t.actionAccessing.set(this.id,s),this.constructConstraints(t),this.isConflicted(t))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),e.credits>0){if(--e.credits,this.children||this.expand(t),this.children=this.children.filter(e=>!t.actionAccessing.get(e.id)||!t.actionAccessing.get(e.id).closed),this.children.length){const s=e=>e.possibility/((t.actionAccessing.get(e.id)||{times:0}).times+1);this.children.sort((t,e)=>s(e)-s(t));for(const s of this.children){const i=s.deduce(t,e);if(i)return this.logger.groupEnd(),i;if(e.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(t)}expand(t){this.constructStages(t);const{eventMap:e,matrixV:s,matrixH:i}=t,n=this.stagedEvents,r=[],o=t=>{if(!this.actions.some(e=>e.id===t.action.id)&&!r.some(e=>e.action.id===t.action.id)){const e=this.stages.find(e=>e.events.includes(t.action.e1)),i=this.stages.find(e=>e.events.includes(t.action.e2));if(e===i||e&&i&&e.index>=i.index)return;if(e&&i)if(t.action.type===ActionType.VERTICAL){if(i.index-e.index>1)return;if(this.actions.some(t=>e.events.includes(t.e1)&&i.events.includes(t.e2)))return}else if(t.action.type===ActionType.HORIZONTAL&&e.index>i.index)return;if(t.action.type===ActionType.HORIZONTAL&&this.actions.some(e=>e.type===ActionType.HORIZONTAL&&(e.e1===t.action.e1||e.e2===t.action.e2||e.e1===t.action.e2&&e.e2===t.action.e1)))return;if(t.action.type===ActionType.VERTICAL){if(e&&(t.possibility=Math.min(t.possibility,...e.events.map(e=>s[t.action.e2][e])),t.possibility<=0))return;if(i&&(t.possibility=Math.min(t.possibility,...i.events.map(e=>s[e][t.action.e1])),t.possibility<=0))return}r.push(t)}};for(const t of n)t<0||(s[t].forEach((e,s)=>{e>0&&t!==s&&o({action:Action.V(s,t),possibility:e})}),s.forEach((e,s)=>{const i=e[t];i>0&&o({action:Action.V(t,s),possibility:i})}),i[t].forEach((e,s)=>{e>0&&o({action:Action.H(s,t),possibility:e})}),i.forEach((s,i)=>{i=i>=Object.keys(e).length?-1:i;const n=s[t];n>0&&o({action:Action.H(t,i),possibility:n})}));r.some(t=>[ActionType.HORIZONTAL,ActionType.PLACE].includes(t.action.type)||!n.has(t.action.e1)||!n.has(t.action.e2))?this.children=r.map(t=>new PathNode({logger:this.logger,parent:this,...t})):this.children=[]}}class Solver{constructor(t,{quota:e=1e3,logger:s=new DummyLogger}={}){this.quota=e,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:t.measureShrinkness,duration:t.expectedDuration,lowWarp:0};this.events=[i,...t.events.map(t=>({id:t.id,x:t.x,confidence:t.confidence,shrinkness:t.shrinkness,staff:t.staff,duration:t.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((t,e)=>({...t,[e.id]:e}),{}),this.matrixH=t.matrixH,this.matrixV=t.matrixV,this.xSpan=t.endX-Math.min(t.endX-1,...t.events.map(t=>t.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(t=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(t.id),possibility:this.matrixV[t.id].reduce((t,e)=>t+e,0)}));let t=null;this.logger.groupCollapsed("solve");const e=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:e},n=this.pathRoot.deduce(i,s);if(n.credits=this.quota-s.credits,n.times=s.times,this.evaluateSolution(n),this.logger.debug("loss:",n.loss),t=!t||n.losst/s.times)),t}evaluateSolution(t){t.loss=0;const e=t.events.reduce((t,e)=>({...t,[e.id]:{...e,...this.eventMap[e.id]}}),{}),s=t.events.filter(t=>Number.isFinite(t.tick)).map(t=>e[t.id]),i=s.reduce((t,e)=>(t[e.staff]=t[e.staff]||[],t[e.staff].push(e),t),{});Object.values(i).forEach(e=>{e.sort((t,e)=>t.x-e.x).slice(0,e.length-1).forEach((s,i)=>{e[i+1].tick{if(Number.isFinite(s.tick)&&!t.voices.every(t=>!t.includes(s.id))||(t.loss+=100*e[s.id].confidence),s.timeWarp){const{numerator:t,denominator:i}=s.timeWarp,r=e[s.id].shrinkness;n.set(t,Math.max(n.get(t)||0,1-r)),n.set(i,Math.max(n.get(i)||0,1-r))}});const r=reducedFraction(t.duration,this.eventMap[0].duration);n.set(r.numerator,Math.max(n.get(r.numerator)||0,1-this.eventMap[0].shrinkness)),n.set(r.denominator,Math.max(n.get(r.denominator)||0,1-this.eventMap[0].shrinkness));for(const[e,s]of n.entries())e>1&&(t.loss+=Math.log(e)*s);let o=0,a=0;t.voices.forEach(s=>{console.assert(e[s[0]],"invalid voice:",s,Object.keys(e));const i=Math.abs(e[s[0]].tick),n=e[s[s.length-1]].endTick;o+=Math.max(0,i+t.duration-n);let r=null;s.forEach(t=>{const s=e[t];s.staff!==r&&(null!==r&&++a,r=s.staff)})}),t.loss+=10*o/DURATION_MULTIPLIER,t.loss+=5**a-1;const c=[...s].sort((t,e)=>t.x-e.x),h=c.slice(1).map((e,s)=>{const i=c[s],n=e.x-i.x,r=e.tick-i.tick;if(!r)return n/this.xSpan;return(4*Math.atan2(r/t.duration,n/this.xSpan)/Math.PI-1)**2}),l=Math.max(...h,0);t.loss+=l**2,console.assert(t.loss>=0,"Invalid solution loss!!!",t.loss,n,o,a),t.loss<0&&(t.loss=1/0)}}const solveStaffGroup=(t,e)=>{if(!t.events.length)return{events:[],voices:[],duration:0};return new Solver(t,e).solve()};self.onmessage=t=>{const{id:e,args:s}=t.data;try{const t=solveStaffGroup(s[0],s[1]);self.postMessage({id:e,result:t})}catch(t){self.postMessage({id:e,error:t.message})}},console.info("%cstarry-omr%c v1.0.0 2026-04-23T11:21:11.382Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;")})(); +(function(module){(function(){var root="object"==typeof window?window:{},NODE_JS=!root.JS_SHA1_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node;NODE_JS&&(root=global);var COMMON_JS=!root.JS_SHA1_NO_COMMON_JS&&module.exports,HEX_CHARS="0123456789abcdef".split(""),EXTRA=[-2147483648,8388608,32768,128],SHIFT=[24,16,8,0],OUTPUT_TYPES=["hex","array","digest","arrayBuffer"],blocks=[],createOutputMethod=function(t){return function(e){return new Sha1(!0).update(e)[t]()}},createMethod=function(){var t=createOutputMethod("hex");NODE_JS&&(t=nodeWrap(t)),t.create=function(){return new Sha1},t.update=function(e){return t.create().update(e)};for(var e=0;e>2]|=t[n]<>2]|=s<>2]|=(192|s>>6)<>2]|=(128|63&s)<=57344?(o[i>>2]|=(224|s>>12)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<>2]|=(240|s>>18)<>2]|=(128|s>>12&63)<>2]|=(128|s>>6&63)<>2]|=(128|63&s)<=64?(this.block=o[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},Sha1.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var t=this.blocks,e=this.lastByteIndex;t[16]=this.block,t[e>>2]|=EXTRA[3&e],this.block=t[16],e>=56&&(this.hashed||this.hash(),t[0]=this.block,t[16]=t[1]=t[2]=t[3]=t[4]=t[5]=t[6]=t[7]=t[8]=t[9]=t[10]=t[11]=t[12]=t[13]=t[14]=t[15]=0),t[14]=this.hBytes<<3|this.bytes>>>29,t[15]=this.bytes<<3,this.hash()}},Sha1.prototype.hash=function(){var t,e,s=this.h0,i=this.h1,n=this.h2,r=this.h3,o=this.h4,a=this.blocks;for(t=16;t<80;++t)e=a[t-3]^a[t-8]^a[t-14]^a[t-16],a[t]=e<<1|e>>>31;for(t=0;t<20;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|~i&r)+o+1518500249+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|~s&n)+r+1518500249+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|~o&i)+n+1518500249+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|~r&s)+i+1518500249+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|~n&o)+s+1518500249+a[t+4]|0,n=n<<30|n>>>2;for(;t<40;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o+1859775393+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r+1859775393+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n+1859775393+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i+1859775393+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s+1859775393+a[t+4]|0,n=n<<30|n>>>2;for(;t<60;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i&n|i&r|n&r)+o-1894007588+a[t]|0)<<5|o>>>27)+(s&(i=i<<30|i>>>2)|s&n|i&n)+r-1894007588+a[t+1]|0)<<5|r>>>27)+(o&(s=s<<30|s>>>2)|o&i|s&i)+n-1894007588+a[t+2]|0)<<5|n>>>27)+(r&(o=o<<30|o>>>2)|r&s|o&s)+i-1894007588+a[t+3]|0)<<5|i>>>27)+(n&(r=r<<30|r>>>2)|n&o|r&o)+s-1894007588+a[t+4]|0,n=n<<30|n>>>2;for(;t<80;t+=5)s=(e=(i=(e=(n=(e=(r=(e=(o=(e=s<<5|s>>>27)+(i^n^r)+o-899497514+a[t]|0)<<5|o>>>27)+(s^(i=i<<30|i>>>2)^n)+r-899497514+a[t+1]|0)<<5|r>>>27)+(o^(s=s<<30|s>>>2)^i)+n-899497514+a[t+2]|0)<<5|n>>>27)+(r^(o=o<<30|o>>>2)^s)+i-899497514+a[t+3]|0)<<5|i>>>27)+(n^(r=r<<30|r>>>2)^o)+s-899497514+a[t+4]|0,n=n<<30|n>>>2;this.h0=this.h0+s|0,this.h1=this.h1+i|0,this.h2=this.h2+n|0,this.h3=this.h3+r|0,this.h4=this.h4+o|0},Sha1.prototype.hex=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return HEX_CHARS[t>>28&15]+HEX_CHARS[t>>24&15]+HEX_CHARS[t>>20&15]+HEX_CHARS[t>>16&15]+HEX_CHARS[t>>12&15]+HEX_CHARS[t>>8&15]+HEX_CHARS[t>>4&15]+HEX_CHARS[15&t]+HEX_CHARS[e>>28&15]+HEX_CHARS[e>>24&15]+HEX_CHARS[e>>20&15]+HEX_CHARS[e>>16&15]+HEX_CHARS[e>>12&15]+HEX_CHARS[e>>8&15]+HEX_CHARS[e>>4&15]+HEX_CHARS[15&e]+HEX_CHARS[s>>28&15]+HEX_CHARS[s>>24&15]+HEX_CHARS[s>>20&15]+HEX_CHARS[s>>16&15]+HEX_CHARS[s>>12&15]+HEX_CHARS[s>>8&15]+HEX_CHARS[s>>4&15]+HEX_CHARS[15&s]+HEX_CHARS[i>>28&15]+HEX_CHARS[i>>24&15]+HEX_CHARS[i>>20&15]+HEX_CHARS[i>>16&15]+HEX_CHARS[i>>12&15]+HEX_CHARS[i>>8&15]+HEX_CHARS[i>>4&15]+HEX_CHARS[15&i]+HEX_CHARS[n>>28&15]+HEX_CHARS[n>>24&15]+HEX_CHARS[n>>20&15]+HEX_CHARS[n>>16&15]+HEX_CHARS[n>>12&15]+HEX_CHARS[n>>8&15]+HEX_CHARS[n>>4&15]+HEX_CHARS[15&n]},Sha1.prototype.toString=Sha1.prototype.hex,Sha1.prototype.digest=function(){this.finalize();var t=this.h0,e=this.h1,s=this.h2,i=this.h3,n=this.h4;return[t>>24&255,t>>16&255,t>>8&255,255&t,e>>24&255,e>>16&255,e>>8&255,255&e,s>>24&255,s>>16&255,s>>8&255,255&s,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&255,n>>16&255,n>>8&255,255&n]},Sha1.prototype.array=Sha1.prototype.digest,Sha1.prototype.arrayBuffer=function(){this.finalize();var t=new ArrayBuffer(20),e=new DataView(t);return e.setUint32(0,this.h0),e.setUint32(4,this.h1),e.setUint32(8,this.h2),e.setUint32(12,this.h3),e.setUint32(16,this.h4),t};var exports=createMethod();COMMON_JS?module.exports=exports:root.sha1=exports})()})(sha1),function(t){t.ClefG="ClefG",t.ClefF="ClefF",t.ClefC="ClefC",t.NoteheadS0="NoteheadS0",t.NoteheadS1="NoteheadS1",t.NoteheadS2="NoteheadS2",t.NoteheadS1stemU="NoteheadS1stemU",t.NoteheadS1stemD="NoteheadS1stemD",t.NoteheadS2stemU="NoteheadS2stemU",t.NoteheadS2stemD="NoteheadS2stemD",t.vline_Stem="vline_Stem",t.Flag3="Flag3",t.BeamLeft="BeamLeft",t.BeamContinue="BeamContinue",t.BeamRight="BeamRight",t.TremoloLeft="TremoloLeft",t.TremoloRight="TremoloRight",t.TremoloMiddle="TremoloMiddle",t.Dot="Dot",t.Rest0="Rest0",t.Rest1="Rest1",t.Rest2="Rest2",t.Rest3="Rest3",t.Rest4="Rest4",t.Rest5="Rest5",t.Rest6="Rest6",t.Rest0W="Rest0W",t.RestM1="RestM1",t.AccNatural="AccNatural",t.AccSharp="AccSharp",t.AccDoublesharp="AccDoublesharp",t.AccFlat="AccFlat",t.AccFlatflat="AccFlatflat",t.vline_VoltaLeft="vline_VoltaLeft",t.vline_VoltaRight="vline_VoltaRight",t.VoltaLeft="VoltaLeft",t.VoltaRight="VoltaRight",t.VoltaAlternativeBegin="VoltaAlternativeBegin",t.BarMeasure="BarMeasure",t.vline_BarMeasure="vline_BarMeasure",t.vline_BarTerminal="vline_BarTerminal",t.vline_BarSegment="vline_BarSegment",t.SlurBegin="SlurBegin",t.SlurEnd="SlurEnd",t.TimesigC44="TimesigC44",t.TimesigC22="TimesigC22",t.TimesigZero="TimesigZero",t.TimesigOne="TimesigOne",t.TimesigTwo="TimesigTwo",t.TimesigThree="TimesigThree",t.TimesigFour="TimesigFour",t.TimesigFive="TimesigFive",t.TimesigSix="TimesigSix",t.TimesigSeven="TimesigSeven",t.TimesigEight="TimesigEight",t.TimesigNine="TimesigNine",t.OctaveShift8va="OctaveShift8va",t.OctaveShift8vb="OctaveShift8vb",t.OctaveShift8="OctaveShift8",t.OctaveShift0="OctaveShift0",t.Zero="Zero",t.One="One",t.Two="Two",t.Three="Three",t.Four="Four",t.Five="Five",t.Six="Six",t.Seven="Seven",t.Eight="Eight",t.Nine="Nine",t.f="f",t.p="p",t.m="m",t.n="n",t.r="r",t.s="s",t.z="z",t.CrescendoBegin="CrescendoBegin",t.CrescendoEnd="CrescendoEnd",t.DecrescendoBegin="DecrescendoBegin",t.DecrescendoEnd="DecrescendoEnd",t.ScriptFermata="ScriptFermata",t.ScriptShortFermata="ScriptShortFermata",t.ScriptSforzato="ScriptSforzato",t.ScriptStaccato="ScriptStaccato",t.ScriptStaccatissimo="ScriptStaccatissimo",t.ScriptTurn="ScriptTurn",t.ScriptTrill="ScriptTrill",t.ScriptSegno="ScriptSegno",t.ScriptCoda="ScriptCoda",t.ScriptArpeggio="ScriptArpeggio",t.ScriptPrall="ScriptPrall",t.ScriptMordent="ScriptMordent",t.ScriptMarcato="ScriptMarcato",t.ScriptTenuto="ScriptTenuto",t.ScriptPortato="ScriptPortato",t.PedalStar="PedalStar",t.PedalPed="PedalPed",t.KeyAcc="KeyAcc",t.TempoNotehead="TempoNotehead",t.GraceNotehead="GraceNotehead",t.SignLined="SignLined",t.SignInterval="SignInterval",t.rect_Text="rect_Text",t.rect_Lyric="rect_Lyric"}(SemanticType||(SemanticType={})),SemanticType.BarMeasure,SemanticType.vline_BarMeasure,SemanticType.vline_BarTerminal,SemanticType.vline_BarSegment,SemanticType.vline_VoltaLeft,SemanticType.vline_VoltaRight,SemanticType.VoltaAlternativeBegin;const st=SemanticType;st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Zero,st.One,st.Two,st.Three,st.Four,st.Five,st.Six,st.Seven,st.Eight,st.Nine,st.ScriptStaccatissimo,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.Rest0W,st.RestM1,st.SignInterval,st.SignLined,st.BeamLeft,st.BeamContinue,st.BeamRight,st.ClefG,st.ClefF,st.ClefC,st.NoteheadS0,st.NoteheadS1,st.NoteheadS2,st.Dot,st.Rest0,st.Rest1,st.Rest2,st.Rest3,st.Rest4,st.Rest5,st.Rest6,st.RestM1,st.AccNatural,st.AccSharp,st.AccDoublesharp,st.AccFlat,st.AccFlatflat,st.TimesigC44,st.TimesigC22,st.TimesigZero,st.TimesigOne,st.TimesigTwo,st.TimesigThree,st.TimesigFour,st.TimesigFive,st.TimesigSix,st.TimesigSeven,st.TimesigEight,st.TimesigNine,st.One,st.Two,st.Three,st.Four,st.Five,st.OctaveShift8,st.OctaveShift0,st.f,st.p,st.m,st.n,st.r,st.s,st.z,st.ScriptFermata,st.ScriptShortFermata,st.ScriptSforzato,st.ScriptStaccato,st.ScriptStaccatissimo,st.ScriptTurn,st.ScriptTrill,st.ScriptSegno,st.ScriptCoda,st.ScriptArpeggio,st.ScriptPrall,st.ScriptMordent,st.ScriptMarcato,st.ScriptTenuto,st.ScriptPortato,st.PedalStar,st.PedalPed;const roundNumber=(t,e,s=-1/0)=>Math.max(Math.round(t/e)*e,s),gcd=(t,e)=>Number.isInteger(t)&&Number.isInteger(e)?0===e?t:gcd(e,t%e):(console.error("non-integer gcd:",t,e),1),frac=(t,e)=>({numerator:t,denominator:e}),reducedFraction=(t,e)=>{t=Math.round(t),e=Math.round(e);const s=0!==t?gcd(t,e):e;return frac(t/s,e/s)},fractionMul=(t,e)=>e?t*e.numerator/e.denominator:t;class DummyLogger{debug(...t){}group(...t){}groupCollapsed(...t){}groupEnd(){}info(...t){}warn(...t){}assert(...t){}}const EOM=-1,GREAT_NUMBER=1920,DURATION_MULTIPLIER=1921920,floatToFrac=t=>{const e=Math.round(t*GREAT_NUMBER);return reducedFraction(e,GREAT_NUMBER)},floatToTimeWarp=t=>1===t?null:floatToFrac(t);var ActionType;!function(t){t[t.PLACE=0]="PLACE",t[t.VERTICAL=1]="VERTICAL",t[t.HORIZONTAL=2]="HORIZONTAL"}(ActionType||(ActionType={}));class Action{constructor(t){Object.assign(this,t)}static P(t){return new Action({type:ActionType.PLACE,e1:t})}static V(t,e,s=1){return new Action({type:ActionType.VERTICAL,e1:s>0?t:e,e2:s>0?e:t})}static H(t,e){return new Action({type:ActionType.HORIZONTAL,e1:t,e2:e})}get id(){switch(this.type){case ActionType.PLACE:return this.e1.toString();case ActionType.VERTICAL:return`${this.e1}|${this.e2}`;case ActionType.HORIZONTAL:return`${this.e1}-${this.e2>=0?this.e2:"."}`}}get events(){return[this.e1,this.e2].filter(Number.isFinite)}}class StageMatrix{static fromNode(t,e){const s=Array(t.stages.length).fill(null).map(()=>Array(t.stages.length).fill(null).map(()=>new Set));t.actions.filter(t=>t.type===ActionType.HORIZONTAL).forEach(e=>{const i=t.stages.findIndex(t=>t.events.includes(e.e1)),n=t.stages.findIndex(t=>t.events.includes(e.e2));console.assert(i>=0&&n>=0,"invalid stages for H action:",t.id,t.stages,e),s[i][n].add(e.e1)}),s[0][t.stages.length-1].add(0);const i=t.stagedEvents,n=e.matrixH[e.matrixH.length-1].filter((t,e)=>!i.has(e)),r=Math.max(0,Math.max(...n)-.01),o=t.actions.filter(t=>t.type===ActionType.HORIZONTAL),a=Object.keys(e.eventMap).map(Number).filter(t=>!o.find(e=>e.e2===t));return t.stages.forEach(i=>{i.events.forEach(n=>{if(n>0){!o.find(t=>t.e1===n)&&e.matrixH[e.matrixH.length-1][n]>=r&&(a.some(t=>e.matrixH[t][n]>0)||s[i.index][t.stages.length-1].add(n))}})}),new StageMatrix({matrix:s})}constructor(t){Object.assign(this,t)}pathOf(t,e,s,i=0){if(this.matrix[t][e].size){const n=[...this.matrix[t][e]][i];if(e===s)return[n];for(let t=e+1;t<=s;++t){const i=this.pathOf(e,t,s);if(i)return[n,...i]}}return null}findDoublePath(t,e){const s=[];for(let i=e;i>=t+1;--i)for(let n=0;ne.forEach(e=>t.forEach(t=>e.delete(t))))}toEquations(t){const e=[];for(let s=1;sr[t]=1),n.forEach(t=>r[t]=-1),e.push(r),this.reducePath(i.length>n.length?i:n)}}}return e}}class PathNode{constructor(t){Object.assign(this,t),console.assert(this.logger,"logger is null:",t)}get actions(){const t=this.parent?this.parent.actions:[];return this.action?[...t,this.action]:t}get id(){return this.actions.map(t=>t.id).sort().join(" ")}get stagedEvents(){const t=new Set;return this.stages&&this.stages.forEach(e=>e.events.forEach(e=>e>=0&&t.add(e))),t}like(t){return t.split(" ").sort().join(" ")===this.id}constructStages(t){this.stages=[{events:[EOM]}];for(const e of this.actions)switch(e.type){case ActionType.PLACE:this.stages.unshift({events:[e.e1]});break;case ActionType.VERTICAL:{const t=this.stages.find(t=>t.events.includes(e.e1)),s=this.stages.find(t=>t.events.includes(e.e2));console.assert(t||s,"invalid V action:",this.stages,e),t&&s?(t.events.push(...s.events),s.events=null,this.stages=this.stages.filter(t=>t.events)):t?s||t.events.push(e.e2):s.events.unshift(e.e1)}break;case ActionType.HORIZONTAL:{const s=this.stages.find(t=>t.events.includes(e.e1)),i=this.stages.find(t=>t.events.includes(e.e2));console.assert(s||i,"invalid H action:",this.stages,e);const n=s=>{console.assert(t.eventMap[s],"invalid event id:",e.id,s,t.eventMap);const i=t.eventMap[s].x,n=this.stages.find(e=>e.events.some(e=>e>0&&t.eventMap[e].x<=i)&&e.events.some(e=>e>0&&t.eventMap[e].x>=i));if(n)n.events.push(s);else{const e={events:[s]},n=this.stages.findIndex(e=>e.events[0]===EOM||t.eventMap[e.events[0]].x>=i);this.stages.splice(n,0,e)}};s||n(e.e1),i||n(e.e2)}}this.stages.forEach((t,e)=>t.index=e)}constructConstraints(t){const e=Object.keys(t.eventMap).length,s=StageMatrix.fromNode(this,t).toEquations(e),i=Array(e).fill(null).map((e,s)=>t.eventMap[s].duration);this.constraints=s.map(t=>t.map((t,e)=>t*i[e]))}inbalancesConstraints(t){console.assert(this.constraints,"constraints not constructed.");const e=Object.keys(t.eventMap).length,s=Array(e).fill(!0),i=Array(e).fill(!1),n=[];for(const t of this.constraints){const e=t.reduce((t,e)=>t+e,0);if(0!==e){const r=e<0?t.map(t=>-t):t;if(r[0]>0)continue;n.push(r),r.forEach((t,e)=>{i[e]=i[e]||t<0,t&&(s[e]=t<0||i[e])})}}return this.constraints.forEach(t=>{0!==t.reduce((t,e)=>t+e,0)||t[0]||t.some((t,e)=>t&&!s[e])&&(t.forEach((t,e)=>t&&(s[e]=!1)),n.push(t))}),{ones:s,inbalances:n}}solveEquations({ones:t,inbalances:e}){if(!e.length)return t.map(()=>1);const s=t.map((t,e)=>({fixed:t,i:e})).filter(({fixed:t})=>!t).map(({i:t})=>t).filter(t=>e.some(e=>0!==e[t]));if(!s.length)return t.map(()=>1);const i=s.map(t=>Math.abs(e.find(e=>0!==e[t])[t])),n=new Map;let r=!1;const o=e.map(t=>({line:t.filter((t,e)=>s.includes(e)),bias:-t.reduce((t,e,i)=>t+(s.includes(i)?0:e),0)})).filter(({line:t,bias:e})=>{if(t.every(t=>0===t))return!1;const s=t.join(",");return n.has(s)?(r=n.get(s)!==e,!1):(n.set(s,e),!0)});if(r)return null;const a=o.slice(0,s.length),c=o.slice(s.length);if(a.lengths===e?1:s===n?-1:0),bias:0,prior:(i[e]+i[n])/DURATION_MULTIPLIER};a.some(t=>t.line[e]&&t.line[n])&&(r.prior-=10),a.some(t=>1===t.line.filter(Number).length&&(t.line[e]||t.line[n]))&&(r.prior+=1),t.push(r)}t.sort((t,e)=>t.prior-e.prior),a.push(...t.slice(0,s.length-a.length))}const h=a.map(({line:t})=>t),l=a.map(({bias:t})=>t),u=matrixInverse(h);if(!u)return this.logger.warn("null invert:",h),null;const d=u.map(t=>t.reduce((t,e,s)=>t+e*l[s],0));if(c.length&&c.some(t=>Math.abs(t.line.reduce((t,e,s)=>t+e*d[s],0))>.001))return null;const f=t.map(()=>1);return s.forEach((t,e)=>f[t]=d[e]),f}optimallySolve(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t),i=e.map((e,s)=>e?-1:roundNumber(t.eventMap[s].shrinkness,.01)).reduce((t,e,s)=>(e>=0&&(t[e]=t[e]||[],t[e].push(s)),t),{}),n=Object.entries(i).sort((t,e)=>Number(e[0])-Number(t[0])).map(t=>t[1]);for(let i=1;i!r.includes(e)),a=this.solveEquations({ones:o,inbalances:s});if(a&&a.every((e,s)=>e<=1&&e>t.eventMap[s].lowWarp))return a}return this.solveEquations({ones:e,inbalances:s})}isConflicted(t){const{ones:e,inbalances:s}=this.inbalancesConstraints(t);for(const i of s){if(i.reduce((s,i,n)=>s+i*(e[n]||i<=0?1:t.eventMap[n].lowWarp),0)>=0)return i.forEach((e,s)=>{e&&(t.eventTendencies[s]+=e>0?1:-1)}),!0}if(!s.length)return!1;const i=this.solveEquations({ones:e,inbalances:s});return!i||!i.every((e,s)=>e>t.eventMap[s].lowWarp&&e<=1)}getSolution(t){const e=e=>t.eventMap[e.e2]?t.eventMap[e.e2].x+.06*Math.abs(t.eventMap[e.e2].x-t.eventMap[e.e1].x):t.eventMap[e.e1].x+1e4,s=this.actions.filter(t=>t.type===ActionType.HORIZONTAL).sort((t,s)=>e(t)-e(s)),i=s.reduce((t,e)=>({...t,[e.e1]:e.e2}),{}),n=new Set([...Object.keys(i)].map(Number));s.forEach(t=>n.delete(t.e2)),this.stages[0].events.forEach(t=>t>0&&n.add(t));let r=[...n].map(t=>{const e=[t];let s=t;for(;i[s]&&(s=i[s],!(s<0||e.includes(s)));)e.push(s);return e});const o=Object.values(t.eventMap).filter(t=>t.id>0).map(t=>({id:t.id,tick:null,endTick:null,tickGroup:null,timeWarp:null})),a=o.filter(t=>r.some(e=>e.includes(t.id))||s.some(e=>[e.e1,e.e2].includes(t.id))).reduce((t,e)=>({...t,[e.id]:e}),{});this.stages.forEach((t,e)=>t.events.forEach(t=>a[t]&&(a[t].tickGroup=e))),this.stages[0].tick=0,this.stages[0].events.forEach(t=>a[t]&&(a[t].tick=0));const c=this.optimallySolve(t);o.forEach(t=>t.timeWarp=floatToTimeWarp(c[t.id]));const h=this.stages.slice(0,this.stages.length-1),l=()=>{if(h.every(t=>Number.isFinite(t.tick)))return!1;let e=!1;return s.forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));Number.isFinite(i.tick)&&!Number.isFinite(n.tick)&&(n.tick=i.tick+fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),n.events.forEach(t=>a[t]&&(a[t].tick=n.tick)),e=!0)}),[...s].reverse().forEach(s=>{const i=this.stages.find(t=>t.events.includes(s.e1)),n=this.stages.find(t=>t.events.includes(s.e2));!Number.isFinite(i.tick)&&Number.isFinite(n.tick)&&(i.tick=n.tick-fractionMul(t.eventMap[s.e1].duration,a[s.e1].timeWarp),i.events.forEach(t=>a[t]&&(a[t].tick=i.tick)),e=!0)}),e};for(;l(););console.assert(h.every(t=>Number.isFinite(t.tick)),"stage ticks not all solved:",this.stages,this.id),o.filter(t=>Number.isFinite(t.tick)).forEach(e=>e.endTick=e.tick+fractionMul(t.eventMap[e.id].duration,e.timeWarp));const u=t.eventMap[0].duration;r.forEach(t=>{const e=t.findIndex(t=>a[t].endTick>u);if(e>=0){t.splice(e,t.length-e).forEach(t=>{a[t].tick=null,a[t].endTick=null})}}),r=r.filter(t=>t.length);const d=Math.max(0,...o.map(t=>t.endTick).filter(Number.isFinite));return this.logger.debug(String.fromCodePoint(127822),this.id,c),{voices:r,events:o,duration:d,actions:this.actions.map(t=>t.id).join(" ")}}deduce(t,e){this.stages||this.constructStages(t);const s=t.actionAccessing.get(this.id)||{times:0};if(++s.times,t.actionAccessing.set(this.id,s),this.constructConstraints(t),this.isConflicted(t))return s.closed=!0,this.logger.info(this.action.id,"❌"),null;if(this.logger.group(this.action&&this.action.id),e.credits>0){if(--e.credits,this.children||this.expand(t),this.children=this.children.filter(e=>!t.actionAccessing.get(e.id)||!t.actionAccessing.get(e.id).closed),this.children.length){const s=e=>e.possibility/((t.actionAccessing.get(e.id)||{times:0}).times+1);this.children.sort((t,e)=>s(e)-s(t));for(const s of this.children){const i=s.deduce(t,e);if(i)return this.logger.groupEnd(),i;if(e.credits<=0)break}}}else this.logger.debug("quota exhausted.");return this.logger.groupEnd(),s.closed=!0,this.getSolution(t)}expand(t){this.constructStages(t);const{eventMap:e,matrixV:s,matrixH:i}=t,n=this.stagedEvents,r=[],o=t=>{if(!this.actions.some(e=>e.id===t.action.id)&&!r.some(e=>e.action.id===t.action.id)){const e=this.stages.find(e=>e.events.includes(t.action.e1)),i=this.stages.find(e=>e.events.includes(t.action.e2));if(e===i||e&&i&&e.index>=i.index)return;if(e&&i)if(t.action.type===ActionType.VERTICAL){if(i.index-e.index>1)return;if(this.actions.some(t=>e.events.includes(t.e1)&&i.events.includes(t.e2)))return}else if(t.action.type===ActionType.HORIZONTAL&&e.index>i.index)return;if(t.action.type===ActionType.HORIZONTAL&&this.actions.some(e=>e.type===ActionType.HORIZONTAL&&(e.e1===t.action.e1||e.e2===t.action.e2||e.e1===t.action.e2&&e.e2===t.action.e1)))return;if(t.action.type===ActionType.VERTICAL){if(e&&(t.possibility=Math.min(t.possibility,...e.events.map(e=>s[t.action.e2][e])),t.possibility<=0))return;if(i&&(t.possibility=Math.min(t.possibility,...i.events.map(e=>s[e][t.action.e1])),t.possibility<=0))return}r.push(t)}};for(const t of n)t<0||(s[t].forEach((e,s)=>{e>0&&t!==s&&o({action:Action.V(s,t),possibility:e})}),s.forEach((e,s)=>{const i=e[t];i>0&&o({action:Action.V(t,s),possibility:i})}),i[t].forEach((e,s)=>{e>0&&o({action:Action.H(s,t),possibility:e})}),i.forEach((s,i)=>{i=i>=Object.keys(e).length?-1:i;const n=s[t];n>0&&o({action:Action.H(t,i),possibility:n})}));r.some(t=>[ActionType.HORIZONTAL,ActionType.PLACE].includes(t.action.type)||!n.has(t.action.e1)||!n.has(t.action.e2))?this.children=r.map(t=>new PathNode({logger:this.logger,parent:this,...t})):this.children=[]}}class Solver{constructor(t,{quota:e=1e3,logger:s=new DummyLogger}={}){this.quota=e,this.logger=s;const i={id:0,x:0,confidence:1,shrinkness:t.measureShrinkness,duration:t.expectedDuration,lowWarp:0};this.events=[i,...t.events.map(t=>({id:t.id,x:t.x,confidence:t.confidence,shrinkness:t.shrinkness,staff:t.staff,duration:t.duration,lowWarp:.5}))],this.eventMap=this.events.reduce((t,e)=>({...t,[e.id]:e}),{}),this.matrixH=t.matrixH,this.matrixV=t.matrixV,this.xSpan=t.endX-Math.min(t.endX-1,...t.events.map(t=>t.x)),this.actionAccessing=new Map}solve(){this.pathRoot=new PathNode({logger:this.logger,action:null}),this.pathRoot.children=this.events.slice(1).map(t=>new PathNode({logger:this.logger,parent:this.pathRoot,action:Action.P(t.id),possibility:this.matrixV[t.id].reduce((t,e)=>t+e,0)}));let t=null;this.logger.groupCollapsed("solve");const e=Array(this.events.length).fill(0),s={credits:this.quota,times:0};for(;s.credits>0;){++s.times;const i={eventMap:this.eventMap,matrixH:this.matrixH,matrixV:this.matrixV,actionAccessing:this.actionAccessing,eventTendencies:e},n=this.pathRoot.deduce(i,s);if(n.credits=this.quota-s.credits,n.times=s.times,this.evaluateSolution(n),this.logger.debug("loss:",n.loss),t=!t||n.losst/s.times)),t}evaluateSolution(t){t.loss=0;const e=t.events.reduce((t,e)=>({...t,[e.id]:{...e,...this.eventMap[e.id]}}),{}),s=t.events.filter(t=>Number.isFinite(t.tick)).map(t=>e[t.id]),i=s.reduce((t,e)=>(t[e.staff]=t[e.staff]||[],t[e.staff].push(e),t),{});Object.values(i).forEach(e=>{e.sort((t,e)=>t.x-e.x).slice(0,e.length-1).forEach((s,i)=>{e[i+1].tick{if(Number.isFinite(s.tick)&&!t.voices.every(t=>!t.includes(s.id))||(t.loss+=100*e[s.id].confidence),s.timeWarp){const{numerator:t,denominator:i}=s.timeWarp,r=e[s.id].shrinkness;n.set(t,Math.max(n.get(t)||0,1-r)),n.set(i,Math.max(n.get(i)||0,1-r))}});const r=reducedFraction(t.duration,this.eventMap[0].duration);n.set(r.numerator,Math.max(n.get(r.numerator)||0,1-this.eventMap[0].shrinkness)),n.set(r.denominator,Math.max(n.get(r.denominator)||0,1-this.eventMap[0].shrinkness));for(const[e,s]of n.entries())e>1&&(t.loss+=Math.log(e)*s);let o=0,a=0;t.voices.forEach(s=>{console.assert(e[s[0]],"invalid voice:",s,Object.keys(e));const i=Math.abs(e[s[0]].tick),n=e[s[s.length-1]].endTick;o+=Math.max(0,i+t.duration-n);let r=null;s.forEach(t=>{const s=e[t];s.staff!==r&&(null!==r&&++a,r=s.staff)})}),t.loss+=10*o/DURATION_MULTIPLIER,t.loss+=5**a-1;const c=[...s].sort((t,e)=>t.x-e.x),h=c.slice(1).map((e,s)=>{const i=c[s],n=e.x-i.x,r=e.tick-i.tick;if(!r)return n/this.xSpan;return(4*Math.atan2(r/t.duration,n/this.xSpan)/Math.PI-1)**2}),l=Math.max(...h,0);t.loss+=l**2,console.assert(t.loss>=0,"Invalid solution loss!!!",t.loss,n,o,a),t.loss<0&&(t.loss=1/0)}}const solveStaffGroup=(t,e)=>{if(!t.events.length)return{events:[],voices:[],duration:0};return new Solver(t,e).solve()};self.onmessage=t=>{const{id:e,args:s}=t.data;try{const t=solveStaffGroup(s[0],s[1]);self.postMessage({id:e,result:t})}catch(t){self.postMessage({id:e,error:t.message})}},console.info("%cstarry-omr%c v1.0.0 2026-04-30T10:34:11.452Z","color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;","color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;")})(); //# sourceMappingURL=worker.js.map diff --git a/backend/omr/dist/worker.js.map b/backend/omr/dist/worker.js.map index 3f1c753dc2cbaf15844f09d183a1d2fd1b6d613f..98ad57dca343484ee7194bcb97c2ff3f0a27b691 100644 --- a/backend/omr/dist/worker.js.map +++ b/backend/omr/dist/worker.js.map @@ -1 +1 @@ -{"version":3,"file":"worker.js","sources":["../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../node_modules/js-sha1/src/sha1.js","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/solveStaffGroup.worker.ts","../src/worker.ts"],"sourcesContent":["var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","/*\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\n *\n * @version 0.6.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function() {\n 'use strict';\n\n var root = typeof window === 'object' ? window : {};\n var NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n }\n var COMMON_JS = !root.JS_SHA1_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Sha1(true).update(message)[outputType]();\n };\n };\n\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Sha1();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('sha1').update(message, 'utf8').digest('hex');\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (message.length === undefined) {\n return method(message);\n }\n return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');\n };\n return nodeMethod;\n };\n\n function Sha1(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0;\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n Sha1.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString = typeof(message) !== 'string';\n if (notString && message.constructor === root.ArrayBuffer) {\n message = new Uint8Array(message);\n }\n var code, index = 0, i, length = message.length || 0, blocks = this.blocks;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if(notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha1.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha1.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4;\n var f, j, t, blocks = this.blocks;\n\n for(j = 16; j < 80; ++j) {\n t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\n blocks[j] = (t << 1) | (t >>> 31);\n }\n\n for(j = 0; j < 20; j += 5) {\n f = (b & c) | ((~b) & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1518500249 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | ((~a) & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1518500249 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | ((~e) & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1518500249 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | ((~d) & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1518500249 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | ((~c) & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1518500249 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 40; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1859775393 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1859775393 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1859775393 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1859775393 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1859775393 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 60; j += 5) {\n f = (b & c) | (b & d) | (c & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 1894007588 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | (a & c) | (b & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 1894007588 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | (e & b) | (a & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 1894007588 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | (d & a) | (e & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 1894007588 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | (c & e) | (d & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 1894007588 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 80; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 899497514 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 899497514 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 899497514 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 899497514 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 899497514 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n };\n\n Sha1.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F];\n };\n\n Sha1.prototype.toString = Sha1.prototype.hex;\n\n Sha1.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return [\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF\n ];\n };\n\n Sha1.prototype.array = Sha1.prototype.digest;\n\n Sha1.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(20);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n return buffer;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha1 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import * as EquationSolver from './equationSolver';\nimport { EquationPolicy } from './spartitoMeasure';\n\nconst solveStaffGroup = (staffGroup: EquationPolicy.StaffGroup, options: EquationPolicy.RegulatorOptions): EquationPolicy.StaffGroupSolution => {\n\tif (!staffGroup.events.length) {\n\t\treturn {\n\t\t\tevents: [],\n\t\t\tvoices: [],\n\t\t\tduration: 0,\n\t\t};\n\t}\n\n\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\treturn solver.solve();\n};\n\n// Plain postMessage worker (Vite-compatible, no workerpool dependency)\nself.onmessage = (e: MessageEvent) => {\n\tconst { id, args } = e.data;\n\ttry {\n\t\tconst result = solveStaffGroup(args[0], args[1]);\n\t\tself.postMessage({ id, result });\n\t} catch (error: any) {\n\t\tself.postMessage({ id, error: error.message });\n\t}\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-23T11:21:11.382Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../../src/starry/solveStaffGroup.worker';\n"],"names":["Sylvester","Matrix","create","elements","setElements","I","n","j","els","i","prototype","dup","this","isSquare","cols","length","toRightTriangular","p","M","np","push","multiplier","determinant","det","isSingular","augment","matrix","T","nj","inverse","divisor","new_element","inverse_elements","matrixInverse","mat","SemanticType","root","window","NODE_JS","JS_SHA1_NO_NODE_JS","process","versions","node","global","COMMON_JS","JS_SHA1_NO_COMMON_JS","module","exports","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","blocks","createOutputMethod","outputType","message","Sha1","update","createMethod","method","nodeWrap","type","crypto","eval","Buffer","nodeMethod","createHash","digest","constructor","ArrayBuffer","Uint8Array","undefined","sharedMemory","h0","h1","h2","h3","h4","block","start","bytes","hBytes","finalized","hashed","first","notString","code","index","charCodeAt","lastByteIndex","hash","finalize","t","a","b","c","d","e","hex","toString","array","arrayBuffer","buffer","dataView","DataView","setUint32","sha1","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","NoteheadS0","NoteheadS1","NoteheadS2","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","f","m","r","s","z","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","roundNumber","x","precision","min","Infinity","Math","max","round","gcd","Number","isInteger","console","error","frac","numerator","denominator","reducedFraction","g","fractionMul","value","fraction","DummyLogger","debug","_","group","groupCollapsed","groupEnd","info","warn","assert","EOM","GREAT_NUMBER","DURATION_MULTIPLIER","floatToFrac","floatToTimeWarp","ActionType","Action","data","Object","assign","P","PLACE","e1","V","e2","order","VERTICAL","H","HORIZONTAL","id","events","filter","isFinite","StageMatrix","fromNode","status","Array","stages","fill","map","Set","actions","action","forEach","stage1","findIndex","stage","includes","stage2","add","stagedEvents","endHs","matrixH","has","endHP","hActions","pendingHeads","keys","eventMap","eid","find","some","pathOf","y","target","ei","size","yy","sub","findDoublePath","s1","s2","paths","path","reducePath","column","set","delete","toEquations","eventCount","equations","path1","path2","equation","PathNode","logger","last","parent","sort","join","like","ids","constructStages","unshift","newStage","si","splice","constructConstraints","factors","duration","constraints","it","inbalancesConstraints","ones","fixed","inbalances","constraint","sum","reduce","solveEquations","xis","items","abs","equationMap","Map","conflicted","lines","line","bias","every","get","squareLines","slice","restLines","candidateLines","i1","i2","prior","sl","c1","c2","invert","solution","row","result","xi","optimallySolve","shrinkMap","shrinkness","groups","entries","p1","p2","pair","released","releasedIds","concat","warps","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","voices","se","voice","values","tick","endTick","tickGroup","timeWarp","estages","solveStages","changed","reverse","event","measureDuration","outEI","String","fromCodePoint","deduce","quota","access","actionAccessing","times","closed","credits","children","expand","possibility","n1","n2","child","matrixV","branches","appendBranch","branch","ps","Solver","env","event0","confidence","measureShrinkness","expectedDuration","staff","xSpan","endX","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","es","partialFrac","weight","log","spaceTime","staffAlters","end","eventsXOrder","tickTwists","dx","dt","atan2","PI","tickTwist","solveStaffGroup","staffGroup","options","EquationSolver.Solver","self","onmessage","args","postMessage"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"worker.js","sources":["../../../node_modules/matrix-inverse/matrix-inverse.js","../../../src/starry/semanticPoint.ts","../../../node_modules/js-sha1/src/sha1.js","../../../src/starry/utils.ts","../../../src/starry/logger.ts","../../../src/starry/equationSolver.ts","../../../src/starry/solveStaffGroup.worker.ts","../src/worker.ts"],"sourcesContent":["var Sylvester = {}\n\nSylvester.Matrix = function () {}\n\nSylvester.Matrix.create = function (elements) {\n var M = new Sylvester.Matrix()\n return M.setElements(elements)\n}\n\nSylvester.Matrix.I = function (n) {\n var els = [],\n i = n,\n j\n while (i--) {\n j = n\n els[i] = []\n while (j--) {\n els[i][j] = i === j ? 1 : 0\n }\n }\n return Sylvester.Matrix.create(els)\n}\n\nSylvester.Matrix.prototype = {\n dup: function () {\n return Sylvester.Matrix.create(this.elements)\n },\n\n isSquare: function () {\n var cols = this.elements.length === 0 ? 0 : this.elements[0].length\n return this.elements.length === cols\n },\n\n toRightTriangular: function () {\n if (this.elements.length === 0) return Sylvester.Matrix.create([])\n var M = this.dup(),\n els\n var n = this.elements.length,\n i,\n j,\n np = this.elements[0].length,\n p\n for (i = 0; i < n; i++) {\n if (M.elements[i][i] === 0) {\n for (j = i + 1; j < n; j++) {\n if (M.elements[j][i] !== 0) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[i][p] + M.elements[j][p])\n }\n M.elements[i] = els\n break\n }\n }\n }\n if (M.elements[i][i] !== 0) {\n for (j = i + 1; j < n; j++) {\n var multiplier = M.elements[j][i] / M.elements[i][i]\n els = []\n for (p = 0; p < np; p++) {\n // Elements with column numbers up to an including the number of the\n // row that we're subtracting can safely be set straight to zero,\n // since that's the point of this routine and it avoids having to\n // loop over and correct rounding errors later\n els.push(\n p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier\n )\n }\n M.elements[j] = els\n }\n }\n }\n return M\n },\n\n determinant: function () {\n if (this.elements.length === 0) {\n return 1\n }\n if (!this.isSquare()) {\n return null\n }\n var M = this.toRightTriangular()\n var det = M.elements[0][0],\n n = M.elements.length\n for (var i = 1; i < n; i++) {\n det = det * M.elements[i][i]\n }\n return det\n },\n\n isSingular: function () {\n return this.isSquare() && this.determinant() === 0\n },\n\n augment: function (matrix) {\n if (this.elements.length === 0) {\n return this.dup()\n }\n var M = matrix.elements || matrix\n if (typeof M[0][0] === 'undefined') {\n M = Sylvester.Matrix.create(M).elements\n }\n var T = this.dup(),\n cols = T.elements[0].length\n var i = T.elements.length,\n nj = M[0].length,\n j\n if (i !== M.length) {\n return null\n }\n while (i--) {\n j = nj\n while (j--) {\n T.elements[i][cols + j] = M[i][j]\n }\n }\n return T\n },\n\n inverse: function () {\n if (this.elements.length === 0) {\n return null\n }\n if (!this.isSquare() || this.isSingular()) {\n return null\n }\n var n = this.elements.length,\n i = n,\n j\n var M = this.augment(Sylvester.Matrix.I(n)).toRightTriangular()\n var np = M.elements[0].length,\n p,\n els,\n divisor\n var inverse_elements = [],\n new_element\n // Sylvester.Matrix is non-singular so there will be no zeros on the\n // diagonal. Cycle through rows from last to first.\n while (i--) {\n // First, normalise diagonal elements to 1\n els = []\n inverse_elements[i] = []\n divisor = M.elements[i][i]\n for (p = 0; p < np; p++) {\n new_element = M.elements[i][p] / divisor\n els.push(new_element)\n // Shuffle off the current row of the right hand side into the results\n // array as it will not be modified by later runs through this loop\n if (p >= n) {\n inverse_elements[i].push(new_element)\n }\n }\n M.elements[i] = els\n // Then, subtract this row from those above it to give the identity matrix\n // on the left hand side\n j = i\n while (j--) {\n els = []\n for (p = 0; p < np; p++) {\n els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i])\n }\n M.elements[j] = els\n }\n }\n return Sylvester.Matrix.create(inverse_elements)\n },\n\n setElements: function (els) {\n var i,\n j,\n elements = els.elements || els\n if (elements[0] && typeof elements[0][0] !== 'undefined') {\n i = elements.length\n this.elements = []\n while (i--) {\n j = elements[i].length\n this.elements[i] = []\n while (j--) {\n this.elements[i][j] = elements[i][j]\n }\n }\n return this\n }\n var n = elements.length\n this.elements = []\n for (i = 0; i < n; i++) {\n this.elements.push([elements[i]])\n }\n return this\n },\n}\n\nmodule.exports = function (elements) {\n const mat = Sylvester.Matrix.create(elements).inverse()\n if (mat !== null) {\n return mat.elements\n } else {\n return null\n }\n}\n","import sha1 from 'js-sha1';\n\nenum SemanticType {\n\t// clefs\n\tClefG = 'ClefG',\n\tClefF = 'ClefF',\n\tClefC = 'ClefC',\n\n\t// noteheads\n\tNoteheadS0 = 'NoteheadS0',\n\tNoteheadS1 = 'NoteheadS1',\n\tNoteheadS2 = 'NoteheadS2',\n\tNoteheadS1stemU = 'NoteheadS1stemU',\n\tNoteheadS1stemD = 'NoteheadS1stemD',\n\tNoteheadS2stemU = 'NoteheadS2stemU',\n\tNoteheadS2stemD = 'NoteheadS2stemD',\n\n\tvline_Stem = 'vline_Stem',\n\n\t// flags\n\tFlag3 = 'Flag3',\n\n\t// beams\n\tBeamLeft = 'BeamLeft',\n\tBeamContinue = 'BeamContinue',\n\tBeamRight = 'BeamRight',\n\n\t// tremolos\n\tTremoloLeft = 'TremoloLeft',\n\tTremoloRight = 'TremoloRight',\n\tTremoloMiddle = 'TremoloMiddle',\n\n\t// dots (duration)\n\tDot = 'Dot',\n\n\t// rests\n\tRest0 = 'Rest0',\n\tRest1 = 'Rest1',\n\tRest2 = 'Rest2',\n\tRest3 = 'Rest3',\n\tRest4 = 'Rest4',\n\tRest5 = 'Rest5',\n\tRest6 = 'Rest6',\n\tRest0W = 'Rest0W', // capital 'R' in lilypond\n\tRestM1 = 'RestM1',\n\n\t// accidentals\n\tAccNatural = 'AccNatural',\n\tAccSharp = 'AccSharp',\n\tAccDoublesharp = 'AccDoublesharp',\n\tAccFlat = 'AccFlat',\n\tAccFlatflat = 'AccFlatflat',\n\n\t// volta\n\tvline_VoltaLeft = 'vline_VoltaLeft',\n\tvline_VoltaRight = 'vline_VoltaRight',\n\tVoltaLeft = 'VoltaLeft',\n\tVoltaRight = 'VoltaRight',\n\n\tVoltaAlternativeBegin = 'VoltaAlternativeBegin',\n\t//VoltaAlternativeEnd\t= \"VoltaAlternativeEnd\",\n\n\t// vertical bars\n\tBarMeasure = 'BarMeasure',\n\tvline_BarMeasure = 'vline_BarMeasure',\n\tvline_BarTerminal = 'vline_BarTerminal',\n\tvline_BarSegment = 'vline_BarSegment',\n\n\t// slur & tie\n\tSlurBegin = 'SlurBegin',\n\tSlurEnd = 'SlurEnd',\n\n\t// time signature\n\tTimesigC44 = 'TimesigC44',\n\tTimesigC22 = 'TimesigC22',\n\tTimesigZero = 'TimesigZero',\n\tTimesigOne = 'TimesigOne',\n\tTimesigTwo = 'TimesigTwo',\n\tTimesigThree = 'TimesigThree',\n\tTimesigFour = 'TimesigFour',\n\tTimesigFive = 'TimesigFive',\n\tTimesigSix = 'TimesigSix',\n\tTimesigSeven = 'TimesigSeven',\n\tTimesigEight = 'TimesigEight',\n\tTimesigNine = 'TimesigNine',\n\n\t// octave shifts\n\tOctaveShift8va = 'OctaveShift8va',\n\tOctaveShift8vb = 'OctaveShift8vb',\n\tOctaveShift8 = 'OctaveShift8',\n\tOctaveShift0 = 'OctaveShift0',\n\n\t// numbers\n\tZero = 'Zero',\n\tOne = 'One',\n\tTwo = 'Two',\n\tThree = 'Three',\n\tFour = 'Four',\n\tFive = 'Five',\n\tSix = 'Six',\n\tSeven = 'Seven',\n\tEight = 'Eight',\n\tNine = 'Nine',\n\n\t// dynamics\n\tf = 'f',\n\tp = 'p',\n\tm = 'm',\n\tn = 'n',\n\tr = 'r',\n\ts = 's',\n\tz = 'z',\n\n\tCrescendoBegin = 'CrescendoBegin',\n\tCrescendoEnd = 'CrescendoEnd',\n\tDecrescendoBegin = 'DecrescendoBegin',\n\tDecrescendoEnd = 'DecrescendoEnd',\n\n\t// scripts\n\tScriptFermata = 'ScriptFermata',\n\tScriptShortFermata = 'ScriptShortFermata',\n\tScriptSforzato = 'ScriptSforzato',\n\tScriptStaccato = 'ScriptStaccato',\n\tScriptStaccatissimo = 'ScriptStaccatissimo',\n\tScriptTurn = 'ScriptTurn',\n\tScriptTrill = 'ScriptTrill',\n\tScriptSegno = 'ScriptSegno',\n\tScriptCoda = 'ScriptCoda',\n\tScriptArpeggio = 'ScriptArpeggio',\n\tScriptPrall = 'ScriptPrall',\n\tScriptMordent = 'ScriptMordent',\n\tScriptMarcato = 'ScriptMarcato',\n\tScriptTenuto = 'ScriptTenuto',\n\tScriptPortato = 'ScriptPortato',\n\n\t// pedal\n\tPedalStar = 'PedalStar',\n\tPedalPed = 'PedalPed',\n\n\t// additional annotation\n\tKeyAcc = 'KeyAcc',\n\tTempoNotehead = 'TempoNotehead',\n\tGraceNotehead = 'GraceNotehead',\n\tSignLined = 'SignLined',\n\tSignInterval = 'SignInterval',\n\n\trect_Text = 'rect_Text',\n\trect_Lyric = 'rect_Lyric',\n}\n\nconst glyphSemanticMapping: { [key: string]: string } = {\n\t'rests.1': 'Rest1',\n\t'rests.0o': 'Rest0',\n\t'rests.1o': 'Rest1',\n\t'rests.M1': 'RestM1',\n\t'rests.2': 'Rest2',\n\t'rests.3': 'Rest3',\n\t'rests.4': 'Rest4',\n\t'rests.5': 'Rest5',\n\t'rests.6': 'Rest6',\n\t'accidentals.sharp': 'AccSharp',\n\t'accidentals.doublesharp': 'AccDoublesharp',\n\t'accidentals.natural': 'AccNatural',\n\t'accidentals.flat': 'AccFlat',\n\t'accidentals.flatflat': 'AccFlatflat',\n\t'dots.dot': 'Dot',\n\t'scripts.ufermata': 'ScriptFermata',\n\t'scripts.dfermata': 'ScriptFermata',\n\t'scripts.ushortfermata': 'ScriptShortFermata',\n\t'scripts.dshortfermata': 'ScriptShortFermata',\n\t'scripts.staccato': 'ScriptStaccato',\n\t'scripts.ustaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.dstaccatissimo': 'ScriptStaccatissimo',\n\t'scripts.turn': 'ScriptTurn',\n\t'scripts.trill': 'ScriptTrill',\n\t'scripts.segno': 'ScriptSegno',\n\t'scripts.coda': 'ScriptCoda',\n\t'scripts.arpeggio': 'ScriptArpeggio',\n\t'scripts.prall': 'ScriptPrall',\n\t'scripts.mordent': 'ScriptMordent',\n\t'scripts.umarcato': 'ScriptMarcato',\n\t'scripts.dmarcato': 'ScriptMarcato',\n\t'scripts.uportato': 'ScriptPortato',\n\t'scripts.dportato': 'ScriptPortato',\n\t'scripts.tenuto': 'ScriptTenuto',\n\t'scripts.sforzato': 'ScriptSforzato',\n\t'clefs.C': 'ClefC',\n\t'clefs.F': 'ClefF',\n\t'clefs.G': 'ClefG',\n\t'clefs.F_change': 'ClefF',\n\t'clefs.G_change': 'ClefG',\n\t'timesig.C44': 'TimesigC44',\n\t'timesig.C22': 'TimesigC22',\n\t'pedal.*': 'PedalStar',\n\t'pedal.Ped': 'PedalPed',\n\t'noteheads.s0': 'NoteheadS0',\n\t'noteheads.s1': 'NoteheadS1',\n\t'noteheads.s2': 'NoteheadS2',\n\tf: 'f',\n\tm: 'm',\n\tp: 'p',\n\tr: 'r',\n\ts: 's',\n\tz: 'z',\n};\n\nconst semanticPriorities: { [key: string]: number } = {\n\tClefG: 0,\n\tClefF: 0,\n\tTimesigFour: 0,\n\tTimesigThree: 0,\n\tTimesigTwo: 0,\n\tNoteheadS0: 0,\n\tNoteheadS1: 0,\n\tNoteheadS2: 0,\n\tDot: 0,\n\tvline_BarMeasure: 0,\n\tvline_Stem: 0,\n\tFlag3: 0,\n\n\tTimesigC44: 1,\n\tTimesigC22: 1,\n\tTimesigEight: 1,\n\tTimesigSix: 1,\n\tAccNatural: 1,\n\tAccSharp: 1,\n\tAccFlat: 1,\n\tKeyAcc: 1,\n\tRest0: 1,\n\tRest1: 1,\n\tRest2: 1,\n\tRest3: 1,\n\tRest4: 1,\n\tOctaveShift8: 1,\n\tOctaveShift0: 1,\n\n\tAccDoublesharp: 2,\n\tAccFlatflat: 2,\n\tTimesigOne: 2,\n\tTimesigNine: 2,\n\tRest5: 2,\n\tRest6: 2,\n\tSlurBegin: 2,\n\tSlurEnd: 2,\n\tVoltaLeft: 2,\n\tVoltaRight: 2,\n\t//VoltaAlternativeBegin: 2,\n\tvline_BarTerminal: 2,\n\tvline_BarSegment: 2,\n\tTempoNotehead: 2,\n\tGraceNotehead: 2,\n\tSignLined: 2,\n\tSignInterval: 2,\n\tBeamLeft: 2,\n\tBeamRight: 2,\n\tBeamContinue: 2,\n\tTremoloLeft: 2,\n\tTremoloRight: 2,\n\tTremoloMiddle: 2,\n\tStemTip: 2,\n\tStemHead: 2,\n\n\t//Rest0W: 3,\n\tf: 3,\n\tp: 3,\n\tm: 3,\n\tScriptFermata: 3,\n\tScriptSforzato: 3,\n\tScriptStaccato: 3,\n\tScriptStaccatissimo: 3,\n\tScriptTurn: 3,\n\tScriptTrill: 3,\n\tScriptSegno: 3,\n\tScriptCoda: 3,\n\tScriptArpeggio: 3,\n\tScriptPrall: 3,\n\tScriptMordent: 3,\n\tScriptTenuto: 3,\n\tPedalStar: 3,\n\tPedalPed: 3,\n\tTimesigFive: 3,\n\tTimesigSeven: 3,\n\tTimesigZero: 3,\n\tOne: 3,\n\tTwo: 3,\n\tThree: 3,\n\tFour: 3,\n\tFive: 3,\n\trect_Text: 3,\n\trect_Lyric: 3,\n\tCrescendoBegin: 3,\n\tCrescendoEnd: 3,\n\tDecrescendoBegin: 3,\n\tDecrescendoEnd: 3,\n\n\tRestM1: 4,\n\tClefC: 4,\n\tScriptShortFermata: 4,\n\tScriptMarcato: 4,\n\tScriptPortato: 4,\n\ts: 4,\n\tr: 4,\n\tz: 4,\n\tZero: 4,\n\tSix: 4,\n\tSeven: 4,\n\tEight: 4,\n\tNine: 4,\n};\n\ninterface Position {\n\tx?: number;\n\ty?: number;\n}\n\nconst NOTEHEAD_WIDTHS = {\n\tNoteheadS0: 0.913 * 2,\n\tNoteheadS1: 0.632 * 2,\n\tNoteheadS2: 0.599 * 2,\n};\n\nconst glyphCenters: { [key: string]: Position } = {\n\t//\"clefs.C\": { x: 1.3 },\n\t'clefs.F': { x: 1.06 },\n\t'clefs.G': { x: 1.3 },\n\t'clefs.F_change': { x: 0.87 },\n\t'clefs.G_change': { x: 1.07 },\n\t'timesig.C44': { x: 0.9 },\n\t'timesig.C22': { x: 0.9 },\n\tzero: { x: 0.7, y: -1 },\n\tone: { x: 0.7, y: -1 },\n\ttwo: { x: 0.7, y: -1 },\n\tthree: { x: 0.7, y: -1 },\n\tfour: { x: 0.7, y: -1 },\n\tfive: { x: 0.7, y: -1 },\n\tsix: { x: 0.7, y: -1 },\n\tseven: { x: 0.7, y: -1 },\n\teight: { x: 0.7, y: -1 },\n\tnine: { x: 0.7, y: -1 },\n\t'accidentals.sharp': { x: 0.55 },\n\t'accidentals.doublesharp': { x: 0.5 },\n\t'accidentals.natural': { x: 0.3 },\n\t'accidentals.flat': { x: 0.3 },\n\t'accidentals.flatflat': { x: 0.5 },\n\t'noteheads.s0': { x: NOTEHEAD_WIDTHS.NoteheadS0 / 2 },\n\t'noteheads.s1': { x: NOTEHEAD_WIDTHS.NoteheadS1 / 2 },\n\t'noteheads.s2': { x: NOTEHEAD_WIDTHS.NoteheadS2 / 2 },\n\t'rests.0': { x: 0.75, y: 1 },\n\t'rests.1': { x: 0.75 },\n\t'rests.0o': { x: 0.75, y: 1 },\n\t'rests.1o': { x: 0.75 },\n\t'rests.M1': { x: 0.75, y: 1 },\n\t'rests.2': { x: 0.5 },\n\t'rests.3': { x: 0.5 },\n\t'rests.4': { x: 0.5 },\n\t'rests.5': { x: 0.5 },\n\t'rests.6': { x: 0.5 },\n\tf: { x: 0.6, y: -0.5 },\n\tm: { x: 0.9, y: -0.5 },\n\tp: { x: 0.5, y: -0.5 },\n\tr: { x: 0.5, y: -0.5 },\n\ts: { x: 0.5, y: -0.5 },\n\tz: { x: 0.5, y: -0.5 },\n\t'scripts.trill': { y: -0.5 },\n\t'scripts.segno': { x: 0, y: 0 },\n\t'scripts.coda': { x: 0, y: 0 },\n\t'scripts.arpeggio': { x: 0.5, y: -0.5 },\n\t'pedal.*': { x: 0.78, y: -0.78 },\n\t'pedal.Ped': { x: 1.6, y: -0.7 },\n};\n\ninterface Point {\n\t// in staff unit coordinates\n\tx: number;\n\ty: number;\n\n\tpivotX?: number;\n\n\t// for prediction\n\tconfidence?: number;\n\n\t// sheet token index in page\n\tindex?: number;\n\ttag?: string;\n\n\textension?: {\n\t\ty1?: number;\n\t\ty2?: number;\n\n\t\thref?: string;\n\t\twidth?: number;\n\t\theight?: number;\n\n\t\ttext?: string;\n\t\ttheta?: number;\n\t\ttype?: string;\n\t\ttextFeature?: Record;\n\t};\n}\n\ninterface SemanticPoint extends Point {\n\tid?: string;\n\tsemantic: SemanticType;\n}\n\nconst ONE_D_SEMANTICS = [\n\t'OctaveShift8va',\n\t'OctaveShift8vb',\n\t'OctaveShift8',\n\t'OctaveShift0',\n\t'vline_VoltaLeft',\n\t'vline_VoltaRight',\n\t'VoltaAlternativeBegin',\n\t'vline_BarMeasure',\n\t'vline_BarTerminal',\n\t'vline_BarSegment',\n];\n\nconst SYSTEM_SEMANTIC_TYPES = [\n\tSemanticType.BarMeasure,\n\tSemanticType.vline_BarMeasure,\n\tSemanticType.vline_BarTerminal,\n\tSemanticType.vline_BarSegment,\n\tSemanticType.vline_VoltaLeft,\n\tSemanticType.vline_VoltaRight,\n\tSemanticType.VoltaAlternativeBegin,\n];\n\nconst st = SemanticType;\nconst CONFLICTION_GROUPS = [\n\t[st.NoteheadS0, st.NoteheadS1, st.NoteheadS2],\n\t[st.Zero, st.One, st.Two, st.Three, st.Four, st.Five, st.Six, st.Seven, st.Eight, st.Nine, st.ScriptStaccatissimo],\n\t[\n\t\tst.TimesigZero,\n\t\tst.TimesigOne,\n\t\tst.TimesigTwo,\n\t\tst.TimesigThree,\n\t\tst.TimesigFour,\n\t\tst.TimesigFive,\n\t\tst.TimesigSix,\n\t\tst.TimesigSeven,\n\t\tst.TimesigEight,\n\t\tst.TimesigNine,\n\t],\n\t[st.Rest0, st.Rest1, st.Rest2, st.Rest3, st.Rest4, st.Rest5, st.Rest6, st.Rest0W, st.RestM1],\n\t[st.SignInterval, st.SignLined],\n\t[st.BeamLeft, st.BeamContinue, st.BeamRight],\n];\n\nconst STAMP_SEMANTICS = [\n\tst.ClefG,\n\tst.ClefF,\n\tst.ClefC,\n\tst.NoteheadS0,\n\tst.NoteheadS1,\n\tst.NoteheadS2,\n\tst.Dot,\n\tst.Rest0,\n\tst.Rest1,\n\tst.Rest2,\n\tst.Rest3,\n\tst.Rest4,\n\tst.Rest5,\n\tst.Rest6,\n\tst.RestM1,\n\tst.AccNatural,\n\tst.AccSharp,\n\tst.AccDoublesharp,\n\tst.AccFlat,\n\tst.AccFlatflat,\n\tst.TimesigC44,\n\tst.TimesigC22,\n\tst.TimesigZero,\n\tst.TimesigOne,\n\tst.TimesigTwo,\n\tst.TimesigThree,\n\tst.TimesigFour,\n\tst.TimesigFive,\n\tst.TimesigSix,\n\tst.TimesigSeven,\n\tst.TimesigEight,\n\tst.TimesigNine,\n\tst.One,\n\tst.Two,\n\tst.Three,\n\tst.Four,\n\tst.Five,\n\tst.OctaveShift8,\n\t//st.OctaveShift15,\n\tst.OctaveShift0,\n\tst.f,\n\tst.p,\n\tst.m,\n\tst.n,\n\tst.r,\n\tst.s,\n\tst.z,\n\tst.ScriptFermata,\n\tst.ScriptShortFermata,\n\tst.ScriptSforzato,\n\tst.ScriptStaccato,\n\tst.ScriptStaccatissimo,\n\tst.ScriptTurn,\n\tst.ScriptTrill,\n\tst.ScriptSegno,\n\tst.ScriptCoda,\n\tst.ScriptArpeggio,\n\tst.ScriptPrall,\n\tst.ScriptMordent,\n\tst.ScriptMarcato,\n\tst.ScriptTenuto,\n\tst.ScriptPortato,\n\tst.PedalStar,\n\tst.PedalPed,\n];\n\n// [cx, cy, width, height]\nconst STAMP_RECTS = {\n\tClefG: [-0.0625, -1.125, 3.6, 8.6],\n\tClefF: [0.25, 0.5625, 3.6, 3.8],\n\tClefC: [0.25, 0, 3.25, 4.5],\n\tNoteheadS0: [0.0625, 0, 2.55, 1.4],\n\tNoteheadS1: [0.0625, 0, 1.8, 1.4],\n\tNoteheadS2: [0.0625, -0.0625, 1.65, 1.35],\n\tDot: [0.25, 0, 0.6, 0.6],\n\tRest0: [0, -0.75, 3.25, 0.9],\n\tRest1: [0, -0.25, 3.25, 0.9],\n\tRest2: [-0.0625, -0.1875, 1.6, 3.375],\n\tRest3: [0, 0.0625, 1.2, 2.25],\n\tRest4: [0.0625, 0.5625, 1.65, 3.375],\n\tRest5: [0.0625, 0.0625, 1.95, 4.375],\n\tRest6: [0.0625, 0.5625, 1.95, 5.375],\n\tRestM1: [-0.4375, -1.5, 0.75, 1.2],\n\tAccNatural: [0, 0, 0.9, 3.5],\n\tAccSharp: [0, 0, 1.5, 3.5],\n\tAccDoublesharp: [0, 0, 1.5, 1.5],\n\tAccFlat: [0, -0.5625, 1.2, 3.125],\n\tAccFlatflat: [0.1875, -0.5625, 1.95, 3.125],\n\tTimesigC44: [-0.0625, 0, 2.25, 2.3],\n\tTimesigC22: [-0.0625, 0, 2.25, 3.2],\n\tTimesigZero: [0, 0, 1.8, 2.2],\n\tTimesigOne: [-0.125, 0, 1.5, 2.2],\n\tTimesigTwo: [0, 0, 2.2, 2.2],\n\tTimesigThree: [-0.0625, 0, 1.9, 2.4],\n\tTimesigFour: [0.0625, 0, 1.95, 2.2],\n\tTimesigFive: [0, 0, 1.8, 2.3],\n\tTimesigSix: [0, 0, 2.0, 2.4],\n\tTimesigSeven: [0, 0, 1.8, 2.2],\n\tTimesigEight: [0, 0, 1.9, 2.2],\n\tTimesigNine: [0, 0, 1.9, 2.2],\n\tOne: [-0.0625, 0, 0.75, 1.6],\n\tTwo: [0, 0, 1.2, 1.6],\n\tThree: [0, 0, 1.2, 1.6],\n\tFour: [0, 0, 1.2, 1.6],\n\tFive: [0, 0, 1.2, 1.6],\n\tOctaveShift8: [2.125, -0.1875, 4.75, 3.6],\n\tOctaveShift0: [-0.4, 0, 1.8, 4.2],\n\tf: [0.0625, -0.125, 2.55, 3],\n\tp: [-0.0625, 0.25, 2.55, 2.1],\n\tm: [-0.125, -0.0625, 2.4, 1.35],\n\tn: [-0.3125, -0.0625, 1.95, 1.35],\n\tr: [0, -0.125, 1.5, 1.5],\n\ts: [0, -0.0625, 1.2, 1.35],\n\tz: [0.0625, 0, 1.35, 1.5],\n\tScriptFermata: [0, 0, 3.25, 3.9],\n\tScriptShortFermata: [0, 0, 2.4, 4.95],\n\tScriptSforzato: [-0.0625, 0, 2.5, 1.2],\n\tScriptStaccato: [0, -0.0625, 0.6, 0.45],\n\tScriptStaccatissimo: [0, 0, 1.2, 2.6],\n\tScriptTurn: [0, 0, 2.7, 1.5],\n\tScriptTrill: [-0.125, -0.5, 3, 2.7],\n\tScriptSegno: [0, 0, 2.4, 3.5],\n\tScriptCoda: [0, 0, 2.7, 3.25],\n\tScriptArpeggio: [-0.0625, 0, 1.05, 1.8],\n\tScriptPrall: [0, 0, 2.4, 1.2],\n\tScriptMordent: [0, 0, 2.4, 1.5],\n\tScriptMarcato: [0, 0, 1.2, 2.475],\n\tScriptTenuto: [0, -0.0625, 1.5, 0.15],\n\tScriptPortato: [0, 0, 1.5, 1.65],\n\tPedalStar: [0, 0, 3.2, 3.2],\n\tPedalPed: [0, -0.25, 4.7, 2.4],\n};\n\nconst hashSemanticPoint = (systemIndex: number, staffIndex: number, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x * 10);\n\tconst y = Math.round(point.y * 10);\n\tconst source = `${systemIndex}|${staffIndex}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nconst hashPageSemanticPoint = (pageName: string, point: SemanticPoint): string => {\n\tconst x = Math.round(point.x);\n\tconst y = Math.round(point.y);\n\tconst source = `p-${pageName}|${point.semantic}|${x}|${y}`;\n\tconst hash = (sha1 as any).array(source).slice(12); // clip to 12 bytes\n\tconst id = (globalThis as any).btoa(String.fromCharCode(...hash)).substring(0, 11);\n\tpoint.id = id;\n\n\treturn id;\n};\n\nexport {\n\tSemanticType,\n\tglyphSemanticMapping,\n\tsemanticPriorities,\n\tPoint,\n\tSemanticPoint,\n\tNOTEHEAD_WIDTHS,\n\tglyphCenters,\n\tONE_D_SEMANTICS,\n\tSYSTEM_SEMANTIC_TYPES,\n\tCONFLICTION_GROUPS,\n\tSTAMP_SEMANTICS,\n\tSTAMP_RECTS,\n\thashSemanticPoint,\n\thashPageSemanticPoint,\n};\n","/*\n * [js-sha1]{@link https://github.com/emn178/js-sha1}\n *\n * @version 0.6.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function() {\n 'use strict';\n\n var root = typeof window === 'object' ? window : {};\n var NODE_JS = !root.JS_SHA1_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n }\n var COMMON_JS = !root.JS_SHA1_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n var createOutputMethod = function (outputType) {\n return function (message) {\n return new Sha1(true).update(message)[outputType]();\n };\n };\n\n var createMethod = function () {\n var method = createOutputMethod('hex');\n if (NODE_JS) {\n method = nodeWrap(method);\n }\n method.create = function () {\n return new Sha1();\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type);\n }\n return method;\n };\n\n var nodeWrap = function (method) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash('sha1').update(message, 'utf8').digest('hex');\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (message.length === undefined) {\n return method(message);\n }\n return crypto.createHash('sha1').update(new Buffer(message)).digest('hex');\n };\n return nodeMethod;\n };\n\n function Sha1(sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0;\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n Sha1.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString = typeof(message) !== 'string';\n if (notString && message.constructor === root.ArrayBuffer) {\n message = new Uint8Array(message);\n }\n var code, index = 0, i, length = message.length || 0, blocks = this.blocks;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if(notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha1.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha1.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4;\n var f, j, t, blocks = this.blocks;\n\n for(j = 16; j < 80; ++j) {\n t = blocks[j - 3] ^ blocks[j - 8] ^ blocks[j - 14] ^ blocks[j - 16];\n blocks[j] = (t << 1) | (t >>> 31);\n }\n\n for(j = 0; j < 20; j += 5) {\n f = (b & c) | ((~b) & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1518500249 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | ((~a) & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1518500249 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | ((~e) & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1518500249 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | ((~d) & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1518500249 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | ((~c) & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1518500249 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 40; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e + 1859775393 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d + 1859775393 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c + 1859775393 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b + 1859775393 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a + 1859775393 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 60; j += 5) {\n f = (b & c) | (b & d) | (c & d);\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 1894007588 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = (a & b) | (a & c) | (b & c);\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 1894007588 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = (e & a) | (e & b) | (a & b);\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 1894007588 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = (d & e) | (d & a) | (e & a);\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 1894007588 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = (c & d) | (c & e) | (d & e);\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 1894007588 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n for(; j < 80; j += 5) {\n f = b ^ c ^ d;\n t = (a << 5) | (a >>> 27);\n e = t + f + e - 899497514 + blocks[j] << 0;\n b = (b << 30) | (b >>> 2);\n\n f = a ^ b ^ c;\n t = (e << 5) | (e >>> 27);\n d = t + f + d - 899497514 + blocks[j + 1] << 0;\n a = (a << 30) | (a >>> 2);\n\n f = e ^ a ^ b;\n t = (d << 5) | (d >>> 27);\n c = t + f + c - 899497514 + blocks[j + 2] << 0;\n e = (e << 30) | (e >>> 2);\n\n f = d ^ e ^ a;\n t = (c << 5) | (c >>> 27);\n b = t + f + b - 899497514 + blocks[j + 3] << 0;\n d = (d << 30) | (d >>> 2);\n\n f = c ^ d ^ e;\n t = (b << 5) | (b >>> 27);\n a = t + f + a - 899497514 + blocks[j + 4] << 0;\n c = (c << 30) | (c >>> 2);\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n };\n\n Sha1.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F];\n };\n\n Sha1.prototype.toString = Sha1.prototype.hex;\n\n Sha1.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4;\n\n return [\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF\n ];\n };\n\n Sha1.prototype.array = Sha1.prototype.digest;\n\n Sha1.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(20);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n return buffer;\n };\n\n var exports = createMethod();\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha1 = exports;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import { Fraction, Pitch, Matrix2x3 } from './interfaces';\nimport { SemanticPoint, CONFLICTION_GROUPS } from './semanticPoint';\n\ntype Point2D = { x: number; y: number };\ntype PointSegment = Point2D[];\n\nconst POINT_CONFLICTION_DISTANCE = 0.4;\n\nconst roundNumber = (x: number, precision: number, min = -Infinity): number => Math.max(Math.round(x / precision) * precision, min);\n\nconst distance2D = (p1: Point2D, p2: Point2D): number => {\n\tconst dx = p1.x - p2.x;\n\tconst dy = p1.y - p2.y;\n\n\treturn Math.sqrt(dx * dx + dy * dy);\n};\n\nconst trans23 = (point: Point2D, matrix: Matrix2x3): Point2D => ({\n\tx: matrix[0] * point.x + matrix[2] * point.y + matrix[4],\n\ty: matrix[1] * point.x + matrix[3] * point.y + matrix[5],\n});\n\nconst gcd = (a: number, b: number): number => {\n\tif (!(Number.isInteger(a) && Number.isInteger(b))) {\n\t\tconsole.error('non-integer gcd:', a, b);\n\t\treturn 1;\n\t}\n\n\treturn b === 0 ? a : gcd(b, a % b);\n};\n\nconst frac = (numerator: number, denominator: number): Fraction => ({ numerator, denominator });\n\nconst reducedFraction = (n: number, d: number): Fraction => {\n\tn = Math.round(n);\n\td = Math.round(d);\n\n\tconst g = n !== 0 ? gcd(n, d) : d;\n\n\treturn frac(n / g, d / g);\n};\n\nconst printFraction = (f: Fraction): string => `${f.numerator}/${f.denominator}`;\n\nconst fractionMul = (value: number, fraction: Fraction): number => (fraction ? (value * fraction.numerator) / fraction.denominator : value);\n\nconst segmentPoints = (points: Point2D[], axis: 'x' | 'y'): PointSegment[] => {\n\tconst sorted = [...points].sort((p1, p2) => p1[axis] - p2[axis]);\n\n\tlet seg: Point2D[] = null;\n\tlet lastP = null;\n\n\treturn sorted.reduce((segments, p, i) => {\n\t\tif (!lastP) {\n\t\t\tlastP = p;\n\t\t\tseg = [p];\n\t\t} else {\n\t\t\tif (p[axis] - lastP[axis] < POINT_CONFLICTION_DISTANCE) seg.push(p);\n\t\t\telse {\n\t\t\t\tif (seg.length > 1) segments.push(seg);\n\t\t\t\tlastP = p;\n\t\t\t\tseg = [p];\n\t\t\t}\n\t\t}\n\n\t\tif (seg.length > 1 && i === sorted.length - 1) segments.push(seg);\n\n\t\treturn segments;\n\t}, []);\n};\n\nconst filterWeekPoints = (points: SemanticPoint[]): SemanticPoint[] => {\n\t//console.log(\"filterWeekPoints:\", points.map(p => `${p.semantic}, ${p.x}, ${p.y}`));\n\t//console.table(points.map(p => ({ ...p })));\n\n\tif (points.length <= 1) return [];\n\n\tlet rests = points.slice(1);\n\tconst group = CONFLICTION_GROUPS.find((group) => group.includes(points[0].semantic));\n\tif (!group) return filterWeekPoints(rests);\n\n\tconst weeks = rests.filter((p) => group.includes(p.semantic));\n\trests = rests.filter((p) => !group.includes(p.semantic));\n\n\treturn [...weeks, ...filterWeekPoints(rests)];\n};\n\nconst solveOverlapping = (points: SemanticPoint[]): SemanticPoint[] => {\n\tconst pset = new Set(points);\n\n\tconst xClusters = segmentPoints(points, 'x');\n\tconst clusters: SemanticPoint[][] = [].concat(...xClusters.map((c) => segmentPoints(c, 'y')));\n\tclusters.forEach((ps) => ps.sort((p1, p2) => p2.confidence - p1.confidence));\n\n\tclusters.forEach((ps) => {\n\t\tfilterWeekPoints(ps).forEach((p) => pset.delete(p));\n\t});\n\n\treturn Array.from(pset);\n};\n\nconst GROUP_N_TO_PITCH = [0, 2, 4, 5, 7, 9, 11];\nconst MIDDLE_C = 60;\n\nconst mod7 = (x) => {\n\tlet y = x % 7;\n\twhile (y < 0) y += 7;\n\n\treturn y;\n};\n\nconst mod12 = (x) => {\n\tlet y = x % 12;\n\twhile (y < 0) y += 12;\n\n\treturn y;\n};\n\nconst noteToPitch = ({ note, alter }: Pitch): number => {\n\tconst group = Math.floor(note / 7);\n\tconst gn = mod7(note);\n\n\treturn MIDDLE_C + group * 12 + GROUP_N_TO_PITCH[gn] + alter;\n};\n\nconst argmax = (data: number[]): number => {\n\tconst max = Math.max(...data);\n\n\treturn data.indexOf(max);\n};\n\nexport {\n\tPoint2D,\n\troundNumber,\n\tdistance2D,\n\ttrans23,\n\tsolveOverlapping,\n\tgcd,\n\tfrac,\n\treducedFraction,\n\tprintFraction,\n\tfractionMul,\n\tGROUP_N_TO_PITCH,\n\tMIDDLE_C,\n\tmod7,\n\tmod12,\n\tnoteToPitch,\n\targmax,\n};\n","interface Logger {\n\tdebug(message?: any, ...optionalParams: any[]): void;\n\tinfo(message?: any, ...optionalParams: any[]): void;\n\twarn(message?: any, ...optionalParams: any[]): void;\n\tgroup(...label: any[]): void;\n\tgroupCollapsed(...label: any[]): void;\n\tgroupEnd(): void;\n\tassert(expr: boolean, ...optionalParams: any[]): void;\n}\n\nclass DummyLogger implements Logger {\n\tdebug(..._: any[]): void {}\n\tgroup(..._: any[]): void {}\n\tgroupCollapsed(..._: any[]): void {}\n\tgroupEnd(): void {}\n\tinfo(..._: any[]): void {}\n\twarn(..._: any[]): void {}\n\tassert(..._: any[]): void {}\n}\n\nexport { Logger, DummyLogger };\n","import matrixInverse from 'matrix-inverse';\n\nimport { Fraction } from './interfaces';\nimport { fractionMul, reducedFraction, roundNumber } from './utils';\nimport { Logger, DummyLogger } from './logger';\n\ntype Matrix = number[][];\ntype EventID = number;\ntype Time = number;\ntype EventSet = Set;\ntype Equation = number[];\n\nconst EOM = -1; // end event id of measure\n\n//const GREAT_NUMBER = 16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 * 23;\nconst GREAT_NUMBER = 1920;\n\nconst DURATION_MULTIPLIER = 128 * 3 * 5 * 7 * 11 * 13;\n\nconst floatToFrac = (x: number): Fraction => {\n\tconst n = Math.round(x * GREAT_NUMBER);\n\n\treturn reducedFraction(n, GREAT_NUMBER);\n};\n\nconst floatToTimeWarp = (x: number): Fraction => {\n\tif (x === 1) return null;\n\n\treturn floatToFrac(x);\n};\n\ninterface Stage {\n\tevents: EventID[];\n\tindex?: number;\n\ttick?: Time;\n}\n\nenum ActionType {\n\tPLACE,\n\tVERTICAL,\n\tHORIZONTAL,\n}\n\nclass Action {\n\ttype: ActionType;\n\te1: EventID;\n\te2?: EventID;\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic P(e: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.PLACE,\n\t\t\te1: e,\n\t\t});\n\t}\n\n\tstatic V(e1: EventID, e2: EventID, order: number = 1): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.VERTICAL,\n\t\t\te1: order > 0 ? e1 : e2,\n\t\t\te2: order > 0 ? e2 : e1,\n\t\t});\n\t}\n\n\tstatic H(e1: EventID, e2: EventID): Action {\n\t\treturn new Action({\n\t\t\ttype: ActionType.HORIZONTAL,\n\t\t\te1,\n\t\t\te2,\n\t\t});\n\t}\n\n\tget id(): string {\n\t\tswitch (this.type) {\n\t\t\tcase ActionType.PLACE:\n\t\t\t\treturn this.e1.toString();\n\n\t\t\tcase ActionType.VERTICAL:\n\t\t\t\treturn `${this.e1}|${this.e2}`;\n\n\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\treturn `${this.e1}-${this.e2 >= 0 ? this.e2 : '.'}`;\n\t\t}\n\t}\n\n\tget events(): EventID[] {\n\t\treturn [this.e1, this.e2].filter(Number.isFinite);\n\t}\n}\n\ninterface Quota {\n\tcredits: number;\n}\n\ninterface BasicEvent {\n\tid: EventID;\n\tconfidence: number;\n\tshrinkness: number; // the possibility of time warp\n\tx: number;\n\tstaff?: number;\n\tduration: Time;\n}\n\ninterface Event extends BasicEvent {\n\tlowWarp: number;\n}\n\ninterface EventResult {\n\tid: EventID;\n\ttick: Time;\n\tendTick: Time;\n\ttickGroup: number;\n\ttimeWarp?: Fraction;\n}\n\ninterface Environment {\n\tevents: BasicEvent[];\n\texpectedDuration: Time;\n\tmeasureShrinkness: number;\n\tendX: number;\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n}\n\ninterface Solution {\n\tevents: EventResult[];\n\tvoices: EventID[][];\n\tduration: number;\n\n\tloss?: number;\n\tactions?: string;\n\tcredits?: number;\n\ttimes?: number;\n}\n\ninterface Status {\n\tactionAccessing: Map;\n\teventMap: { [id: number]: Event };\n\teventTendencies: number[];\n\tmatrixH: Matrix; // matrix N+1 x N\t\t[right][left]\n\tmatrixV: Matrix; // matrix N x N\n}\n\ninterface NodeBranch {\n\taction: Action;\n\tpossibility: number;\n}\n\ntype Path = EventID[];\n\ninterface InbalanceEquations {\n\tones: boolean[];\n\tinbalances: Equation[];\n}\n\ninterface SolverOptions {\n\tquota?: number;\n\tlogger?: Logger;\n}\n\nclass StageMatrix {\n\tmatrix: EventSet[][];\n\n\tstatic fromNode(node: PathNode, status: Status): StageMatrix {\n\t\tconst matrix = Array(node.stages.length)\n\t\t\t.fill(null)\n\t\t\t.map(() =>\n\t\t\t\tArray(node.stages.length)\n\t\t\t\t\t.fill(null)\n\t\t\t\t\t.map(() => new Set())\n\t\t\t);\n\n\t\tnode.actions\n\t\t\t.filter((action) => action.type === ActionType.HORIZONTAL)\n\t\t\t.forEach((action) => {\n\t\t\t\tconst stage1 = node.stages.findIndex((stage) => stage.events.includes(action.e1));\n\t\t\t\tconst stage2 = node.stages.findIndex((stage) => stage.events.includes(action.e2));\n\t\t\t\tconsole.assert(stage1 >= 0 && stage2 >= 0, 'invalid stages for H action:', node.id, node.stages, action);\n\n\t\t\t\tmatrix[stage1][stage2].add(action.e1);\n\t\t\t});\n\t\tmatrix[0][node.stages.length - 1].add(0); // the entire measure edge\n\n\t\tconst stagedEvents = node.stagedEvents;\n\t\tconst endHs = status.matrixH[status.matrixH.length - 1].filter((_, i) => !stagedEvents.has(i));\n\t\tconst endHP = Math.max(0, Math.max(...endHs) - 0.01);\n\n\t\tconst hActions = node.actions.filter((action) => action.type === ActionType.HORIZONTAL);\n\n\t\tconst pendingHeads = Object.keys(status.eventMap)\n\t\t\t.map(Number)\n\t\t\t.filter((eid) => !hActions.find((action) => action.e2 === eid));\n\n\t\t// edges to end stage\n\t\tnode.stages.forEach((stage) => {\n\t\t\tstage.events.forEach((eid) => {\n\t\t\t\tif (eid > 0) {\n\t\t\t\t\tconst act = hActions.find((action) => action.e1 === eid);\n\t\t\t\t\tif (!act && status.matrixH[status.matrixH.length - 1][eid] >= endHP) {\n\t\t\t\t\t\tif (!pendingHeads.some((id) => status.matrixH[id][eid] > 0)) matrix[stage.index][node.stages.length - 1].add(eid);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn new StageMatrix({ matrix });\n\t}\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\t}\n\n\tpathOf(x: number, y: number, target: number, ei: number = 0): Path {\n\t\tif (this.matrix[x][y].size) {\n\t\t\tconst eid = [...this.matrix[x][y]][ei];\n\t\t\tif (y === target) return [eid];\n\n\t\t\tfor (let yy = y + 1; yy <= target; ++yy) {\n\t\t\t\tconst sub = this.pathOf(y, yy, target);\n\t\t\t\tif (sub) return [eid, ...sub];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindDoublePath(s1: number, s2: number): [Path, Path] {\n\t\tconst paths = [];\n\t\tfor (let t = s2; t >= s1 + 1; --t) {\n\t\t\tfor (let ei = 0; ei < this.matrix[s1][t].size; ++ei) {\n\t\t\t\tconst path = this.pathOf(s1, t, s2, ei);\n\t\t\t\tif (path) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t\tif (paths.length === 2) return [paths[0], paths[1]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\treducePath(path: Path): void {\n\t\tthis.matrix.forEach((column) => column.forEach((set) => path.forEach((id) => set.delete(id))));\n\t}\n\n\ttoEquations(eventCount: number): Equation[] {\n\t\tconst equations: Equation[] = [];\n\n\t\tfor (let d = 1; d < this.matrix.length; d++) {\n\t\t\tfor (let s1 = 0; s1 < this.matrix.length - d; s1++) {\n\t\t\t\tconst s2 = s1 + d;\n\n\t\t\t\twhile (true) {\n\t\t\t\t\t// find closed loop from s1 to s2\n\t\t\t\t\tconst paths = this.findDoublePath(s1, s2);\n\t\t\t\t\tif (paths) {\n\t\t\t\t\t\tconst [path1, path2] = paths;\n\t\t\t\t\t\tconst equation = Array(eventCount).fill(0);\n\t\t\t\t\t\tpath1.forEach((eid) => (equation[eid] = 1));\n\t\t\t\t\t\tpath2.forEach((eid) => (equation[eid] = -1));\n\t\t\t\t\t\tequations.push(equation);\n\n\t\t\t\t\t\tthis.reducePath(path1.length > path2.length ? path1 : path2);\n\t\t\t\t\t} else break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn equations;\n\t}\n}\n\nclass PathNode {\n\tlogger: Logger;\n\n\tparent: PathNode;\n\taction: Action;\n\tpossibility: number;\n\tchildren: PathNode[];\n\n\tstages: Stage[];\n\t//stageMatrix: StageMatrix;\n\tconstraints: Equation[];\n\n\tconstructor(data: any) {\n\t\tObject.assign(this, data);\n\n\t\tconsole.assert(this.logger, 'logger is null:', data);\n\t}\n\n\tget actions(): Action[] {\n\t\tconst last = this.parent ? this.parent.actions : [];\n\t\treturn this.action ? [...last, this.action] : last;\n\t}\n\n\tget id(): string {\n\t\tconst actionIds = this.actions.map((action) => action.id).sort();\n\t\treturn actionIds.join(' ');\n\t}\n\n\tget stagedEvents(): Set {\n\t\tconst set = new Set();\n\t\tif (this.stages) this.stages.forEach((stage) => stage.events.forEach((eid) => eid >= 0 && set.add(eid)));\n\n\t\treturn set;\n\t}\n\n\tlike(ids: string): boolean {\n\t\tconst actionIds = ids.split(' ').sort();\n\t\treturn actionIds.join(' ') === this.id;\n\t}\n\n\tconstructStages(status: Status): void {\n\t\tthis.stages = [{ events: [EOM] }];\n\n\t\tfor (const action of this.actions) {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase ActionType.PLACE:\n\t\t\t\t\tthis.stages.unshift({ events: [action.e1] });\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.VERTICAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid V action:', this.stages, action);\n\n\t\t\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\t\t\tstage1.events.push(...stage2.events);\n\t\t\t\t\t\t\tstage2.events = null;\n\t\t\t\t\t\t\tthis.stages = this.stages.filter((stage) => stage.events);\n\t\t\t\t\t\t} else if (!stage1) stage2.events.unshift(action.e1);\n\t\t\t\t\t\telse if (!stage2) stage1.events.push(action.e2);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase ActionType.HORIZONTAL:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(action.e1));\n\t\t\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(action.e2));\n\t\t\t\t\t\tconsole.assert(stage1 || stage2, 'invalid H action:', this.stages, action);\n\n\t\t\t\t\t\tconst newStage = (eid) => {\n\t\t\t\t\t\t\tconsole.assert(status.eventMap[eid], 'invalid event id:', action.id, eid, status.eventMap);\n\t\t\t\t\t\t\tconst x = status.eventMap[eid].x;\n\n\t\t\t\t\t\t\tconst stage = this.stages.find(\n\t\t\t\t\t\t\t\t(s) => s.events.some((e) => e > 0 && status.eventMap[e].x <= x) && s.events.some((e) => e > 0 && status.eventMap[e].x >= x)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (stage) stage.events.push(eid);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst newStage = { events: [eid] };\n\t\t\t\t\t\t\t\tconst si = this.stages.findIndex((s) => s.events[0] === EOM || status.eventMap[s.events[0]].x >= x);\n\t\t\t\t\t\t\t\tthis.stages.splice(si, 0, newStage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (!stage1) newStage(action.e1);\n\t\t\t\t\t\tif (!stage2) newStage(action.e2);\n\n\t\t\t\t\t\t/*if (this.stages.some((s, si) => si < this.stages.length - 2\n\t\t\t\t\t&& s.events.some(e1 => this.stages[si + 1].events.some(e2 => status.eventMap[e2].x <= status.eventMap[e1].x))))\n\t\t\t\t\tdebugger;*/\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis.stages.forEach((stage, i) => (stage.index = i));\n\t}\n\n\tconstructConstraints(status: Status): void {\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst stageMatrix = StageMatrix.fromNode(this, status);\n\t\tconst equations = stageMatrix.toEquations(eventCount);\n\n\t\tconst factors = Array(eventCount)\n\t\t\t.fill(null)\n\t\t\t.map((_, id) => status.eventMap[id].duration);\n\t\tthis.constraints = equations.map((equation) => equation.map((it, i) => it * factors[i]));\n\t}\n\n\tinbalancesConstraints(status: Status): InbalanceEquations {\n\t\tconsole.assert(this.constraints, 'constraints not constructed.');\n\n\t\tconst eventCount = Object.keys(status.eventMap).length;\n\t\tconst ones = Array(eventCount).fill(true);\n\t\tconst fixed = Array(eventCount).fill(false);\n\n\t\tconst inbalances: Equation[] = [];\n\n\t\tfor (const constraint of this.constraints) {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum !== 0) {\n\t\t\t\tconst c = sum < 0 ? constraint.map((it) => -it) : constraint;\n\t\t\t\tif (c[0] > 0) continue; // entire measure edge usually is larger than others, no effect\n\n\t\t\t\tinbalances.push(c);\n\n\t\t\t\t// set ones for tight items\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tfixed[i] = fixed[i] || it < 0;\n\t\t\t\t\tif (it) ones[i] = it < 0 || fixed[i];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// pick out influenced equations\n\t\tthis.constraints.forEach((constraint) => {\n\t\t\tconst sum = constraint.reduce((sum, it) => sum + it, 0);\n\t\t\tif (sum === 0 && !constraint[0]) {\n\t\t\t\tif (constraint.some((it, i) => it && !ones[i])) {\n\t\t\t\t\tconstraint.forEach((it, i) => it && (ones[i] = false));\n\t\t\t\t\tinbalances.push(constraint);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn { ones, inbalances };\n\t}\n\n\tsolveEquations({ ones, inbalances }: InbalanceEquations): number[] {\n\t\tif (!inbalances.length) return ones.map(() => 1);\n\n\t\tconst xis = ones\n\t\t\t.map((fixed, i) => ({ fixed, i }))\n\t\t\t.filter(({ fixed }) => !fixed)\n\t\t\t.map(({ i }) => i)\n\t\t\t.filter((i) => inbalances.some((items) => items[i] !== 0));\n\t\tif (!xis.length) return ones.map(() => 1);\n\n\t\tconst factors = xis.map((i) => Math.abs(inbalances.find((items) => items[i] !== 0)[i]));\n\n\t\ttype Line = { line: number[]; bias: number };\n\n\t\tconst equationMap = new Map();\n\t\tlet conflicted = false;\n\n\t\tconst lines: Line[] = inbalances\n\t\t\t.map((items) => {\n\t\t\t\tconst line = items.filter((_, i) => xis.includes(i));\n\t\t\t\tconst bias = -items.reduce((sum, it, i) => sum + (xis.includes(i) ? 0 : it), 0);\n\n\t\t\t\treturn { line, bias };\n\t\t\t\t// remove duplicated equations\n\t\t\t})\n\t\t\t.filter(({ line, bias }) => {\n\t\t\t\tif (line.every((it) => it === 0)) return false;\n\n\t\t\t\tconst id = line.join(',');\n\t\t\t\tif (equationMap.has(id)) {\n\t\t\t\t\tconflicted = equationMap.get(id) !== bias;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tequationMap.set(id, bias);\n\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\tif (conflicted) return null;\n\n\t\tconst squareLines = lines.slice(0, xis.length);\n\t\tconst restLines = lines.slice(xis.length);\n\t\tif (squareLines.length < xis.length) {\n\t\t\tconst candidateLines = [];\n\t\t\tfor (let i1 = 0; i1 < xis.length - 1; ++i1) {\n\t\t\t\tconst i2 = i1 + 1;\n\t\t\t\tconst line = {\n\t\t\t\t\tline: xis.map((_, i) => (i === i1 ? 1 : i === i2 ? -1 : 0)),\n\t\t\t\t\tbias: 0,\n\t\t\t\t\tprior: (factors[i1] + factors[i2]) / DURATION_MULTIPLIER,\n\t\t\t\t};\n\t\t\t\tif (squareLines.some((sl) => sl.line[i1] && sl.line[i2])) line.prior -= 10;\n\t\t\t\tif (squareLines.some((sl) => sl.line.filter(Number).length === 1 && (sl.line[i1] || sl.line[i2]))) line.prior += 1;\n\t\t\t\tcandidateLines.push(line);\n\t\t\t}\n\t\t\tcandidateLines.sort((c1, c2) => c1.prior - c2.prior);\n\n\t\t\tsquareLines.push(...candidateLines.slice(0, xis.length - squareLines.length));\n\t\t}\n\t\t//console.assert(squareLines.length, \"squareLines is empty.\", lines, xis, equationMap, inbalances);\n\n\t\tconst matrix = squareLines.map(({ line }) => line);\n\t\tconst bias = squareLines.map(({ bias }) => bias);\n\n\t\tconst invert = matrixInverse(matrix);\n\t\tif (!invert) {\n\t\t\tthis.logger.warn('null invert:', matrix);\n\t\t\t//debugger;\n\t\t\treturn null;\n\t\t}\n\t\tconst solution = invert.map((row) => row.reduce((sum, it, i) => sum + it * bias[i], 0));\n\t\t//console.log(\"solution:\", matrix, invert, solution);\n\n\t\tif (restLines.length) {\n\t\t\tif (restLines.some((line) => Math.abs(line.line.reduce((sum, it, i) => sum + it * solution[i], 0)) > 1e-3)) {\n\t\t\t\t//console.debug(\"rest lines not satisfied:\", restLines, solution);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tconst result = ones.map(() => 1);\n\t\txis.forEach((xi, i) => (result[xi] = solution[i]));\n\n\t\treturn result;\n\t}\n\n\toptimallySolve(status: Status): number[] {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 1-2 9|1 2-3 3-4 9-10 4-5 5-6 6-7 7-8 8-. 12|6 11-12 10-11\"))\n\t\t//\tdebugger;\n\n\t\tconst shrinknesses = ones.map((fixed, id) => (fixed ? -1 : roundNumber(status.eventMap[id].shrinkness, 0.01)));\n\t\tconst shrinkMap = shrinknesses.reduce((map, shrinkness, id) => {\n\t\t\tif (shrinkness >= 0) {\n\t\t\t\tmap[shrinkness] = map[shrinkness] || [];\n\t\t\t\tmap[shrinkness].push(id);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}, {});\n\t\tconst groups = Object.entries(shrinkMap)\n\t\t\t.sort((p1, p2) => Number(p2[0]) - Number(p1[0]))\n\t\t\t.map((pair) => pair[1]);\n\t\t//console.log(\"groups:\", groups, shrinknesses);\n\n\t\tfor (let released = 1; released < groups.length; ++released) {\n\t\t\tconst releasedIds = [].concat(...groups.slice(0, released));\n\t\t\tconst fixed = ones.map((_, id) => !releasedIds.includes(id));\n\t\t\tconst warps = this.solveEquations({ ones: fixed, inbalances });\n\n\t\t\tif (warps && warps.every((it, i) => it <= 1 && it > status.eventMap[i].lowWarp)) return warps;\n\t\t}\n\n\t\treturn this.solveEquations({ ones, inbalances });\n\t}\n\n\tisConflicted(status: Status): boolean {\n\t\tconst { ones, inbalances } = this.inbalancesConstraints(status);\n\n\t\t//if (this.like(\"2 8|2 8-9 3|9 2-3 3-4 10|4 4-5 5|11 11-12 6|12 5-6 10-11 9-10 6-7\"))\n\t\t//\tdebugger;\n\n\t\tfor (const c of inbalances) {\n\t\t\t// sum with low warps\n\t\t\tconst lowSum = c.reduce((sum, it, i) => sum + it * (ones[i] || it <= 0 ? 1 : status.eventMap[i].lowWarp), 0);\n\n\t\t\tif (lowSum >= 0) {\n\t\t\t\t// mark events' broken tendency\n\t\t\t\tc.forEach((it, i) => {\n\t\t\t\t\tif (it) status.eventTendencies[i] += it > 0 ? 1 : -1;\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (!inbalances.length) return false;\n\n\t\tconst timeWarps = this.solveEquations({ ones, inbalances });\n\t\tif (!timeWarps) return true;\n\n\t\treturn !timeWarps.every((it, i) => it > status.eventMap[i].lowWarp && it <= 1);\n\t}\n\n\tgetSolution(status: Status): Solution {\n\t\tconst actionKey = (action) =>\n\t\t\tstatus.eventMap[action.e2]\n\t\t\t\t? status.eventMap[action.e2].x + Math.abs(status.eventMap[action.e2].x - status.eventMap[action.e1].x) * 0.06\n\t\t\t\t: status.eventMap[action.e1].x + 1e4;\n\t\tconst hacts = this.actions.filter((action) => action.type === ActionType.HORIZONTAL).sort((a1, a2) => actionKey(a1) - actionKey(a2));\n\t\tconst hmap = hacts.reduce((map, act) => ({ ...map, [act.e1]: act.e2 }), {});\n\t\tconst startEs = new Set([...Object.keys(hmap)].map(Number));\n\t\thacts.forEach((act) => startEs.delete(act.e2));\n\t\tthis.stages[0].events.forEach((eid) => eid > 0 && startEs.add(eid));\n\n\t\tlet voices = [...startEs].map((se) => {\n\t\t\tconst voice = [se];\n\n\t\t\tlet x = se;\n\t\t\twhile (hmap[x]) {\n\t\t\t\tx = hmap[x];\n\t\t\t\tif (x < 0 || voice.includes(x)) break;\n\n\t\t\t\tvoice.push(x);\n\t\t\t}\n\n\t\t\treturn voice;\n\t\t});\n\n\t\tconst events: EventResult[] = Object.values(status.eventMap)\n\t\t\t.filter((e) => e.id > 0)\n\t\t\t.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\ttick: null,\n\t\t\t\tendTick: null,\n\t\t\t\ttickGroup: null,\n\t\t\t\ttimeWarp: null,\n\t\t\t}));\n\t\tconst eventMap: { [id: number]: EventResult } = events\n\t\t\t.filter((e) => voices.some((voice) => voice.includes(e.id)) || hacts.some((act) => [act.e1, act.e2].includes(e.id)))\n\t\t\t.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.stages.forEach((stage, si) => stage.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tickGroup = si)));\n\n\t\tthis.stages[0].tick = 0;\n\t\tthis.stages[0].events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = 0));\n\n\t\t// solve time warps\n\t\tconst timeWarps = this.optimallySolve(status);\n\t\tevents.forEach((e) => (e.timeWarp = floatToTimeWarp(timeWarps[e.id])));\n\n\t\t//if (this.like(\"1 12|1 1-2 9|2 2-3 13|3 3-4 4-5 10|5 14|10 10-11 8-9 14-15 15|6 6-7 7-. 13-14 5-6 12-13 9-10\"))\n\t\t//\tdebugger;\n\n\t\t// solve stage ticks\n\t\tconst estages = this.stages.slice(0, this.stages.length - 1);\n\t\tconst solveStages = (): boolean => {\n\t\t\tif (estages.every((stage) => Number.isFinite(stage.tick))) return false;\n\n\t\t\tlet changed = false;\n\n\t\t\t// forward\n\t\t\thacts.forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (Number.isFinite(stage1.tick) && !Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage2.tick = stage1.tick + fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage2.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage2.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// backward\n\t\t\t[...hacts].reverse().forEach((act) => {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(act.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(act.e2));\n\t\t\t\tif (!Number.isFinite(stage1.tick) && Number.isFinite(stage2.tick)) {\n\t\t\t\t\tstage1.tick = stage2.tick - fractionMul(status.eventMap[act.e1].duration, eventMap[act.e1].timeWarp);\n\t\t\t\t\tstage1.events.forEach((eid) => eventMap[eid] && (eventMap[eid].tick = stage1.tick));\n\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn changed;\n\t\t};\n\t\twhile (solveStages());\n\n\t\tconsole.assert(\n\t\t\testages.every((stage) => Number.isFinite(stage.tick)),\n\t\t\t'stage ticks not all solved:',\n\t\t\tthis.stages,\n\t\t\tthis.id\n\t\t);\n\t\tevents\n\t\t\t.filter((event) => Number.isFinite(event.tick))\n\t\t\t.forEach((event) => (event.endTick = event.tick + fractionMul(status.eventMap[event.id].duration, event.timeWarp)));\n\n\t\t// clip out of bound events\n\t\tconst measureDuration = status.eventMap[0].duration;\n\t\tvoices.forEach((voice) => {\n\t\t\tconst outEI = voice.findIndex((eid) => eventMap[eid].endTick > measureDuration);\n\t\t\tif (outEI >= 0) {\n\t\t\t\tconst es = voice.splice(outEI, voice.length - outEI);\n\t\t\t\tes.forEach((eid) => {\n\t\t\t\t\teventMap[eid].tick = null;\n\t\t\t\t\teventMap[eid].endTick = null;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tvoices = voices.filter((voice) => voice.length);\n\n\t\tconst duration = Math.max(0, ...events.map((e) => e.endTick).filter(Number.isFinite));\n\t\t//console.log(\"getSolution:\", this);\n\t\tthis.logger.debug(String.fromCodePoint(0x1f34e), this.id, timeWarps);\n\n\t\treturn {\n\t\t\tvoices,\n\t\t\tevents,\n\t\t\tduration,\n\t\t\tactions: this.actions.map((action) => action.id).join(' '),\n\t\t};\n\t}\n\n\tdeduce(status: Status, quota: Quota): Solution {\n\t\tif (!this.stages) this.constructStages(status);\n\t\t//console.log(\"deduce:\", status);\n\n\t\t// increase access counting\n\t\tconst access = status.actionAccessing.get(this.id) || { times: 0 };\n\t\t++access.times;\n\t\tstatus.actionAccessing.set(this.id, access);\n\n\t\tthis.constructConstraints(status);\n\t\t//console.log(\"constraints:\", this.id, this.stages, this.constraints);\n\n\t\tif (this.isConflicted(status)) {\n\t\t\taccess.closed = true;\n\t\t\tthis.logger.info(this.action.id, '\\u274c');\n\t\t\treturn null;\n\t\t}\n\n\t\t//const newStatus = status;\n\t\tthis.logger.group(this.action && this.action.id);\n\n\t\tif (quota.credits > 0) {\n\t\t\t--quota.credits;\n\n\t\t\tif (!this.children) this.expand(status);\n\n\t\t\tthis.children = this.children.filter((node) => !status.actionAccessing.get(node.id) || !status.actionAccessing.get(node.id).closed);\n\t\t\tif (this.children.length) {\n\t\t\t\tconst p = (node: PathNode): number => node.possibility / ((status.actionAccessing.get(node.id) || { times: 0 }).times + 1);\n\t\t\t\tthis.children.sort((n1, n2) => p(n2) - p(n1));\n\n\t\t\t\tfor (const child of this.children) {\n\t\t\t\t\tconst solution = child.deduce(status, quota);\n\t\t\t\t\tif (solution) {\n\t\t\t\t\t\tthis.logger.groupEnd();\n\t\t\t\t\t\treturn solution;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (quota.credits <= 0) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//else\n\t\t\t//\tconsole.debug(\"got the leaf:\", this, status);\n\t\t} else this.logger.debug('quota exhausted.');\n\n\t\tthis.logger.groupEnd();\n\n\t\taccess.closed = true;\n\n\t\treturn this.getSolution(status);\n\t}\n\n\texpand(status: Status): void {\n\t\t//this.action.events.forEach(eid => status.pendingEvents.delete(eid));\n\t\tthis.constructStages(status);\n\n\t\tconst { eventMap, matrixV, matrixH } = status;\n\t\tconst stagedEvents = this.stagedEvents;\n\n\t\tconst branches: NodeBranch[] = [];\n\t\tconst appendBranch = (branch: NodeBranch): void => {\n\t\t\tif (!this.actions.some((a) => a.id === branch.action.id) && !branches.some((b) => b.action.id === branch.action.id)) {\n\t\t\t\tconst stage1 = this.stages.find((stage) => stage.events.includes(branch.action.e1));\n\t\t\t\tconst stage2 = this.stages.find((stage) => stage.events.includes(branch.action.e2));\n\t\t\t\tif (stage1 === stage2 || (stage1 && stage2 && stage1.index >= stage2.index)) return;\n\n\t\t\t\tif (stage1 && stage2) {\n\t\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\t\tif (stage2.index - stage1.index > 1) return;\n\t\t\t\t\t\tif (this.actions.some((a) => stage1.events.includes(a.e1) && stage2.events.includes(a.e2))) return;\n\t\t\t\t\t} else if (branch.action.type === ActionType.HORIZONTAL) {\n\t\t\t\t\t\tif (stage1.index > stage2.index) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tbranch.action.type === ActionType.HORIZONTAL &&\n\t\t\t\t\tthis.actions.some(\n\t\t\t\t\t\t(a) =>\n\t\t\t\t\t\t\ta.type === ActionType.HORIZONTAL &&\n\t\t\t\t\t\t\t(a.e1 === branch.action.e1 || a.e2 === branch.action.e2 || (a.e1 === branch.action.e2 && a.e2 === branch.action.e1))\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\n\t\t\t\t// exclude 2 too far away events by vertical\n\t\t\t\tif (branch.action.type === ActionType.VERTICAL) {\n\t\t\t\t\tif (stage1) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage1.events.map((e) => matrixV[branch.action.e2][e]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (stage2) {\n\t\t\t\t\t\tbranch.possibility = Math.min(branch.possibility, ...stage2.events.map((e) => matrixV[e][branch.action.e1]));\n\t\t\t\t\t\tif (branch.possibility <= 0) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbranches.push(branch);\n\t\t\t}\n\t\t};\n\n\t\tfor (const eid of stagedEvents) {\n\t\t\tif (eid < 0) continue;\n\n\t\t\tmatrixV[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0 && eid !== id) appendBranch({ action: Action.V(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixV.forEach((ps, id) => {\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.V(eid, id), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH[eid].forEach((p, id) => {\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(id, eid), possibility: p });\n\t\t\t});\n\n\t\t\tmatrixH.forEach((ps, id) => {\n\t\t\t\tid = id >= Object.keys(eventMap).length ? -1 : id;\n\t\t\t\tconst p = ps[eid];\n\t\t\t\tif (p > 0) appendBranch({ action: Action.H(eid, id), possibility: p });\n\t\t\t});\n\t\t}\n\n\t\t// If branches not contains extending actions, clear it.\n\t\t//\tBecause pure inner vertical action may be harmful\n\t\tif (\n\t\t\t!branches.some(\n\t\t\t\t(branch) =>\n\t\t\t\t\t[ActionType.HORIZONTAL, ActionType.PLACE].includes(branch.action.type) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e1) ||\n\t\t\t\t\t!stagedEvents.has(branch.action.e2)\n\t\t\t)\n\t\t) {\n\t\t\tthis.children = [];\n\t\t\treturn;\n\t\t}\n\n\t\t//console.table(branches.map(b => [b.action.id, b.possibility]));\n\t\t//console.log(\"branches:\", branches.map(b => b.action.id).join(\", \"), \"\\n\", this.actions.map(a => a.id).join(\", \"));\n\t\tthis.children = branches.map((branch) => new PathNode({ logger: this.logger, parent: this, ...branch }));\n\t}\n}\n\nclass Solver {\n\tquota: number;\n\tlogger: Logger;\n\n\tevents: Event[];\n\tmatrixH: Matrix;\n\tmatrixV: Matrix;\n\txSpan: number;\n\n\teventMap: { [id: number]: Event };\n\tactionAccessing: Map;\n\n\tpathRoot: PathNode;\n\n\tconstructor(env: Environment, { quota = 1000, logger = new DummyLogger() }: SolverOptions = {}) {\n\t\tthis.quota = quota;\n\t\tthis.logger = logger;\n\n\t\tconst event0 = {\n\t\t\tid: 0,\n\t\t\tx: 0,\n\t\t\tconfidence: 1,\n\t\t\tshrinkness: env.measureShrinkness,\n\t\t\tduration: env.expectedDuration,\n\t\t\tlowWarp: 0,\n\t\t};\n\n\t\tthis.events = [\n\t\t\tevent0,\n\t\t\t...env.events.map((e) => ({\n\t\t\t\tid: e.id,\n\t\t\t\tx: e.x,\n\t\t\t\tconfidence: e.confidence,\n\t\t\t\tshrinkness: e.shrinkness,\n\t\t\t\tstaff: e.staff,\n\t\t\t\tduration: e.duration,\n\t\t\t\tlowWarp: 0.5,\n\t\t\t})),\n\t\t];\n\t\tthis.eventMap = this.events.reduce((map, e) => ({ ...map, [e.id]: e }), {});\n\n\t\tthis.matrixH = env.matrixH;\n\t\tthis.matrixV = env.matrixV;\n\n\t\tthis.xSpan = env.endX - Math.min(env.endX - 1, ...env.events.map((e) => e.x));\n\n\t\tthis.actionAccessing = new Map();\n\t}\n\n\tsolve(): Solution {\n\t\t// construct path root\n\t\tthis.pathRoot = new PathNode({\n\t\t\tlogger: this.logger,\n\t\t\taction: null,\n\t\t});\n\t\tthis.pathRoot.children = this.events.slice(1).map(\n\t\t\t(event) =>\n\t\t\t\tnew PathNode({\n\t\t\t\t\tlogger: this.logger,\n\t\t\t\t\tparent: this.pathRoot,\n\t\t\t\t\taction: Action.P(event.id),\n\t\t\t\t\tpossibility: this.matrixV[event.id].reduce((sum, p) => sum + p, 0),\n\t\t\t\t})\n\t\t);\n\n\t\tlet bestSolution: Solution = null;\n\n\t\tthis.logger.groupCollapsed('solve');\n\n\t\tconst eventTendencies = Array(this.events.length).fill(0);\n\n\t\tconst quota = { credits: this.quota, times: 0 };\n\t\twhile (quota.credits > 0) {\n\t\t\t++quota.times;\n\n\t\t\tconst status = {\n\t\t\t\teventMap: this.eventMap,\n\t\t\t\tmatrixH: this.matrixH,\n\t\t\t\tmatrixV: this.matrixV,\n\t\t\t\tactionAccessing: this.actionAccessing,\n\t\t\t\teventTendencies,\n\t\t\t};\n\n\t\t\tconst solution = this.pathRoot.deduce(status, quota);\n\t\t\tsolution.credits = this.quota - quota.credits;\n\t\t\tsolution.times = quota.times;\n\t\t\tthis.evaluateSolution(solution);\n\t\t\tthis.logger.debug('loss:', solution.loss);\n\n\t\t\tbestSolution = !bestSolution || solution.loss < bestSolution.loss ? solution : bestSolution;\n\t\t\tif (!bestSolution.loss) break;\n\n\t\t\t// check if searching tree traversed\n\t\t\tif (this.actionAccessing.get('').closed) break;\n\t\t}\n\n\t\tthis.logger.groupEnd();\n\t\tthis.logger.debug('solution', bestSolution && bestSolution.loss, bestSolution);\n\t\tthis.logger.debug('cost:', this.quota - quota.credits);\n\n\t\tthis.logger.debug(\n\t\t\t'eventTendencies:',\n\t\t\teventTendencies.map((t) => t / quota.times)\n\t\t);\n\n\t\treturn bestSolution;\n\t}\n\n\tevaluateSolution(solution: Solution): void {\n\t\tsolution.loss = 0;\n\n\t\ttype EventR = Event & EventResult;\n\t\tconst eventMap: Record = solution.events.reduce((map, e) => ({ ...map, [e.id]: { ...e, ...this.eventMap[e.id] } }), {});\n\n\t\t/*// minus tick\n\t\tconst minuses = solution.events.filter((e) => e.tick < 0).length;\n\t\tsolution.loss += minuses * 1000;*/\n\n\t\t// minus tick rates penalty\n\t\tconst events = solution.events.filter((event) => Number.isFinite(event.tick)).map((event) => eventMap[event.id]);\n\t\tconst sevents: Record = events.reduce((map, event) => {\n\t\t\tmap[event.staff] = map[event.staff] || [];\n\t\t\tmap[event.staff].push(event);\n\t\t\treturn map;\n\t\t}, {});\n\t\tObject.values(sevents).forEach((es) => {\n\t\t\tconst ses = es.sort((e1, e2) => e1.x - e2.x).slice(0, es.length - 1);\n\t\t\tses.forEach((e1, i) => {\n\t\t\t\tconst e2 = es[i + 1];\n\t\t\t\tif (e2.tick < e1.tick) solution.loss += 1000;\n\t\t\t});\n\t\t});\n\n\t\tconst times = new Map();\n\t\tsolution.events.forEach((event) => {\n\t\t\tif (!Number.isFinite(event.tick) || solution.voices.every((voice) => !voice.includes(event.id)))\n\t\t\t\tsolution.loss += 100 * eventMap[event.id].confidence;\n\n\t\t\tif (event.timeWarp) {\n\t\t\t\tconst { numerator, denominator } = event.timeWarp;\n\t\t\t\tconst shrinkness = eventMap[event.id].shrinkness;\n\t\t\t\ttimes.set(numerator, Math.max(times.get(numerator) || 0, 1 - shrinkness));\n\t\t\t\ttimes.set(denominator, Math.max(times.get(denominator) || 0, 1 - shrinkness));\n\t\t\t}\n\t\t});\n\n\t\t// partial measure penalty\n\t\tconst partialFrac = reducedFraction(solution.duration, this.eventMap[0].duration);\n\t\ttimes.set(partialFrac.numerator, Math.max(times.get(partialFrac.numerator) || 0, 1 - this.eventMap[0].shrinkness));\n\t\ttimes.set(partialFrac.denominator, Math.max(times.get(partialFrac.denominator) || 0, 1 - this.eventMap[0].shrinkness));\n\n\t\tfor (const [n, weight] of times.entries()) {\n\t\t\tif (n > 1) solution.loss += Math.log(n) * weight;\n\t\t}\n\n\t\tlet spaceTime = 0;\n\t\tlet staffAlters = 0;\n\t\tsolution.voices.forEach((voice) => {\n\t\t\tconsole.assert(eventMap[voice[0]], 'invalid voice:', voice, Object.keys(eventMap));\n\n\t\t\tconst start = Math.abs(eventMap[voice[0]].tick); // abs: penalty for minus start\n\t\t\tconst end = eventMap[voice[voice.length - 1]].endTick;\n\n\t\t\tspaceTime += Math.max(0, start + solution.duration - end);\n\n\t\t\t// staff alternation penalty\n\t\t\tlet staff = null;\n\t\t\tvoice.forEach((id) => {\n\t\t\t\tconst event = eventMap[id];\n\t\t\t\tif (event.staff !== staff) {\n\t\t\t\t\tif (staff !== null) ++staffAlters;\n\t\t\t\t\tstaff = event.staff;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tsolution.loss += (spaceTime * 10) / DURATION_MULTIPLIER;\n\t\tsolution.loss += 5 ** staffAlters - 1;\n\n\t\t// tick twist\n\t\tconst eventsXOrder = [...events].sort((e1, e2) => e1.x - e2.x);\n\t\tconst tickTwists = eventsXOrder.slice(1).map((e2, i) => {\n\t\t\tconst e1 = eventsXOrder[i];\n\t\t\tconst dx = e2.x - e1.x;\n\t\t\tconst dt = e2.tick - e1.tick;\n\n\t\t\tif (!dt) return dx / this.xSpan;\n\n\t\t\tconst rate = Math.atan2(dt / solution.duration, dx / this.xSpan);\n\n\t\t\treturn ((rate * 4) / Math.PI - 1) ** 2;\n\t\t});\n\t\tconst tickTwist = Math.max(...tickTwists, 0);\n\t\tsolution.loss += tickTwist ** 2;\n\n\t\tconsole.assert(solution.loss >= 0, 'Invalid solution loss!!!', solution.loss, times, spaceTime, staffAlters);\n\t\tif (solution.loss < 0) solution.loss = Infinity;\n\t}\n}\n\nexport { SolverOptions, Solver };\n","import * as EquationSolver from './equationSolver';\nimport { EquationPolicy } from './spartitoMeasure';\n\nconst solveStaffGroup = (staffGroup: EquationPolicy.StaffGroup, options: EquationPolicy.RegulatorOptions): EquationPolicy.StaffGroupSolution => {\n\tif (!staffGroup.events.length) {\n\t\treturn {\n\t\t\tevents: [],\n\t\t\tvoices: [],\n\t\t\tduration: 0,\n\t\t};\n\t}\n\n\tconst solver = new EquationSolver.Solver(staffGroup, options);\n\n\treturn solver.solve();\n};\n\n// Plain postMessage worker (Vite-compatible, no workerpool dependency)\nself.onmessage = (e: MessageEvent) => {\n\tconst { id, args } = e.data;\n\ttry {\n\t\tconst result = solveStaffGroup(args[0], args[1]);\n\t\tself.postMessage({ id, result });\n\t} catch (error: any) {\n\t\tself.postMessage({ id, error: error.message });\n\t}\n};\n","console.info(`%cstarry-omr%c v1.0.0 2026-04-30T10:34:11.452Z`, 'color:#fff; background-color: #555;padding: 5px;border-radius: 3px 0 0 3px;', 'color: #fff; background-color: #007dc6;padding: 5px;border-radius: 0 3px 3px 0;');\nimport '../../../src/starry/solveStaffGroup.worker';\n"],"names":["Sylvester","Matrix","create","elements","setElements","I","n","j","els","i","prototype","dup","this","isSquare","cols","length","toRightTriangular","p","M","np","push","multiplier","determinant","det","isSingular","augment","matrix","T","nj","inverse","divisor","new_element","inverse_elements","matrixInverse","mat","SemanticType","root","window","NODE_JS","JS_SHA1_NO_NODE_JS","process","versions","node","global","COMMON_JS","JS_SHA1_NO_COMMON_JS","module","exports","HEX_CHARS","split","EXTRA","SHIFT","OUTPUT_TYPES","blocks","createOutputMethod","outputType","message","Sha1","update","createMethod","method","nodeWrap","type","crypto","eval","Buffer","nodeMethod","createHash","digest","constructor","ArrayBuffer","Uint8Array","undefined","sharedMemory","h0","h1","h2","h3","h4","block","start","bytes","hBytes","finalized","hashed","first","notString","code","index","charCodeAt","lastByteIndex","hash","finalize","t","a","b","c","d","e","hex","toString","array","arrayBuffer","buffer","dataView","DataView","setUint32","sha1","BarMeasure","vline_BarMeasure","vline_BarTerminal","vline_BarSegment","vline_VoltaLeft","vline_VoltaRight","VoltaAlternativeBegin","st","NoteheadS0","NoteheadS1","NoteheadS2","Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","ScriptStaccatissimo","TimesigZero","TimesigOne","TimesigTwo","TimesigThree","TimesigFour","TimesigFive","TimesigSix","TimesigSeven","TimesigEight","TimesigNine","Rest0","Rest1","Rest2","Rest3","Rest4","Rest5","Rest6","Rest0W","RestM1","SignInterval","SignLined","BeamLeft","BeamContinue","BeamRight","ClefG","ClefF","ClefC","Dot","AccNatural","AccSharp","AccDoublesharp","AccFlat","AccFlatflat","TimesigC44","TimesigC22","OctaveShift8","OctaveShift0","f","m","r","s","z","ScriptFermata","ScriptShortFermata","ScriptSforzato","ScriptStaccato","ScriptTurn","ScriptTrill","ScriptSegno","ScriptCoda","ScriptArpeggio","ScriptPrall","ScriptMordent","ScriptMarcato","ScriptTenuto","ScriptPortato","PedalStar","PedalPed","roundNumber","x","precision","min","Infinity","Math","max","round","gcd","Number","isInteger","console","error","frac","numerator","denominator","reducedFraction","g","fractionMul","value","fraction","DummyLogger","debug","_","group","groupCollapsed","groupEnd","info","warn","assert","EOM","GREAT_NUMBER","DURATION_MULTIPLIER","floatToFrac","floatToTimeWarp","ActionType","Action","data","Object","assign","P","PLACE","e1","V","e2","order","VERTICAL","H","HORIZONTAL","id","events","filter","isFinite","StageMatrix","fromNode","status","Array","stages","fill","map","Set","actions","action","forEach","stage1","findIndex","stage","includes","stage2","add","stagedEvents","endHs","matrixH","has","endHP","hActions","pendingHeads","keys","eventMap","eid","find","some","pathOf","y","target","ei","size","yy","sub","findDoublePath","s1","s2","paths","path","reducePath","column","set","delete","toEquations","eventCount","equations","path1","path2","equation","PathNode","logger","last","parent","sort","join","like","ids","constructStages","unshift","newStage","si","splice","constructConstraints","factors","duration","constraints","it","inbalancesConstraints","ones","fixed","inbalances","constraint","sum","reduce","solveEquations","xis","items","abs","equationMap","Map","conflicted","lines","line","bias","every","get","squareLines","slice","restLines","candidateLines","i1","i2","prior","sl","c1","c2","invert","solution","row","result","xi","optimallySolve","shrinkMap","shrinkness","groups","entries","p1","p2","pair","released","releasedIds","concat","warps","lowWarp","isConflicted","eventTendencies","timeWarps","getSolution","actionKey","hacts","a1","a2","hmap","act","startEs","voices","se","voice","values","tick","endTick","tickGroup","timeWarp","estages","solveStages","changed","reverse","event","measureDuration","outEI","String","fromCodePoint","deduce","quota","access","actionAccessing","times","closed","credits","children","expand","possibility","n1","n2","child","matrixV","branches","appendBranch","branch","ps","Solver","env","event0","confidence","measureShrinkness","expectedDuration","staff","xSpan","endX","solve","pathRoot","bestSolution","evaluateSolution","loss","sevents","es","partialFrac","weight","log","spaceTime","staffAlters","end","eventsXOrder","tickTwists","dx","dt","atan2","PI","tickTwist","solveStaffGroup","staffGroup","options","EquationSolver.Solver","self","onmessage","args","postMessage"],"mappings":"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"} \ No newline at end of file diff --git a/dist/assets/DeleteOutlined-1f8a2958.js b/dist/assets/DeleteOutlined-60e63eb1.js similarity index 81% rename from dist/assets/DeleteOutlined-1f8a2958.js rename to dist/assets/DeleteOutlined-60e63eb1.js index e9579941e32fa49cc850eca0e8ccd9edf98a0a06..e4c2ea8e0ce807de2847a8cf31be916119732795 100644 --- a/dist/assets/DeleteOutlined-1f8a2958.js +++ b/dist/assets/DeleteOutlined-60e63eb1.js @@ -1 +1 @@ -import{A as l,f as e}from"./_setToString-038b76d7.js";import{r as t}from"./umi-2135699e.js";var a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};const n=a;var o=function(c,r){return t.createElement(l,e(e({},c),{},{ref:r,icon:n}))},v=t.forwardRef(o);const h=v;export{h as D}; +import{A as l,f as e}from"./_setToString-64803aa4.js";import{r as t}from"./umi-6680b95f.js";var a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};const n=a;var o=function(c,r){return t.createElement(l,e(e({},c),{},{ref:r,icon:n}))},v=t.forwardRef(o);const h=v;export{h as D}; diff --git a/dist/assets/DownloadOutlined-fad249b6.js b/dist/assets/DownloadOutlined-fad249b6.js new file mode 100644 index 0000000000000000000000000000000000000000..a2d08560d3adc7a35e801cb31ee4bfb7db6f44a0 --- /dev/null +++ b/dist/assets/DownloadOutlined-fad249b6.js @@ -0,0 +1 @@ +import{A as n,f as o}from"./_setToString-64803aa4.js";import{r as t}from"./umi-6680b95f.js";var c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const r=c;var d=function(a,e){return t.createElement(n,o(o({},a),{},{ref:e,icon:r}))},l=t.forwardRef(d);const u=l;export{u as D}; diff --git a/dist/assets/Dropdown-ff3ebc45.js b/dist/assets/Dropdown-ff3ebc45.js new file mode 100644 index 0000000000000000000000000000000000000000..14e888e95907c9ff1c3cf4b05ec05671bc595f81 --- /dev/null +++ b/dist/assets/Dropdown-ff3ebc45.js @@ -0,0 +1 @@ +import{A as $t,f as N,u as Y,y as _n,_ as pe,w as Re,b as w,a as F,z as Dt,aG as An,c as oe,q as kn,B as Ln,p as $n,l as Dn,o as Tt,j as Tn,d as Vn}from"./_setToString-64803aa4.js";import{r as t,_ as B,e as Fn}from"./umi-6680b95f.js";import{d as Vt,i as zn,K as te,u as Xe,G as Te,c as Ft}from"./TextArea-268b64d7.js";import{t as Un}from"./button-8d21fb6b.js";var Wn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"};const Hn=Wn;var jn=function(n,a){return t.createElement($t,N(N({},n),{},{ref:a,icon:Hn}))},Gn=t.forwardRef(jn);const Wr=Gn;var qn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"ellipsis",theme:"outlined"};const Bn=qn;var Yn=function(n,a){return t.createElement($t,N(N({},n),{},{ref:a,icon:Bn}))},Xn=t.forwardRef(Yn);const Hr=Xn;var zt=t.createContext(null);function ft(e,n){return e===void 0?null:"".concat(e,"-").concat(n)}function Ut(e){var n=t.useContext(zt);return ft(n,e)}var Jn=["children","locked"],ee=t.createContext(null);function Zn(e,n){var a=N({},e);return Object.keys(n).forEach(function(o){var r=n[o];r!==void 0&&(a[o]=r)}),a}function Ve(e){var n=e.children,a=e.locked,o=Y(e,Jn),r=t.useContext(ee),l=_n(function(){return Zn(r,o)},[r,o],function(i,u){return!a&&(i[0]!==u[0]||!Vt(i[1],u[1],!0))});return t.createElement(ee.Provider,{value:l},n)}var Qn=[],Wt=t.createContext(null);function et(){return t.useContext(Wt)}var Ht=t.createContext(Qn);function Fe(e){var n=t.useContext(Ht);return t.useMemo(function(){return e!==void 0?[].concat(pe(n),[e]):n},[n,e])}var jt=t.createContext(null),mt=t.createContext({});function Ot(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(zn(e)){var a=e.nodeName.toLowerCase(),o=["input","select","textarea","button"].includes(a)||e.isContentEditable||a==="a"&&!!e.getAttribute("href"),r=e.getAttribute("tabindex"),l=Number(r),i=null;return r&&!Number.isNaN(l)?i=l:o&&i===null&&(i=0),o&&e.disabled&&(i=null),i!==null&&(i>=0||n&&i<0)}return!1}function Gt(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,a=pe(e.querySelectorAll("*")).filter(function(o){return Ot(o,n)});return Ot(e,n)&&a.unshift(e),a}var ut=te.LEFT,st=te.RIGHT,ct=te.UP,Je=te.DOWN,Ze=te.ENTER,qt=te.ESC,$e=te.HOME,De=te.END,_t=[ct,Je,ut,st];function er(e,n,a,o){var r,l,i,u,s="prev",c="next",m="children",g="parent";if(e==="inline"&&o===Ze)return{inlineTrigger:!0};var d=(r={},w(r,ct,s),w(r,Je,c),r),h=(l={},w(l,ut,a?c:s),w(l,st,a?s:c),w(l,Je,m),w(l,Ze,m),l),v=(i={},w(i,ct,s),w(i,Je,c),w(i,Ze,m),w(i,qt,g),w(i,ut,a?m:g),w(i,st,a?g:m),i),y={inline:d,horizontal:h,vertical:v,inlineSub:d,horizontalSub:v,verticalSub:v},M=(u=y["".concat(e).concat(n?"":"Sub")])===null||u===void 0?void 0:u[o];switch(M){case s:return{offset:-1,sibling:!0};case c:return{offset:1,sibling:!0};case g:return{offset:-1,sibling:!1};case m:return{offset:1,sibling:!1};default:return null}}function tr(e){for(var n=e;n;){if(n.getAttribute("data-menu-list"))return n;n=n.parentElement}return null}function nr(e,n){for(var a=e||document.activeElement;a;){if(n.has(a))return a;a=a.parentElement}return null}function Bt(e,n){var a=Gt(e,!0);return a.filter(function(o){return n.has(o)})}function At(e,n,a){var o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;if(!e)return null;var r=Bt(e,n),l=r.length,i=r.findIndex(function(u){return a===u});return o<0?i===-1?i=l-1:i-=1:o>0&&(i+=1),i=(i+l)%l,r[i]}function rr(e,n,a,o,r,l,i,u,s,c){var m=t.useRef(),g=t.useRef();g.current=n;var d=function(){Re.cancel(m.current)};return t.useEffect(function(){return function(){d()}},[]),function(h){var v=h.which;if([].concat(_t,[Ze,qt,$e,De]).includes(v)){var y,M,S,O=function(){y=new Set,M=new Map,S=new Map;var V=l();return V.forEach(function(k){var A=document.querySelector("[data-menu-id='".concat(ft(o,k),"']"));A&&(y.add(A),S.set(A,k),M.set(k,A))}),y};O();var C=M.get(n),p=nr(C,y),b=S.get(p),f=er(e,i(b,!0).length===1,a,v);if(!f&&v!==$e&&v!==De)return;(_t.includes(v)||[$e,De].includes(v))&&h.preventDefault();var U=function(V){if(V){var k=V,A=V.querySelector("a");A!=null&&A.getAttribute("href")&&(k=A);var ne=S.get(V);u(ne),d(),m.current=Re(function(){g.current===ne&&k.focus()})}};if([$e,De].includes(v)||f.sibling||!p){var P;!p||e==="inline"?P=r.current:P=tr(p);var W,T=Bt(P,y);v===$e?W=T[0]:v===De?W=T[T.length-1]:W=At(P,y,p,f.offset),U(W)}else if(f.inlineTrigger)s(b);else if(f.offset>0)s(b,!0),d(),m.current=Re(function(){O();var D=p.getAttribute("aria-controls"),V=document.getElementById(D),k=At(V,y);U(k)},5);else if(f.offset<0){var _=i(b,!0),$=_[_.length-2],Z=M.get($);s($,!1),U(Z)}}c==null||c(h)}}function ar(e){Promise.resolve().then(e)}var pt="__RC_UTIL_PATH_SPLIT__",kt=function(n){return n.join(pt)},ir=function(n){return n.split(pt)},dt="rc-menu-more";function or(){var e=t.useState({}),n=F(e,2),a=n[1],o=t.useRef(new Map),r=t.useRef(new Map),l=t.useState([]),i=F(l,2),u=i[0],s=i[1],c=t.useRef(0),m=t.useRef(!1),g=function(){m.current||a({})},d=t.useCallback(function(C,p){var b=kt(p);r.current.set(b,C),o.current.set(C,b),c.current+=1;var f=c.current;ar(function(){f===c.current&&g()})},[]),h=t.useCallback(function(C,p){var b=kt(p);r.current.delete(b),o.current.delete(C)},[]),v=t.useCallback(function(C){s(C)},[]),y=t.useCallback(function(C,p){var b=o.current.get(C)||"",f=ir(b);return p&&u.includes(f[0])&&f.unshift(dt),f},[u]),M=t.useCallback(function(C,p){return C.some(function(b){var f=y(b,!0);return f.includes(p)})},[y]),S=function(){var p=pe(o.current.keys());return u.length&&p.push(dt),p},O=t.useCallback(function(C){var p="".concat(o.current.get(C)).concat(pt),b=new Set;return pe(r.current.keys()).forEach(function(f){f.startsWith(p)&&b.add(r.current.get(f))}),b},[]);return t.useEffect(function(){return function(){m.current=!0}},[]),{registerPath:d,unregisterPath:h,refreshOverflowKeys:v,isSubPathKey:M,getKeyPath:y,getKeys:S,getSubPathKeys:O}}function Ee(e){var n=t.useRef(e);n.current=e;var a=t.useCallback(function(){for(var o,r=arguments.length,l=new Array(r),i=0;i1&&(O.motionAppear=!1);var C=O.onVisibleChanged;return O.onVisibleChanged=function(p){return!d.current&&!p&&M(!0),C==null?void 0:C(p)},y?null:t.createElement(Ve,{mode:l,locked:!d.current},t.createElement(Vn,B({visible:S},O,{forceRender:s,removeOnLeave:!1,leavedClassName:"".concat(u,"-hidden")}),function(p){var b=p.className,f=p.style;return t.createElement(ht,{id:n,className:b,style:f},r)}))}var Rr=["style","className","title","eventKey","warnKey","disabled","internalPopupClose","children","itemIcon","expandIcon","popupClassName","popupOffset","onClick","onMouseEnter","onMouseLeave","onTitleClick","onTitleMouseEnter","onTitleMouseLeave"],Pr=["active"],xr=function(n){var a,o=n.style,r=n.className,l=n.title,i=n.eventKey;n.warnKey;var u=n.disabled,s=n.internalPopupClose,c=n.children,m=n.itemIcon,g=n.expandIcon,d=n.popupClassName,h=n.popupOffset,v=n.onClick,y=n.onMouseEnter,M=n.onMouseLeave,S=n.onTitleClick,O=n.onTitleMouseEnter,C=n.onTitleMouseLeave,p=Y(n,Rr),b=Ut(i),f=t.useContext(ee),U=f.prefixCls,P=f.mode,W=f.openKeys,T=f.disabled,_=f.overflowDisabled,$=f.activeKey,Z=f.selectedKeys,D=f.itemIcon,V=f.expandIcon,k=f.onItemClick,A=f.onOpenChange,ne=f.onActive,le=t.useContext(mt),re=le._internalRenderSubMenuItem,Q=t.useContext(jt),L=Q.isSubPathKey,I=Fe(),R="".concat(U,"-submenu"),H=T||u,ge=t.useRef(),he=t.useRef(),de=m||D,ue=g||V,j=W.includes(i),z=!_&&j,ze=L(Z,i),Ue=Yt(i,H,O,C),Pe=Ue.active,xe=Y(Ue,Pr),we=t.useState(!1),We=F(we,2),Ne=We[0],He=We[1],je=function(J){H||He(J)},ae=function(J){je(!0),y==null||y({key:i,domEvent:J})},nt=function(J){je(!1),M==null||M({key:i,domEvent:J})},Ke=t.useMemo(function(){return Pe||(P!=="inline"?Ne||L([$],i):!1)},[P,Pe,$,Ne,i,L]),Ge=Xt(I.length),rt=function(J){H||(S==null||S({key:i,domEvent:J}),P==="inline"&&A(i,!j))},Ce=Ee(function(ie){v==null||v(Qe(ie)),k(ie)}),Oe=function(J){P!=="inline"&&A(i,J)},_e=function(){ne(i)},Ae=b&&"".concat(b,"-popup"),be=t.createElement("div",B({role:"menuitem",style:Ge,className:"".concat(R,"-title"),tabIndex:H?null:-1,ref:ge,title:typeof l=="string"?l:null,"data-menu-id":_&&b?null:b,"aria-expanded":z,"aria-haspopup":!0,"aria-controls":Ae,"aria-disabled":H,onClick:rt,onFocus:_e},xe),l,t.createElement(Jt,{icon:P!=="horizontal"?ue:null,props:N(N({},n),{},{isOpen:z,isSubMenu:!0})},t.createElement("i",{className:"".concat(R,"-arrow")}))),X=t.useRef(P);if(P!=="inline"&&I.length>1?X.current="vertical":X.current=P,!_){var ye=X.current;be=t.createElement(Sr,{mode:ye,prefixCls:R,visible:!s&&z&&P!=="inline",popupClassName:d,popupOffset:h,popup:t.createElement(Ve,{mode:ye==="horizontal"?"vertical":ye},t.createElement(ht,{id:Ae,ref:he},c)),disabled:H,onVisibleChange:Oe},be)}var ve=t.createElement(Te.Item,B({role:"none"},p,{component:"li",style:o,className:oe(R,"".concat(R,"-").concat(P),r,(a={},w(a,"".concat(R,"-open"),z),w(a,"".concat(R,"-active"),Ke),w(a,"".concat(R,"-selected"),ze),w(a,"".concat(R,"-disabled"),H),a)),onMouseEnter:ae,onMouseLeave:nt}),be,!_&&t.createElement(Er,{id:Ae,open:z,keyPath:I},c));return re&&(ve=re(ve,n,{selected:ze,active:Ke,open:z,disabled:H})),t.createElement(Ve,{onItemClick:Ce,mode:P==="horizontal"?"vertical":P,itemIcon:de,expandIcon:ue},ve)};function bt(e){var n=e.eventKey,a=e.children,o=Fe(n),r=Ct(a,o),l=et();t.useEffect(function(){if(l)return l.registerPath(n,o),function(){l.unregisterPath(n,o)}},[o]);var i;return l?i=r:i=t.createElement(xr,e,r),t.createElement(Ht.Provider,{value:o},i)}var wr=["prefixCls","rootClassName","style","className","tabIndex","items","children","direction","id","mode","inlineCollapsed","disabled","disabledOverflow","subMenuOpenDelay","subMenuCloseDelay","forceSubMenuRender","defaultOpenKeys","openKeys","activeKey","defaultActiveFirst","selectable","multiple","defaultSelectedKeys","selectedKeys","onSelect","onDeselect","inlineIndent","motion","defaultMotions","triggerSubMenuAction","builtinPlacements","itemIcon","expandIcon","overflowedIndicator","overflowedIndicatorPopupClassName","getPopupContainer","onClick","onOpenChange","onKeyDown","openAnimation","openTransitionName","_internalRenderMenuItem","_internalRenderSubMenuItem"],Ie=[],Nr=t.forwardRef(function(e,n){var a,o,r=e,l=r.prefixCls,i=l===void 0?"rc-menu":l,u=r.rootClassName,s=r.style,c=r.className,m=r.tabIndex,g=m===void 0?0:m,d=r.items,h=r.children,v=r.direction,y=r.id,M=r.mode,S=M===void 0?"vertical":M,O=r.inlineCollapsed,C=r.disabled,p=r.disabledOverflow,b=r.subMenuOpenDelay,f=b===void 0?.1:b,U=r.subMenuCloseDelay,P=U===void 0?.1:U,W=r.forceSubMenuRender,T=r.defaultOpenKeys,_=r.openKeys,$=r.activeKey,Z=r.defaultActiveFirst,D=r.selectable,V=D===void 0?!0:D,k=r.multiple,A=k===void 0?!1:k,ne=r.defaultSelectedKeys,le=r.selectedKeys,re=r.onSelect,Q=r.onDeselect,L=r.inlineIndent,I=L===void 0?24:L,R=r.motion,H=r.defaultMotions,ge=r.triggerSubMenuAction,he=ge===void 0?"hover":ge,de=r.builtinPlacements,ue=r.itemIcon,j=r.expandIcon,z=r.overflowedIndicator,ze=z===void 0?"...":z,Ue=r.overflowedIndicatorPopupClassName,Pe=r.getPopupContainer,xe=r.onClick,we=r.onOpenChange,We=r.onKeyDown;r.openAnimation,r.openTransitionName;var Ne=r._internalRenderMenuItem,He=r._internalRenderSubMenuItem,je=Y(r,wr),ae=t.useMemo(function(){return br(h,d,Ie)},[h,d]),nt=t.useState(!1),Ke=F(nt,2),Ge=Ke[0],rt=Ke[1],Ce=t.useRef(),Oe=ur(y),_e=v==="rtl",Ae=Xe(T,{value:_,postState:function(E){return E||Ie}}),be=F(Ae,2),X=be[0],ye=be[1],ve=function(E){var x=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;function G(){ye(E),we==null||we(E)}x?Fn.flushSync(G):G()},ie=t.useState(X),J=F(ie,2),tn=J[0],nn=J[1],at=t.useRef(!1),rn=t.useMemo(function(){return(S==="inline"||S==="vertical")&&O?["vertical",O]:[S,!1]},[S,O]),yt=F(rn,2),qe=yt[0],it=yt[1],It=qe==="inline",an=t.useState(qe),Mt=F(an,2),se=Mt[0],on=Mt[1],ln=t.useState(it),St=F(ln,2),un=St[0],sn=St[1];t.useEffect(function(){on(qe),sn(it),at.current&&(It?ye(tn):ve(Ie))},[qe,it]);var cn=t.useState(0),Et=F(cn,2),Be=Et[0],dn=Et[1],ot=Be>=ae.length-1||se!=="horizontal"||p;t.useEffect(function(){It&&nn(X)},[X]),t.useEffect(function(){return at.current=!0,function(){at.current=!1}},[]);var fe=or(),Rt=fe.registerPath,Pt=fe.unregisterPath,vn=fe.refreshOverflowKeys,xt=fe.isSubPathKey,fn=fe.getKeyPath,mn=fe.getKeys,pn=fe.getSubPathKeys,gn=t.useMemo(function(){return{registerPath:Rt,unregisterPath:Pt}},[Rt,Pt]),hn=t.useMemo(function(){return{isSubPathKey:xt}},[xt]);t.useEffect(function(){vn(ot?Ie:ae.slice(Be+1).map(function(K){return K.key}))},[Be,ot]);var Cn=Xe($||Z&&((a=ae[0])===null||a===void 0?void 0:a.key),{value:$}),wt=F(Cn,2),ke=wt[0],lt=wt[1],bn=Ee(function(K){lt(K)}),yn=Ee(function(){lt(void 0)});t.useImperativeHandle(n,function(){return{list:Ce.current,focus:function(E){var x,G=ke??((x=ae.find(function(On){return!On.props.disabled}))===null||x===void 0?void 0:x.key);if(G){var q,me,Le;(q=Ce.current)===null||q===void 0||(me=q.querySelector("li[data-menu-id='".concat(ft(Oe,G),"']")))===null||me===void 0||(Le=me.focus)===null||Le===void 0||Le.call(me,E)}}}});var In=Xe(ne||[],{value:le,postState:function(E){return Array.isArray(E)?E:E==null?Ie:[E]}}),Nt=F(In,2),Ye=Nt[0],Mn=Nt[1],Sn=function(E){if(V){var x=E.key,G=Ye.includes(x),q;A?G?q=Ye.filter(function(Le){return Le!==x}):q=[].concat(pe(Ye),[x]):q=[x],Mn(q);var me=N(N({},E),{},{selectedKeys:q});G?Q==null||Q(me):re==null||re(me)}!A&&X.length&&se!=="inline"&&ve(Ie)},En=Ee(function(K){xe==null||xe(Qe(K)),Sn(K)}),Kt=Ee(function(K,E){var x=X.filter(function(q){return q!==K});if(E)x.push(K);else if(se!=="inline"){var G=pn(K);x=x.filter(function(q){return!G.has(q)})}Vt(X,x,!0)||ve(x,!0)}),Rn=Ee(Pe),Pn=function(E,x){var G=x??!X.includes(E);Kt(E,G)},xn=rr(se,ke,_e,Oe,Ce,mn,fn,lt,Pn,We);t.useEffect(function(){rt(!0)},[]);var wn=t.useMemo(function(){return{_internalRenderMenuItem:Ne,_internalRenderSubMenuItem:He}},[Ne,He]),Nn=se!=="horizontal"||p?ae:ae.map(function(K,E){return t.createElement(Ve,{key:K.key,overflowDisabled:E>Be},K)}),Kn=t.createElement(Te,B({id:y,ref:Ce,prefixCls:"".concat(i,"-overflow"),component:"ul",itemComponent:gt,className:oe(i,"".concat(i,"-root"),"".concat(i,"-").concat(se),c,(o={},w(o,"".concat(i,"-inline-collapsed"),un),w(o,"".concat(i,"-rtl"),_e),o),u),dir:v,style:s,role:"menu",tabIndex:g,data:Nn,renderRawItem:function(E){return E},renderRawRest:function(E){var x=E.length,G=x?ae.slice(-x):null;return t.createElement(bt,{eventKey:dt,title:ze,disabled:ot,internalPopupClose:x===0,popupClassName:Ue},G)},maxCount:se!=="horizontal"||p?Te.INVALIDATE:Te.RESPONSIVE,ssr:"full","data-menu-list":!0,onVisibleChange:function(E){dn(E)},onKeyDown:xn},je));return t.createElement(mt.Provider,{value:wn},t.createElement(zt.Provider,{value:Oe},t.createElement(Ve,{prefixCls:i,rootClassName:u,mode:se,openKeys:X,rtl:_e,disabled:C,motion:Ge?R:null,defaultMotions:Ge?H:null,activeKey:ke,onActive:bn,onInactive:yn,selectedKeys:Ye,inlineIndent:I,subMenuOpenDelay:f,subMenuCloseDelay:P,forceSubMenuRender:W,builtinPlacements:de,triggerSubMenuAction:he,getPopupContainer:Rn,itemIcon:ue,expandIcon:j,onItemClick:En,onOpenChange:Kt},t.createElement(jt.Provider,{value:hn},Kn),t.createElement("div",{style:{display:"none"},"aria-hidden":!0},t.createElement(Wt.Provider,{value:gn},ae)))))}),Kr=["className","title","eventKey","children"],Or=["children"],_r=function(n){var a=n.className,o=n.title;n.eventKey;var r=n.children,l=Y(n,Kr),i=t.useContext(ee),u=i.prefixCls,s="".concat(u,"-item-group");return t.createElement("li",B({role:"presentation"},l,{onClick:function(m){return m.stopPropagation()},className:oe(s,a)}),t.createElement("div",{role:"presentation",className:"".concat(s,"-title"),title:typeof o=="string"?o:void 0},o),t.createElement("ul",{role:"group",className:"".concat(s,"-list")},r))};function Qt(e){var n=e.children,a=Y(e,Or),o=Fe(a.eventKey),r=Ct(n,o),l=et();return l?r:t.createElement(_r,Tt(a,["warnKey"]),r)}function en(e){var n=e.className,a=e.style,o=t.useContext(ee),r=o.prefixCls,l=et();return l?null:t.createElement("li",{className:oe("".concat(r,"-item-divider"),n),style:a})}var tt=Nr;tt.Item=gt;tt.SubMenu=bt;tt.ItemGroup=Qt;tt.Divider=en;var Me={adjustX:1,adjustY:1},Se=[0,0],Ar={topLeft:{points:["bl","tl"],overflow:Me,offset:[0,-4],targetOffset:Se},topCenter:{points:["bc","tc"],overflow:Me,offset:[0,-4],targetOffset:Se},topRight:{points:["br","tr"],overflow:Me,offset:[0,-4],targetOffset:Se},bottomLeft:{points:["tl","bl"],overflow:Me,offset:[0,4],targetOffset:Se},bottomCenter:{points:["tc","bc"],overflow:Me,offset:[0,4],targetOffset:Se},bottomRight:{points:["tr","br"],overflow:Me,offset:[0,4],targetOffset:Se}},kr=te.ESC,Lr=te.TAB;function $r(e){var n=e.visible,a=e.setTriggerVisible,o=e.triggerRef,r=e.onVisibleChange,l=e.autoFocus,i=t.useRef(!1),u=function(){if(n&&o.current){var g,d,h,v;(g=o.current)===null||g===void 0||(d=g.triggerRef)===null||d===void 0||(h=d.current)===null||h===void 0||(v=h.focus)===null||v===void 0||v.call(h),a(!1),typeof r=="function"&&r(!1)}},s=function(){var g,d,h,v,y=Gt((g=o.current)===null||g===void 0||(d=g.popupRef)===null||d===void 0||(h=d.current)===null||h===void 0||(v=h.getElement)===null||v===void 0?void 0:v.call(h)),M=y[0];return M!=null&&M.focus?(M.focus(),i.current=!0,!0):!1},c=function(g){switch(g.keyCode){case kr:u();break;case Lr:{var d=!1;i.current||(d=s()),d?g.preventDefault():u();break}}};t.useEffect(function(){return n?(window.addEventListener("keydown",c),l&&Re(s,3),function(){window.removeEventListener("keydown",c),i.current=!1}):function(){i.current=!1}},[n])}var Dr=["arrow","prefixCls","transitionName","animation","align","placement","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","trigger","autoFocus"];function Tr(e,n){var a=e.arrow,o=a===void 0?!1:a,r=e.prefixCls,l=r===void 0?"rc-dropdown":r,i=e.transitionName,u=e.animation,s=e.align,c=e.placement,m=c===void 0?"bottomLeft":c,g=e.placements,d=g===void 0?Ar:g,h=e.getPopupContainer,v=e.showAction,y=e.hideAction,M=e.overlayClassName,S=e.overlayStyle,O=e.visible,C=e.trigger,p=C===void 0?["hover"]:C,b=e.autoFocus,f=Y(e,Dr),U=t.useState(),P=F(U,2),W=P[0],T=P[1],_="visible"in e?O:W,$=t.useRef(null);t.useImperativeHandle(n,function(){return $.current}),$r({visible:_,setTriggerVisible:T,triggerRef:$,onVisibleChange:e.onVisibleChange,autoFocus:b});var Z=function(){var I=e.overlay,R;return typeof I=="function"?R=I():R=I,R},D=function(I){var R=e.onOverlayClick;T(!1),R&&R(I)},V=function(I){var R=e.onVisibleChange;T(I),typeof R=="function"&&R(I)},k=function(){var I=Z();return t.createElement(t.Fragment,null,o&&t.createElement("div",{className:"".concat(l,"-arrow")}),I)},A=function(){var I=e.overlay;return typeof I=="function"?k:k()},ne=function(){var I=e.minOverlayWidthMatchTrigger,R=e.alignPoint;return"minOverlayWidthMatchTrigger"in e?I:!R},le=function(){var I=e.openClassName;return I!==void 0?I:"".concat(l,"-open")},re=function(){var I=e.children,R=I.props?I.props:{},H=oe(R.className,le());return _&&I?t.cloneElement(I,{className:H}):I},Q=y;return!Q&&p.indexOf("contextMenu")!==-1&&(Q=["click"]),t.createElement(Ft,N(N({builtinPlacements:d},f),{},{prefixCls:l,ref:$,popupClassName:oe(M,w({},"".concat(l,"-show-arrow"),o)),popupStyle:S,action:p,showAction:v,hideAction:Q||[],popupPlacement:m,popupAlign:s,popupTransitionName:i,popupAnimation:u,popupVisible:_,stretch:ne()?"minWidth":"",popup:A(),onPopupVisibleChange:V,onPopupClick:D,getPopupContainer:h}),re())}const jr=t.forwardRef(Tr);export{en as D,Wr as E,gt as M,bt as S,Qt as a,tt as b,Hr as c,jr as d,Fe as u}; diff --git a/dist/assets/PlaySquareOutlined-c471435e.js b/dist/assets/PlaySquareOutlined-02fec6b0.js similarity index 89% rename from dist/assets/PlaySquareOutlined-c471435e.js rename to dist/assets/PlaySquareOutlined-02fec6b0.js index 37d2e6c1daa9d307a49107c913769f7be8d395f9..059a1a3885e34b4e7856c5f0e23195e3dff5ec96 100644 --- a/dist/assets/PlaySquareOutlined-c471435e.js +++ b/dist/assets/PlaySquareOutlined-02fec6b0.js @@ -1 +1 @@ -import{A as c,f as e}from"./_setToString-038b76d7.js";import{r as a}from"./umi-2135699e.js";var l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm-88-532h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zm224 0h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"}}]},name:"pause-circle",theme:"outlined"};const i=l;var s=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:i}))},u=a.forwardRef(s);const P=u;var o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M442.3 677.6l199.4-156.7a11.3 11.3 0 000-17.7L442.3 346.4c-7.4-5.8-18.3-.6-18.3 8.8v313.5c0 9.4 10.9 14.7 18.3 8.9z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"play-square",theme:"outlined"};const d=o;var f=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:d}))},v=a.forwardRef(f);const p=v;export{p as P,P as a}; +import{A as c,f as e}from"./_setToString-64803aa4.js";import{r as a}from"./umi-6680b95f.js";var l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm-88-532h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zm224 0h-48c-4.4 0-8 3.6-8 8v304c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"}}]},name:"pause-circle",theme:"outlined"};const i=l;var s=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:i}))},u=a.forwardRef(s);const P=u;var o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M442.3 677.6l199.4-156.7a11.3 11.3 0 000-17.7L442.3 346.4c-7.4-5.8-18.3-.6-18.3 8.8v313.5c0 9.4 10.9 14.7 18.3 8.9z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"play-square",theme:"outlined"};const d=o;var f=function(t,r){return a.createElement(c,e(e({},t),{},{ref:r,icon:d}))},v=a.forwardRef(f);const p=v;export{p as P,P as a}; diff --git a/dist/assets/ScoreEncoder-da446433.js b/dist/assets/ScoreEncoder-5eb12d5d.js similarity index 55% rename from dist/assets/ScoreEncoder-da446433.js rename to dist/assets/ScoreEncoder-5eb12d5d.js index 8db81df2d7a84f44007eeb092ec8e00f42fd3b73..6ac7c02d5c65d53f75e7052f70242ac29fe118f3 100644 --- a/dist/assets/ScoreEncoder-da446433.js +++ b/dist/assets/ScoreEncoder-5eb12d5d.js @@ -1,4 +1,4 @@ -import{r as bo,s as Uo,g as qo,c as R,j as E}from"./umi-2135699e.js";import{W as Wo,a as I,b as Vo,E as Qo,H as Ae}from"./index-22b5485d.js";function $o(e){return{alter:e.alter,step:"CDEFGAB"[(e.note+98)%7],octave:Math.floor(e.note/7)+4}}function Ho(e){return{10:"1024th",9:"512th",8:"256th",7:"128th",6:"64th",5:"32nd",4:"16th",3:"eighth",2:"quarter",1:"half",0:"whole"}[e]}const gl=Wo/4,Jo=40;var yl={exports:{}},$t={},vl={exports:{}},F={};/** +import{r as bo,s as Uo,g as qo,c as R,j as D,R as Wo}from"./umi-6680b95f.js";import"./parser-287f5adf.js";import{W as Vo,a as O,b as Qo,E as $o,A as be}from"./index-a138b2fd.js";const gl=Vo/4,Ho=40;var yl={exports:{}},Kt={},vl={exports:{}},F={};/** * @license React * scheduler-unstable_mock.production.min.js * @@ -6,7 +6,7 @@ import{r as bo,s as Uo,g as qo,c as R,j as E}from"./umi-2135699e.js";import{W as * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */function Vn(e,t){var r=e.length;e.push(t);e:for(;0>>1,s=e[n];if(0>>1;nlr(o,r))ulr(d,o)?(e[n]=d,e[u]=r,n=u):(e[n]=o,e[l]=r,n=l);else if(ulr(d,r))e[n]=d,e[u]=r,n=u;else break e}}return t}function lr(e,t){var r=e.sortIndex-t.sortIndex;return r!==0?r:e.id-t.id}var Oe=[],We=[],Ko=1,de=null,G=3,yr=!1,at=!1,At=!1,oe=0,ee=null,Xe=null,Ye=-1,pe=null,xt=-1,Et=!1,ue=!1,zr=!1,Qn=!1,xi=!1;function $n(e){for(var t=Se(We);t!==null;){if(t.callback===null)gr(We);else if(t.startTime<=e)gr(We),t.sortIndex=t.expirationTime,Vn(Oe,t);else break;t=Se(We)}}function Si(e){if(At=!1,$n(e),!at)if(Se(Oe)!==null)at=!0,ee=Ti;else{var t=Se(We);t!==null&&(e=t.startTime-e,Xe=Si,Ye=oe+e)}}function Ti(e,t){at=!1,At&&(At=!1,Xe=null,Ye=-1),yr=!0;var r=G;try{for($n(t),de=Se(Oe);de!==null&&(!(de.expirationTime>t)||e&&!wl());){var n=de.callback;if(typeof n=="function"){de.callback=null,G=de.priorityLevel;var s=n(de.expirationTime<=t);t=oe,typeof s=="function"?de.callback=s:de===Se(Oe)&&gr(Oe),$n(t)}else gr(Oe);de=Se(Oe)}if(de!==null)var i=!0;else{var l=Se(We);if(l!==null){var o=l.startTime-t;Xe=Si,Ye=oe+o}i=!1}return i}finally{de=null,G=r,yr=!1}}function wl(){return xt===0&&pe===null||xt!==-1&&pe!==null&&pe.length>=xt||Qn&&zr?Et=!0:!1}function xl(){if(ue)throw Error("Already flushing work.");if(ee!==null){var e=ee;ue=!0;try{var t=!0;do t=e(!0,oe);while(t);return t||(ee=null),!0}finally{ue=!1}}else return!1}F.reset=function(){if(ue)throw Error("Cannot reset while already flushing work.");oe=0,Xe=ee=null,Ye=-1,pe=null,xt=-1,zr=ue=Et=!1};F.unstable_IdlePriority=5;F.unstable_ImmediatePriority=1;F.unstable_LowPriority=4;F.unstable_NormalPriority=3;F.unstable_Profiling=null;F.unstable_UserBlockingPriority=2;F.unstable_advanceTime=function(e){console.log.name==="disabledLog"||xi||(oe+=e,Xe!==null&&Ye<=oe&&(Xe(oe),Ye=-1,Xe=null))};F.unstable_cancelCallback=function(e){e.callback=null};F.unstable_clearYields=function(){if(pe===null)return[];var e=pe;return pe=null,e};F.unstable_continueExecution=function(){at||yr||(at=!0,ee=Ti)};F.unstable_flushAll=function(){if(pe!==null)throw Error("Log is not empty. Assert on the log of yielded values before flushing additional work.");if(xl(),pe!==null)throw Error("While flushing work, something yielded a value. Use an assertion helper to assert on the log of yielded values, e.g. expect(Scheduler).toFlushAndYield([...])")};F.unstable_flushAllWithoutAsserting=xl;F.unstable_flushExpired=function(){if(ue)throw Error("Already flushing work.");if(ee!==null){ue=!0;try{ee(!1,oe)||(ee=null)}finally{ue=!1}}};F.unstable_flushNumberOfYields=function(e){if(ue)throw Error("Already flushing work.");if(ee!==null){var t=ee;xt=e,ue=!0;try{e=!0;do e=t(!0,oe);while(e&&!Et);e||(ee=null)}finally{xt=-1,ue=Et=!1}}};F.unstable_flushUntilNextPaint=function(){if(ue)throw Error("Already flushing work.");if(ee!==null){var e=ee;Qn=!0,zr=!1,ue=!0;try{var t=!0;do t=e(!0,oe);while(t&&!Et);t||(ee=null)}finally{ue=Et=Qn=!1}}};F.unstable_forceFrameRate=function(){};F.unstable_getCurrentPriorityLevel=function(){return G};F.unstable_getFirstCallbackNode=function(){return Se(Oe)};F.unstable_next=function(e){switch(G){case 1:case 2:case 3:var t=3;break;default:t=G}var r=G;G=t;try{return e()}finally{G=r}};F.unstable_now=function(){return oe};F.unstable_pauseExecution=function(){};F.unstable_requestPaint=function(){zr=!0};F.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=G;G=e;try{return t()}finally{G=r}};F.unstable_scheduleCallback=function(e,t,r){var n=oe;switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0n?(e.sortIndex=r,Vn(We,e),Se(Oe)===null&&e===Se(We)&&(At?(Xe=null,Ye=-1):At=!0,Xe=Si,Ye=oe+(r-n))):(e.sortIndex=s,Vn(Oe,e),at||yr||(at=!0,ee=Ti)),e};F.unstable_setDisableYieldValue=function(e){xi=e};F.unstable_shouldYield=wl;F.unstable_wrapCallback=function(e){var t=G;return function(){var r=G;G=t;try{return e.apply(this,arguments)}finally{G=r}}};F.unstable_yieldValue=function(e){console.log.name==="disabledLog"||xi||(pe===null?pe=[e]:pe.push(e))};vl.exports=F;var Yo=vl.exports;/** + */function Qn(e,t){var r=e.length;e.push(t);e:for(;0>>1,s=e[n];if(0>>1;nar(o,r))uar(d,o)?(e[n]=d,e[u]=r,n=u):(e[n]=o,e[l]=r,n=l);else if(uar(d,r))e[n]=d,e[u]=r,n=u;else break e}}return t}function ar(e,t){var r=e.sortIndex-t.sortIndex;return r!==0?r:e.id-t.id}var Ie=[],Ve=[],Jo=1,pe=null,G=3,xr=!1,ct=!1,qt=!1,ue=0,ee=null,Fe=null,Ze=-1,ge=null,Tt=-1,Lt=!1,ae=!1,Ar=!1,$n=!1,Si=!1;function Hn(e){for(var t=De(Ve);t!==null;){if(t.callback===null)wr(Ve);else if(t.startTime<=e)wr(Ve),t.sortIndex=t.expirationTime,Qn(Ie,t);else break;t=De(Ve)}}function Ti(e){if(qt=!1,Hn(e),!ct)if(De(Ie)!==null)ct=!0,ee=Di;else{var t=De(Ve);t!==null&&(e=t.startTime-e,Fe=Ti,Ze=ue+e)}}function Di(e,t){ct=!1,qt&&(qt=!1,Fe=null,Ze=-1),xr=!0;var r=G;try{for(Hn(t),pe=De(Ie);pe!==null&&(!(pe.expirationTime>t)||e&&!wl());){var n=pe.callback;if(typeof n=="function"){pe.callback=null,G=pe.priorityLevel;var s=n(pe.expirationTime<=t);t=ue,typeof s=="function"?pe.callback=s:pe===De(Ie)&&wr(Ie),Hn(t)}else wr(Ie);pe=De(Ie)}if(pe!==null)var i=!0;else{var l=De(Ve);if(l!==null){var o=l.startTime-t;Fe=Ti,Ze=ue+o}i=!1}return i}finally{pe=null,G=r,xr=!1}}function wl(){return Tt===0&&ge===null||Tt!==-1&&ge!==null&&ge.length>=Tt||$n&&Ar?Lt=!0:!1}function xl(){if(ae)throw Error("Already flushing work.");if(ee!==null){var e=ee;ae=!0;try{var t=!0;do t=e(!0,ue);while(t);return t||(ee=null),!0}finally{ae=!1}}else return!1}F.reset=function(){if(ae)throw Error("Cannot reset while already flushing work.");ue=0,Fe=ee=null,Ze=-1,ge=null,Tt=-1,Ar=ae=Lt=!1};F.unstable_IdlePriority=5;F.unstable_ImmediatePriority=1;F.unstable_LowPriority=4;F.unstable_NormalPriority=3;F.unstable_Profiling=null;F.unstable_UserBlockingPriority=2;F.unstable_advanceTime=function(e){console.log.name==="disabledLog"||Si||(ue+=e,Fe!==null&&Ze<=ue&&(Fe(ue),Ze=-1,Fe=null))};F.unstable_cancelCallback=function(e){e.callback=null};F.unstable_clearYields=function(){if(ge===null)return[];var e=ge;return ge=null,e};F.unstable_continueExecution=function(){ct||xr||(ct=!0,ee=Di)};F.unstable_flushAll=function(){if(ge!==null)throw Error("Log is not empty. Assert on the log of yielded values before flushing additional work.");if(xl(),ge!==null)throw Error("While flushing work, something yielded a value. Use an assertion helper to assert on the log of yielded values, e.g. expect(Scheduler).toFlushAndYield([...])")};F.unstable_flushAllWithoutAsserting=xl;F.unstable_flushExpired=function(){if(ae)throw Error("Already flushing work.");if(ee!==null){ae=!0;try{ee(!1,ue)||(ee=null)}finally{ae=!1}}};F.unstable_flushNumberOfYields=function(e){if(ae)throw Error("Already flushing work.");if(ee!==null){var t=ee;Tt=e,ae=!0;try{e=!0;do e=t(!0,ue);while(e&&!Lt);e||(ee=null)}finally{Tt=-1,ae=Lt=!1}}};F.unstable_flushUntilNextPaint=function(){if(ae)throw Error("Already flushing work.");if(ee!==null){var e=ee;$n=!0,Ar=!1,ae=!0;try{var t=!0;do t=e(!0,ue);while(t&&!Lt);t||(ee=null)}finally{ae=Lt=$n=!1}}};F.unstable_forceFrameRate=function(){};F.unstable_getCurrentPriorityLevel=function(){return G};F.unstable_getFirstCallbackNode=function(){return De(Ie)};F.unstable_next=function(e){switch(G){case 1:case 2:case 3:var t=3;break;default:t=G}var r=G;G=t;try{return e()}finally{G=r}};F.unstable_now=function(){return ue};F.unstable_pauseExecution=function(){};F.unstable_requestPaint=function(){Ar=!0};F.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var r=G;G=e;try{return t()}finally{G=r}};F.unstable_scheduleCallback=function(e,t,r){var n=ue;switch(typeof r=="object"&&r!==null?(r=r.delay,r=typeof r=="number"&&0n?(e.sortIndex=r,Qn(Ve,e),De(Ie)===null&&e===De(Ve)&&(qt?(Fe=null,Ze=-1):qt=!0,Fe=Ti,Ze=ue+(r-n))):(e.sortIndex=s,Qn(Ie,e),ct||xr||(ct=!0,ee=Di)),e};F.unstable_setDisableYieldValue=function(e){Si=e};F.unstable_shouldYield=wl;F.unstable_wrapCallback=function(e){var t=G;return function(){var r=G;G=t;try{return e.apply(this,arguments)}finally{G=r}}};F.unstable_yieldValue=function(e){console.log.name==="disabledLog"||Si||(ge===null?ge=[e]:ge.push(e))};vl.exports=F;var Ko=vl.exports;/** * @license React * react-test-renderer.production.min.js * @@ -14,22 +14,22 @@ import{r as bo,s as Uo,g as qo,c as R,j as E}from"./umi-2135699e.js";import{W as * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Sl=bo,Tl=Yo,ze=Uo;function hs(e,t){for(var r=0;r>>=0,e===0?32:31-(su(e)/lu|0)|0}var Yt=64,Zt=4194304;function Gt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function wr(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,s=e.suspendedLanes,i=e.pingedLanes,l=r&268435455;if(l!==0){var o=l&~s;o!==0?n=Gt(o):(i&=l,i!==0&&(n=Gt(i)))}else l=r&~s,l!==0?n=Gt(l):i!==0&&(n=Gt(i));if(n===0)return 0;if(t!==0&&t!==n&&!(t&s)&&(s=n&-n,i=t&-t,s>=i||s===16&&(i&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function Ar(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ft(t),e[t]=r}function au(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0>>=0,e===0?32:31-(iu(e)/su|0)|0}var er=64,tr=4194304;function rr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Tr(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,s=e.suspendedLanes,i=e.pingedLanes,l=r&268435455;if(l!==0){var o=l&~s;o!==0?n=rr(o):(i&=l,i!==0&&(n=rr(i)))}else l=r&~s,l!==0?n=rr(l):i!==0&&(n=rr(i));if(n===0)return 0;if(t!==0&&t!==n&&!(t&s)&&(s=n&-n,i=t&-t,s>=i||s===16&&(i&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function qr(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-pt(t),e[t]=r}function uu(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0o||s[l]!==i[o]){var u=` -`+s[l].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=l&&0<=o);break}}}finally{Zr=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?Ft(e):""}var fu=Object.prototype.hasOwnProperty,ti=[],yt=-1;function et(e){return{current:e}}function B(e){0>yt||(e.current=ti[yt],ti[yt]=null,yt--)}function z(e,t){yt++,ti[yt]=e.current,e.current=t}var Ze={},te=et(Ze),ae=et(!1),ct=Ze;function Nt(e,t){var r=e.type.contextTypes;if(!r)return Ze;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var s={},i;for(i in r)s[i]=t[i];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function ce(e){return e=e.childContextTypes,e!=null}function Sr(){B(ae),B(te)}function gs(e,t,r){if(te.current!==Ze)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");z(te,t),z(ae,r)}function jl(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var s in n)if(!(s in t))throw Error((Go(e)||"Unknown")+'.getChildContext(): key "'+s+'" is not defined in childContextTypes.');return st({},r,n)}function Tr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ze,ct=te.current,z(te,e),z(ae,ae.current),!0}function ys(e,t,r){var n=e.stateNode;if(!n)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");r?(e=jl(e,t,ct),n.__reactInternalMemoizedMergedChildContext=e,B(ae),B(te),z(te,e)):B(ae),z(ae,r)}function pu(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var De=typeof Object.is=="function"?Object.is:pu,fe=null,br=!1,en=!1;function pt(){if(!en&&fe!==null){en=!0;var e=0,t=$;try{var r=fe;for($=1;e")&&(u=u.replace("",e.displayName)),u}while(1<=l&&0<=o);break}}}finally{Gr=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?_t(e):""}var du=Object.prototype.hasOwnProperty,ri=[],wt=-1;function tt(e){return{current:e}}function _(e){0>wt||(e.current=ri[wt],ri[wt]=null,wt--)}function z(e,t){wt++,ri[wt]=e.current,e.current=t}var Ge={},te=tt(Ge),ce=tt(!1),ht=Ge;function Mt(e,t){var r=e.type.contextTypes;if(!r)return Ge;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var s={},i;for(i in r)s[i]=t[i];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function he(e){return e=e.childContextTypes,e!=null}function Er(){_(ce),_(te)}function gs(e,t,r){if(te.current!==Ge)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");z(te,t),z(ce,r)}function jl(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var s in n)if(!(s in t))throw Error((Zo(e)||"Unknown")+'.getChildContext(): key "'+s+'" is not defined in childContextTypes.');return lt({},r,n)}function Nr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ge,ht=te.current,z(te,e),z(ce,ce.current),!0}function ys(e,t,r){var n=e.stateNode;if(!n)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");r?(e=jl(e,t,ht),n.__reactInternalMemoizedMergedChildContext=e,_(ce),_(te),z(te,e)):_(ce),z(ce,r)}function fu(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Ne=typeof Object.is=="function"?Object.is:fu,me=null,Wr=!1,tn=!1;function mt(){if(!tn&&me!==null){tn=!0;var e=0,t=$;try{var r=me;for($=1;eh?(y=S,S=null):y=S.sibling;var T=v(x,S,w[h],a);if(T===null){S===null&&(S=y);break}e&&S&&T.alternate===null&&t(x,S),f=i(T,f,h),m===null?p=T:m.sibling=T,m=T,S=y}if(h===w.length)return r(x,S),p;if(S===null){for(;hh?(y=S,S=null):y=S.sibling;var M=v(x,S,T.value,a);if(M===null){S===null&&(S=y);break}e&&S&&M.alternate===null&&t(x,S),f=i(M,f,h),m===null?p=M:m.sibling=M,m=M,S=y}if(T.done)return r(x,S),p;if(S===null){for(;!T.done;h++,T=w.next())T=g(x,T.value,a),T!==null&&(f=i(T,f,h),m===null?p=T:m.sibling=T,m=T);return p}for(S=n(x,S);!T.done;h++,T=w.next())T=D(S,x,h,T.value,a),T!==null&&(e&&T.alternate!==null&&S.delete(T.key===null?h:T.key),f=i(T,f,h),m===null?p=T:m.sibling=T,m=T);return e&&S.forEach(function(C){return t(x,C)}),p}function k(x,f,w,a){if(typeof w=="object"&&w!==null&&w.type===gt&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case Kt:e:{for(var p=w.key,m=f;m!==null;){if(m.key===p){if(p=w.type,p===gt){if(m.tag===7){r(x,m.sibling),f=s(m,w.props.children),f.return=x,x=f;break e}}else if(m.elementType===p||typeof p=="object"&&p!==null&&p.$$typeof===be&&xs(p)===m.type){r(x,m.sibling),f=s(m,w.props),f.ref=Ct(x,m,w),f.return=x,x=f;break e}r(x,m);break}else t(x,m);m=m.sibling}w.type===gt?(f=ut(w.props.children,x.mode,a,w.key),f.return=x,x=f):(a=fr(w.type,w.key,w.props,null,x.mode,a),a.ref=Ct(x,f,w),a.return=x,x=a)}return l(x);case Rt:e:{for(m=w.key;f!==null;){if(f.key===m)if(f.tag===4&&f.stateNode.containerInfo===w.containerInfo&&f.stateNode.implementation===w.implementation){r(x,f.sibling),f=s(f,w.children||[]),f.return=x,x=f;break e}else{r(x,f);break}else t(x,f);f=f.sibling}f=cn(w,x.mode,a),f.return=x,x=f}return l(x);case be:return m=w._init,k(x,f,m(w._payload),a)}if(Xt(w))return L(x,f,w,a);if(It(w))return O(x,f,w,a);rr(x,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,f!==null&&f.tag===6?(r(x,f.sibling),f=s(f,w),f.return=x,x=f):(r(x,f),f=an(w,x.mode,a),f.return=x,x=f),l(x)):r(x,f)}return k}var Lt=Rl(!0),yu=Rl(!1),Er=et(null),Nr=null,vt=null,Oi=null;function Ii(){Oi=vt=Nr=null}function Ci(e){var t=Er.current;B(Er),e._currentValue2=t}function ri(e,t,r){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function St(e,t){Nr=e,Oi=vt=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(le=!0),e.firstContext=null)}function ye(e){var t=e._currentValue2;if(Oi!==e)if(e={context:e,memoizedValue:t,next:null},vt===null){if(Nr===null)throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");vt=e,Nr.dependencies={lanes:0,firstContext:e}}else vt=vt.next=e;return t}var nt=null;function Pi(e){nt===null?nt=[e]:nt.push(e)}function Xl(e,t,r,n){var s=t.interleaved;return s===null?(r.next=r,Pi(t)):(r.next=s.next,s.next=r),t.interleaved=r,Mt(e,n)}function Mt(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var Ue=!1;function ki(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Fl(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function $e(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function lt(e,t,r){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,X&2){var s=n.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),n.pending=t,Mt(e,r)}return s=n.interleaved,s===null?(t.next=t,Pi(n)):(t.next=s.next,s.next=t),n.interleaved=t,Mt(e,r)}function or(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Il(e,r)}}function Ss(e,t){var r=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var s=null,i=null;if(r=r.firstBaseUpdate,r!==null){do{var l={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};i===null?s=i=l:i=i.next=l,r=r.next}while(r!==null);i===null?s=i=t:i=i.next=t}else s=i=t;r={baseState:n.baseState,firstBaseUpdate:s,lastBaseUpdate:i,shared:n.shared,effects:n.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Lr(e,t,r,n){var s=e.updateQueue;Ue=!1;var i=s.firstBaseUpdate,l=s.lastBaseUpdate,o=s.shared.pending;if(o!==null){s.shared.pending=null;var u=o,d=u.next;u.next=null,l===null?i=d:l.next=d,l=u;var c=e.alternate;c!==null&&(c=c.updateQueue,o=c.lastBaseUpdate,o!==l&&(o===null?c.firstBaseUpdate=d:o.next=d,c.lastBaseUpdate=u))}if(i!==null){var g=s.baseState;l=0,c=d=u=null,o=i;do{var v=o.lane,D=o.eventTime;if((n&v)===v){c!==null&&(c=c.next={eventTime:D,lane:0,tag:o.tag,payload:o.payload,callback:o.callback,next:null});e:{var L=e,O=o;switch(v=t,D=r,O.tag){case 1:if(L=O.payload,typeof L=="function"){g=L.call(D,g,v);break e}g=L;break e;case 3:L.flags=L.flags&-65537|128;case 0:if(L=O.payload,v=typeof L=="function"?L.call(D,g,v):L,v==null)break e;g=st({},g,v);break e;case 2:Ue=!0}}o.callback!==null&&o.lane!==0&&(e.flags|=64,v=s.effects,v===null?s.effects=[o]:v.push(o))}else D={eventTime:D,lane:v,tag:o.tag,payload:o.payload,callback:o.callback,next:null},c===null?(d=c=D,u=g):c=c.next=D,l|=v;if(o=o.next,o===null){if(o=s.shared.pending,o===null)break;v=o,o=v.next,v.next=null,s.lastBaseUpdate=v,s.shared.pending=null}}while(1);if(c===null&&(u=g),s.baseState=u,s.firstBaseUpdate=d,s.lastBaseUpdate=c,t=s.shared.interleaved,t!==null){s=t;do l|=s.lane,s=s.next;while(s!==t)}else i===null&&(s.shared.lanes=0);dt|=l,e.lanes=l,e.memoizedState=g}}function Ts(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;th?(y=S,S=null):y=S.sibling;var T=v(x,S,w[h],a);if(T===null){S===null&&(S=y);break}e&&S&&T.alternate===null&&t(x,S),f=i(T,f,h),m===null?p=T:m.sibling=T,m=T,S=y}if(h===w.length)return r(x,S),p;if(S===null){for(;hh?(y=S,S=null):y=S.sibling;var M=v(x,S,T.value,a);if(M===null){S===null&&(S=y);break}e&&S&&M.alternate===null&&t(x,S),f=i(M,f,h),m===null?p=M:m.sibling=M,m=M,S=y}if(T.done)return r(x,S),p;if(S===null){for(;!T.done;h++,T=w.next())T=g(x,T.value,a),T!==null&&(f=i(T,f,h),m===null?p=T:m.sibling=T,m=T);return p}for(S=n(x,S);!T.done;h++,T=w.next())T=E(S,x,h,T.value,a),T!==null&&(e&&T.alternate!==null&&S.delete(T.key===null?h:T.key),f=i(T,f,h),m===null?p=T:m.sibling=T,m=T);return e&&S.forEach(function(C){return t(x,C)}),p}function j(x,f,w,a){if(typeof w=="object"&&w!==null&&w.type===vt&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case Gt:e:{for(var p=w.key,m=f;m!==null;){if(m.key===p){if(p=w.type,p===vt){if(m.tag===7){r(x,m.sibling),f=s(m,w.props.children),f.return=x,x=f;break e}}else if(m.elementType===p||typeof p=="object"&&p!==null&&p.$$typeof===Ue&&xs(p)===m.type){r(x,m.sibling),f=s(m,w.props),f.ref=jt(x,m,w),f.return=x,x=f;break e}r(x,m);break}else t(x,m);m=m.sibling}w.type===vt?(f=at(w.props.children,x.mode,a,w.key),f.return=x,x=f):(a=gr(w.type,w.key,w.props,null,x.mode,a),a.ref=jt(x,f,w),a.return=x,x=a)}return l(x);case zt:e:{for(m=w.key;f!==null;){if(f.key===m)if(f.tag===4&&f.stateNode.containerInfo===w.containerInfo&&f.stateNode.implementation===w.implementation){r(x,f.sibling),f=s(f,w.children||[]),f.return=x,x=f;break e}else{r(x,f);break}else t(x,f);f=f.sibling}f=hn(w,x.mode,a),f.return=x,x=f}return l(x);case Ue:return m=w._init,j(x,f,m(w._payload),a)}if(Bt(w))return L(x,f,w,a);if(kt(w))return I(x,f,w,a);sr(x,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,f!==null&&f.tag===6?(r(x,f.sibling),f=s(f,w),f.return=x,x=f):(r(x,f),f=cn(w,x.mode,a),f.return=x,x=f),l(x)):r(x,f)}return j}var Ot=Rl(!0),gu=Rl(!1),Mr=tt(null),Or=null,xt=null,Ii=null;function Ci(){Ii=xt=Or=null}function Pi(e){var t=Mr.current;_(Mr),e._currentValue2=t}function ni(e,t,r){for(;e!==null;){var n=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,n!==null&&(n.childLanes|=t)):n!==null&&(n.childLanes&t)!==t&&(n.childLanes|=t),e===r)break;e=e.return}}function Dt(e,t){Or=e,Ii=xt=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(oe=!0),e.firstContext=null)}function we(e){var t=e._currentValue2;if(Ii!==e)if(e={context:e,memoizedValue:t,next:null},xt===null){if(Or===null)throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");xt=e,Or.dependencies={lanes:0,firstContext:e}}else xt=xt.next=e;return t}var it=null;function ki(e){it===null?it=[e]:it.push(e)}function Xl(e,t,r,n){var s=t.interleaved;return s===null?(r.next=r,ki(t)):(r.next=s.next,s.next=r),t.interleaved=r,It(e,n)}function It(e,t){e.lanes|=t;var r=e.alternate;for(r!==null&&(r.lanes|=t),r=e,e=e.return;e!==null;)e.childLanes|=t,r=e.alternate,r!==null&&(r.childLanes|=t),r=e,e=e.return;return r.tag===3?r.stateNode:null}var qe=!1;function ji(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Fl(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function He(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ot(e,t,r){var n=e.updateQueue;if(n===null)return null;if(n=n.shared,X&2){var s=n.pending;return s===null?t.next=t:(t.next=s.next,s.next=t),n.pending=t,It(e,r)}return s=n.interleaved,s===null?(t.next=t,ki(n)):(t.next=s.next,s.next=t),n.interleaved=t,It(e,r)}function cr(e,t,r){if(t=t.updateQueue,t!==null&&(t=t.shared,(r&4194240)!==0)){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Il(e,r)}}function Ss(e,t){var r=e.updateQueue,n=e.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var s=null,i=null;if(r=r.firstBaseUpdate,r!==null){do{var l={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};i===null?s=i=l:i=i.next=l,r=r.next}while(r!==null);i===null?s=i=t:i=i.next=t}else s=i=t;r={baseState:n.baseState,firstBaseUpdate:s,lastBaseUpdate:i,shared:n.shared,effects:n.effects},e.updateQueue=r;return}e=r.lastBaseUpdate,e===null?r.firstBaseUpdate=t:e.next=t,r.lastBaseUpdate=t}function Ir(e,t,r,n){var s=e.updateQueue;qe=!1;var i=s.firstBaseUpdate,l=s.lastBaseUpdate,o=s.shared.pending;if(o!==null){s.shared.pending=null;var u=o,d=u.next;u.next=null,l===null?i=d:l.next=d,l=u;var c=e.alternate;c!==null&&(c=c.updateQueue,o=c.lastBaseUpdate,o!==l&&(o===null?c.firstBaseUpdate=d:o.next=d,c.lastBaseUpdate=u))}if(i!==null){var g=s.baseState;l=0,c=d=u=null,o=i;do{var v=o.lane,E=o.eventTime;if((n&v)===v){c!==null&&(c=c.next={eventTime:E,lane:0,tag:o.tag,payload:o.payload,callback:o.callback,next:null});e:{var L=e,I=o;switch(v=t,E=r,I.tag){case 1:if(L=I.payload,typeof L=="function"){g=L.call(E,g,v);break e}g=L;break e;case 3:L.flags=L.flags&-65537|128;case 0:if(L=I.payload,v=typeof L=="function"?L.call(E,g,v):L,v==null)break e;g=lt({},g,v);break e;case 2:qe=!0}}o.callback!==null&&o.lane!==0&&(e.flags|=64,v=s.effects,v===null?s.effects=[o]:v.push(o))}else E={eventTime:E,lane:v,tag:o.tag,payload:o.payload,callback:o.callback,next:null},c===null?(d=c=E,u=g):c=c.next=E,l|=v;if(o=o.next,o===null){if(o=s.shared.pending,o===null)break;v=o,o=v.next,v.next=null,s.lastBaseUpdate=v,s.shared.pending=null}}while(1);if(c===null&&(u=g),s.baseState=u,s.firstBaseUpdate=d,s.lastBaseUpdate=c,t=s.shared.interleaved,t!==null){s=t;do l|=s.lane,s=s.next;while(s!==t)}else i===null&&(s.shared.lanes=0);ft|=l,e.lanes=l,e.memoizedState=g}}function Ts(e,t,r){if(e=t.effects,t.effects=null,e!==null)for(t=0;tr?r:4,e(!0);var n=nn.transition;nn.transition={};try{e(!1),t()}finally{$=r,nn.transition=n}}function Gl(){return ve().memoizedState}function xu(e,t,r){var n=Tt(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},eo(e))to(t,r);else if(r=Xl(e,t,r,n),r!==null){var s=Te();Je(r,e,n,s),ro(r,t,n)}}function Su(e,t,r){var n=Tt(e),s={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(eo(e))to(t,s);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var l=t.lastRenderedState,o=i(l,r);if(s.hasEagerState=!0,s.eagerState=o,De(o,l)){var u=t.interleaved;u===null?(s.next=s,Pi(t)):(s.next=u.next,u.next=s),t.interleaved=s;return}}catch{}finally{}r=Xl(e,t,s,n),r!==null&&(s=Te(),Je(r,e,n,s),ro(r,t,n))}}function eo(e){var t=e.alternate;return e===A||t!==null&&t===A}function to(e,t){zt=Or=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function ro(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Il(e,r)}}var Ir={readContext:ye,useCallback:Y,useContext:Y,useEffect:Y,useImperativeHandle:Y,useInsertionEffect:Y,useLayoutEffect:Y,useMemo:Y,useReducer:Y,useRef:Y,useState:Y,useDebugValue:Y,useDeferredValue:Y,useTransition:Y,useMutableSource:Y,useSyncExternalStore:Y,useId:Y,unstable_isNewReconciler:!1},Tu={readContext:ye,useCallback:function(e,t){return Me().memoizedState=[e,t===void 0?null:t],e},useContext:ye,useEffect:Es,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,ar(4,4,Hl.bind(null,t,e),r)},useLayoutEffect:function(e,t){return ar(4,4,e,t)},useInsertionEffect:function(e,t){return ar(4,2,e,t)},useMemo:function(e,t){var r=Me();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=Me();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=xu.bind(null,A,e),[n.memoizedState,e]},useRef:function(e){var t=Me();return e={current:e},t.memoizedState=e},useState:Ds,useDebugValue:_i,useDeferredValue:function(e){return Me().memoizedState=e},useTransition:function(){var e=Ds(!1),t=e[0];return e=wu.bind(null,e[1]),Me().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t){var r=A,n=Me(),s=t();if(J===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");ht&30||Al(r,t,s),n.memoizedState=s;var i={value:s,getSnapshot:t};return n.queue=i,Es(Ul.bind(null,r,i,e),[e]),r.flags|=2048,Wt(9,bl.bind(null,r,i,s,t),void 0,null),s},useId:function(){var e=Me(),t=J.identifierPrefix,r=vu++;return t=":"+t+"r"+r.toString(32)+":",e.memoizedState=t},unstable_isNewReconciler:!1},Du={readContext:ye,useCallback:Kl,useContext:ye,useEffect:Bi,useImperativeHandle:Jl,useInsertionEffect:Ql,useLayoutEffect:$l,useMemo:Yl,useReducer:sn,useRef:Vl,useState:function(){return sn(qt)},useDebugValue:_i,useDeferredValue:function(e){var t=ve();return Zl(t,W.memoizedState,e)},useTransition:function(){var e=sn(qt)[0],t=ve().memoizedState;return[e,t]},useMutableSource:Bl,useSyncExternalStore:_l,useId:Gl,unstable_isNewReconciler:!1},Eu={readContext:ye,useCallback:Kl,useContext:ye,useEffect:Bi,useImperativeHandle:Jl,useInsertionEffect:Ql,useLayoutEffect:$l,useMemo:Yl,useReducer:ln,useRef:Vl,useState:function(){return ln(qt)},useDebugValue:_i,useDeferredValue:function(e){var t=ve();return W===null?t.memoizedState=e:Zl(t,W.memoizedState,e)},useTransition:function(){var e=ln(qt)[0],t=ve().memoizedState;return[e,t]},useMutableSource:Bl,useSyncExternalStore:_l,useId:Gl,unstable_isNewReconciler:!1};function xe(e,t){if(e&&e.defaultProps){t=st({},t),e=e.defaultProps;for(var r in e)t[r]===void 0&&(t[r]=e[r]);return t}return t}function ni(e,t,r,n){t=e.memoizedState,r=r(n,t),r=r==null?t:st({},t,r),e.memoizedState=r,e.lanes===0&&(e.updateQueue.baseState=r)}var qr={isMounted:function(e){return(e=e._reactInternals)?Br(e)===e:!1},enqueueSetState:function(e,t,r){e=e._reactInternals;var n=Te(),s=Tt(e),i=$e(n,s);i.payload=t,r!=null&&(i.callback=r),t=lt(e,i,s),t!==null&&(Je(t,e,s,n),or(t,e,s))},enqueueReplaceState:function(e,t,r){e=e._reactInternals;var n=Te(),s=Tt(e),i=$e(n,s);i.tag=1,i.payload=t,r!=null&&(i.callback=r),t=lt(e,i,s),t!==null&&(Je(t,e,s,n),or(t,e,s))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var r=Te(),n=Tt(e),s=$e(r,n);s.tag=2,t!=null&&(s.callback=t),t=lt(e,s,n),t!==null&&(Je(t,e,n,r),or(t,e,n))}};function Ns(e,t,r,n,s,i,l){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(n,i,l):t.prototype&&t.prototype.isPureReactComponent?!Dr(r,n)||!Dr(s,i):!0}function no(e,t,r){var n=!1,s=Ze,i=t.contextType;return typeof i=="object"&&i!==null?i=ye(i):(s=ce(t)?ct:te.current,n=t.contextTypes,i=(n=n!=null)?Nt(e,s):Ze),t=new t(r,i),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=qr,e.stateNode=t,t._reactInternals=e,n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=s,e.__reactInternalMemoizedMaskedChildContext=i),t}function Ls(e,t,r,n){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(r,n),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(r,n),t.state!==e&&qr.enqueueReplaceState(t,t.state,null)}function ii(e,t,r,n){var s=e.stateNode;s.props=r,s.state=e.memoizedState,s.refs={},ki(e);var i=t.contextType;typeof i=="object"&&i!==null?s.context=ye(i):(i=ce(t)?ct:te.current,s.context=Nt(e,i)),s.state=e.memoizedState,i=t.getDerivedStateFromProps,typeof i=="function"&&(ni(e,t,i,r),s.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof s.getSnapshotBeforeUpdate=="function"||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(t=s.state,typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount(),t!==s.state&&qr.enqueueReplaceState(s,s.state,null),Lr(e,r,s,n),s.state=e.memoizedState),typeof s.componentDidMount=="function"&&(e.flags|=4)}function Ai(e,t){try{var r="",n=t;do r+=gu(n),n=n.return;while(n);var s=r}catch(i){s=` +See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`)}function zi(e,t){if(t===null)return!1;for(var r=0;rr?r:4,e(!0);var n=sn.transition;sn.transition={};try{e(!1),t()}finally{$=r,sn.transition=n}}function Gl(){return xe().memoizedState}function wu(e,t,r){var n=Et(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},eo(e))to(t,r);else if(r=Xl(e,t,r,n),r!==null){var s=Ee();Ke(r,e,n,s),ro(r,t,n)}}function xu(e,t,r){var n=Et(e),s={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(eo(e))to(t,s);else{var i=e.alternate;if(e.lanes===0&&(i===null||i.lanes===0)&&(i=t.lastRenderedReducer,i!==null))try{var l=t.lastRenderedState,o=i(l,r);if(s.hasEagerState=!0,s.eagerState=o,Ne(o,l)){var u=t.interleaved;u===null?(s.next=s,ki(t)):(s.next=u.next,u.next=s),t.interleaved=s;return}}catch{}finally{}r=Xl(e,t,s,n),r!==null&&(s=Ee(),Ke(r,e,n,s),ro(r,t,n))}}function eo(e){var t=e.alternate;return e===b||t!==null&&t===b}function to(e,t){At=Pr=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function ro(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,Il(e,r)}}var kr={readContext:we,useCallback:Y,useContext:Y,useEffect:Y,useImperativeHandle:Y,useInsertionEffect:Y,useLayoutEffect:Y,useMemo:Y,useReducer:Y,useRef:Y,useState:Y,useDebugValue:Y,useDeferredValue:Y,useTransition:Y,useMutableSource:Y,useSyncExternalStore:Y,useId:Y,unstable_isNewReconciler:!1},Su={readContext:we,useCallback:function(e,t){return Oe().memoizedState=[e,t===void 0?null:t],e},useContext:we,useEffect:Es,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,dr(4,4,Hl.bind(null,t,e),r)},useLayoutEffect:function(e,t){return dr(4,4,e,t)},useInsertionEffect:function(e,t){return dr(4,2,e,t)},useMemo:function(e,t){var r=Oe();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=Oe();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=wu.bind(null,b,e),[n.memoizedState,e]},useRef:function(e){var t=Oe();return e={current:e},t.memoizedState=e},useState:Ds,useDebugValue:Ai,useDeferredValue:function(e){return Oe().memoizedState=e},useTransition:function(){var e=Ds(!1),t=e[0];return e=vu.bind(null,e[1]),Oe().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t){var r=b,n=Oe(),s=t();if(J===null)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");dt&30||Al(r,t,s),n.memoizedState=s;var i={value:s,getSnapshot:t};return n.queue=i,Es(Ul.bind(null,r,i,e),[e]),r.flags|=2048,$t(9,bl.bind(null,r,i,s,t),void 0,null),s},useId:function(){var e=Oe(),t=J.identifierPrefix,r=yu++;return t=":"+t+"r"+r.toString(32)+":",e.memoizedState=t},unstable_isNewReconciler:!1},Tu={readContext:we,useCallback:Kl,useContext:we,useEffect:_i,useImperativeHandle:Jl,useInsertionEffect:Ql,useLayoutEffect:$l,useMemo:Yl,useReducer:ln,useRef:Vl,useState:function(){return ln(Qt)},useDebugValue:Ai,useDeferredValue:function(e){var t=xe();return Zl(t,W.memoizedState,e)},useTransition:function(){var e=ln(Qt)[0],t=xe().memoizedState;return[e,t]},useMutableSource:Bl,useSyncExternalStore:_l,useId:Gl,unstable_isNewReconciler:!1},Du={readContext:we,useCallback:Kl,useContext:we,useEffect:_i,useImperativeHandle:Jl,useInsertionEffect:Ql,useLayoutEffect:$l,useMemo:Yl,useReducer:on,useRef:Vl,useState:function(){return on(Qt)},useDebugValue:Ai,useDeferredValue:function(e){var t=xe();return W===null?t.memoizedState=e:Zl(t,W.memoizedState,e)},useTransition:function(){var e=on(Qt)[0],t=xe().memoizedState;return[e,t]},useMutableSource:Bl,useSyncExternalStore:_l,useId:Gl,unstable_isNewReconciler:!1};function Te(e,t){if(e&&e.defaultProps){t=lt({},t),e=e.defaultProps;for(var r in e)t[r]===void 0&&(t[r]=e[r]);return t}return t}function ii(e,t,r,n){t=e.memoizedState,r=r(n,t),r=r==null?t:lt({},t,r),e.memoizedState=r,e.lanes===0&&(e.updateQueue.baseState=r)}var Qr={isMounted:function(e){return(e=e._reactInternals)?br(e)===e:!1},enqueueSetState:function(e,t,r){e=e._reactInternals;var n=Ee(),s=Et(e),i=He(n,s);i.payload=t,r!=null&&(i.callback=r),t=ot(e,i,s),t!==null&&(Ke(t,e,s,n),cr(t,e,s))},enqueueReplaceState:function(e,t,r){e=e._reactInternals;var n=Ee(),s=Et(e),i=He(n,s);i.tag=1,i.payload=t,r!=null&&(i.callback=r),t=ot(e,i,s),t!==null&&(Ke(t,e,s,n),cr(t,e,s))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var r=Ee(),n=Et(e),s=He(r,n);s.tag=2,t!=null&&(s.callback=t),t=ot(e,s,n),t!==null&&(Ke(t,e,n,r),cr(t,e,n))}};function Ns(e,t,r,n,s,i,l){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(n,i,l):t.prototype&&t.prototype.isPureReactComponent?!Lr(r,n)||!Lr(s,i):!0}function no(e,t,r){var n=!1,s=Ge,i=t.contextType;return typeof i=="object"&&i!==null?i=we(i):(s=he(t)?ht:te.current,n=t.contextTypes,i=(n=n!=null)?Mt(e,s):Ge),t=new t(r,i),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Qr,e.stateNode=t,t._reactInternals=e,n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=s,e.__reactInternalMemoizedMaskedChildContext=i),t}function Ls(e,t,r,n){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(r,n),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(r,n),t.state!==e&&Qr.enqueueReplaceState(t,t.state,null)}function si(e,t,r,n){var s=e.stateNode;s.props=r,s.state=e.memoizedState,s.refs={},ji(e);var i=t.contextType;typeof i=="object"&&i!==null?s.context=we(i):(i=he(t)?ht:te.current,s.context=Mt(e,i)),s.state=e.memoizedState,i=t.getDerivedStateFromProps,typeof i=="function"&&(ii(e,t,i,r),s.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof s.getSnapshotBeforeUpdate=="function"||typeof s.UNSAFE_componentWillMount!="function"&&typeof s.componentWillMount!="function"||(t=s.state,typeof s.componentWillMount=="function"&&s.componentWillMount(),typeof s.UNSAFE_componentWillMount=="function"&&s.UNSAFE_componentWillMount(),t!==s.state&&Qr.enqueueReplaceState(s,s.state,null),Ir(e,r,s,n),s.state=e.memoizedState),typeof s.componentDidMount=="function"&&(e.flags|=4)}function bi(e,t){try{var r="",n=t;do r+=mu(n),n=n.return;while(n);var s=r}catch(i){s=` Error generating stack: `+i.message+` -`+i.stack}return{value:e,source:t,stack:s,digest:null}}function on(e,t,r){return{value:e,source:null,stack:r??null,digest:t??null}}function si(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var Nu=typeof WeakMap=="function"?WeakMap:Map;function io(e,t,r){r=$e(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){jr||(jr=!0,pi=n),si(e,t)},r}function so(e,t,r){r=$e(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var s=t.value;r.payload=function(){return n(s)},r.callback=function(){si(e,t)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(r.callback=function(){si(e,t),typeof n!="function"&&(He===null?He=new Set([this]):He.add(this));var l=t.stack;this.componentDidCatch(t.value,{componentStack:l!==null?l:""})}),r}function Ms(e,t,r){var n=e.pingCache;if(n===null){n=e.pingCache=new Nu;var s=new Set;n.set(t,s)}else s=n.get(t),s===void 0&&(s=new Set,n.set(t,s));s.has(r)||(s.add(r),e=Au.bind(null,e,t,r),t.then(e,e))}var Lu=Ge.ReactCurrentOwner,le=!1;function ne(e,t,r,n){t.child=e===null?yu(t,null,r,n):Lt(t,e.child,r,n)}function Os(e,t,r,n,s){r=r.render;var i=t.ref;return St(t,s),n=zi(e,t,r,n,i,s),e!==null&&!le?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~s,Fe(e,t,s)):(t.flags|=1,ne(e,t,n,s),t.child)}function Is(e,t,r,n,s){if(e===null){var i=r.type;return typeof i=="function"&&!Hi(i)&&i.defaultProps===void 0&&r.compare===null&&r.defaultProps===void 0?(t.tag=15,t.type=i,lo(e,t,i,n,s)):(e=fr(r.type,null,n,t,t.mode,s),e.ref=t.ref,e.return=t,t.child=e)}if(i=e.child,!(e.lanes&s)){var l=i.memoizedProps;if(r=r.compare,r=r!==null?r:Dr,r(l,n)&&e.ref===t.ref)return Fe(e,t,s)}return t.flags|=1,e=Ke(i,n),e.ref=t.ref,e.return=t,t.child=e}function lo(e,t,r,n,s){if(e!==null){var i=e.memoizedProps;if(Dr(i,n)&&e.ref===t.ref)if(le=!1,t.pendingProps=n=i,(e.lanes&s)!==0)e.flags&131072&&(le=!0);else return t.lanes=e.lanes,Fe(e,t,s)}return li(e,t,r,n,s)}function oo(e,t,r){var n=t.pendingProps,s=n.children,i=e!==null?e.memoizedState:null;if(n.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},z(wt,he),he|=r;else{if(!(r&1073741824))return e=i!==null?i.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,z(wt,he),he|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=i!==null?i.baseLanes:r,z(wt,he),he|=n}else i!==null?(n=i.baseLanes|r,t.memoizedState=null):n=r,z(wt,he),he|=n;return ne(e,t,s,r),t.child}function uo(e,t){var r=t.ref;(e===null&&r!==null||e!==null&&e.ref!==r)&&(t.flags|=512)}function li(e,t,r,n,s){var i=ce(r)?ct:te.current;return i=Nt(t,i),St(t,s),r=zi(e,t,r,n,i,s),e!==null&&!le?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~s,Fe(e,t,s)):(t.flags|=1,ne(e,t,r,s),t.child)}function Cs(e,t,r,n,s){if(ce(r)){var i=!0;Tr(t)}else i=!1;if(St(t,s),t.stateNode===null)cr(e,t),no(t,r,n),ii(t,r,n,s),n=!0;else if(e===null){var l=t.stateNode,o=t.memoizedProps;l.props=o;var u=l.context,d=r.contextType;typeof d=="object"&&d!==null?d=ye(d):(d=ce(r)?ct:te.current,d=Nt(t,d));var c=r.getDerivedStateFromProps,g=typeof c=="function"||typeof l.getSnapshotBeforeUpdate=="function";g||typeof l.UNSAFE_componentWillReceiveProps!="function"&&typeof l.componentWillReceiveProps!="function"||(o!==n||u!==d)&&Ls(t,l,n,d),Ue=!1;var v=t.memoizedState;l.state=v,Lr(t,n,l,s),u=t.memoizedState,o!==n||v!==u||ae.current||Ue?(typeof c=="function"&&(ni(t,r,c,n),u=t.memoizedState),(o=Ue||Ns(t,r,o,n,v,u,d))?(g||typeof l.UNSAFE_componentWillMount!="function"&&typeof l.componentWillMount!="function"||(typeof l.componentWillMount=="function"&&l.componentWillMount(),typeof l.UNSAFE_componentWillMount=="function"&&l.UNSAFE_componentWillMount()),typeof l.componentDidMount=="function"&&(t.flags|=4)):(typeof l.componentDidMount=="function"&&(t.flags|=4),t.memoizedProps=n,t.memoizedState=u),l.props=n,l.state=u,l.context=d,n=o):(typeof l.componentDidMount=="function"&&(t.flags|=4),n=!1)}else{l=t.stateNode,Fl(e,t),o=t.memoizedProps,d=t.type===t.elementType?o:xe(t.type,o),l.props=d,g=t.pendingProps,v=l.context,u=r.contextType,typeof u=="object"&&u!==null?u=ye(u):(u=ce(r)?ct:te.current,u=Nt(t,u));var D=r.getDerivedStateFromProps;(c=typeof D=="function"||typeof l.getSnapshotBeforeUpdate=="function")||typeof l.UNSAFE_componentWillReceiveProps!="function"&&typeof l.componentWillReceiveProps!="function"||(o!==g||v!==u)&&Ls(t,l,n,u),Ue=!1,v=t.memoizedState,l.state=v,Lr(t,n,l,s);var L=t.memoizedState;o!==g||v!==L||ae.current||Ue?(typeof D=="function"&&(ni(t,r,D,n),L=t.memoizedState),(d=Ue||Ns(t,r,d,n,v,L,u)||!1)?(c||typeof l.UNSAFE_componentWillUpdate!="function"&&typeof l.componentWillUpdate!="function"||(typeof l.componentWillUpdate=="function"&&l.componentWillUpdate(n,L,u),typeof l.UNSAFE_componentWillUpdate=="function"&&l.UNSAFE_componentWillUpdate(n,L,u)),typeof l.componentDidUpdate=="function"&&(t.flags|=4),typeof l.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof l.componentDidUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof l.getSnapshotBeforeUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=L),l.props=n,l.state=L,l.context=u,n=d):(typeof l.componentDidUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof l.getSnapshotBeforeUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),n=!1)}return oi(e,t,r,n,i,s)}function oi(e,t,r,n,s,i){uo(e,t);var l=(t.flags&128)!==0;if(!n&&!l)return s&&ys(t,r,!1),Fe(e,t,i);n=t.stateNode,Lu.current=t;var o=l&&typeof r.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&l?(t.child=Lt(t,e.child,null,i),t.child=Lt(t,null,o,i)):ne(e,t,o,i),t.memoizedState=n.state,s&&ys(t,r,!0),t.child}function ao(e){var t=e.stateNode;t.pendingContext?gs(e,t.pendingContext,t.pendingContext!==t.context):t.context&&gs(e,t.context,!1),ji(e,t.containerInfo)}var ui={dehydrated:null,treeContext:null,retryLane:0};function ai(e){return{baseLanes:e,cachePool:null,transitions:null}}function co(e,t,r){var n=t.pendingProps,s=_.current,i=!1,l=(t.flags&128)!==0,o;if((o=l)||(o=e!==null&&e.memoizedState===null?!1:(s&2)!==0),o?(i=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(s|=1),z(_,s&1),e===null)return e=t.memoizedState,e!==null&&e.dehydrated!==null?(t.mode&1?Ve()?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(l=n.children,e=n.fallback,i?(n=t.mode,i=t.child,l={mode:"hidden",children:l},!(n&1)&&i!==null?(i.childLanes=0,i.pendingProps=l):i=Vr(l,n,0,null),e=ut(e,n,r,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=ai(r),t.memoizedState=ui,e):bi(t,l));if(s=e.memoizedState,s!==null&&(o=s.dehydrated,o!==null))return Mu(e,t,l,n,o,s,r);if(i){i=n.fallback,l=t.mode,s=e.child,o=s.sibling;var u={mode:"hidden",children:n.children};return!(l&1)&&t.child!==s?(n=t.child,n.childLanes=0,n.pendingProps=u,t.deletions=null):(n=Ke(s,u),n.subtreeFlags=s.subtreeFlags&14680064),o!==null?i=Ke(o,i):(i=ut(i,l,r,null),i.flags|=2),i.return=t,n.return=t,n.sibling=i,t.child=n,n=i,i=t.child,l=e.child.memoizedState,l=l===null?ai(r):{baseLanes:l.baseLanes|r,cachePool:null,transitions:l.transitions},i.memoizedState=l,i.childLanes=e.childLanes&~r,t.memoizedState=ui,n}return i=e.child,e=i.sibling,n=Ke(i,{mode:"visible",children:n.children}),!(t.mode&1)&&(n.lanes=r),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n}function bi(e,t){return t=Vr({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function nr(e,t,r,n){return n!==null&&(Re===null?Re=[n]:Re.push(n)),Lt(t,e.child,null,r),e=bi(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Mu(e,t,r,n,s,i,l){if(r)return t.flags&256?(t.flags&=-257,i=on(Error("There was an error while hydrating this Suspense boundary. Switched to client rendering.")),nr(e,t,l,i)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(i=n.fallback,r=t.mode,n=Vr({mode:"visible",children:n.children},r,0,null),i=ut(i,r,l,null),i.flags|=2,n.return=t,i.return=t,n.sibling=i,t.child=n,t.mode&1&&Lt(t,e.child,null,l),t.child.memoizedState=ai(l),t.memoizedState=ui,i);if(!(t.mode&1))return nr(e,t,l,null);if(Ve())return i=Ve().digest,i=on(Error("The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."),i,void 0),nr(e,t,l,i);if(r=(l&e.childLanes)!==0,le||r){if(n=J,n!==null){switch(l&-l){case 4:r=2;break;case 16:r=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=r&(n.suspendedLanes|l)?0:r,r!==0&&r!==i.retryLane&&(i.retryLane=r,Mt(e,r),Je(n,e,r,-1))}return $i(),i=on(Error("This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition.")),nr(e,t,l,i)}return Ve()?(t.flags|=128,t.child=e.child,bu.bind(null,e),Ve(),null):(e=bi(t,n.children),e.flags|=4096,e)}function Ps(e,t,r){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),ri(e.return,t,r)}function un(e,t,r,n,s){var i=e.memoizedState;i===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:s}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=n,i.tail=r,i.tailMode=s)}function ho(e,t,r){var n=t.pendingProps,s=n.revealOrder,i=n.tail;if(ne(e,t,n.children,r),n=_.current,n&2)n=n&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Ps(e,r,t);else if(e.tag===19)Ps(e,r,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(z(_,n),!(t.mode&1))t.memoizedState=null;else switch(s){case"forwards":for(r=t.child,s=null;r!==null;)e=r.alternate,e!==null&&Mr(e)===null&&(s=r),r=r.sibling;r=s,r===null?(s=t.child,t.child=null):(s=r.sibling,r.sibling=null),un(t,!1,s,r,i);break;case"backwards":for(r=null,s=t.child,t.child=null;s!==null;){if(e=s.alternate,e!==null&&Mr(e)===null){t.child=s;break}e=s.sibling,s.sibling=r,r=s,s=e}un(t,!0,r,null,i);break;case"together":un(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function cr(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Fe(e,t,r){if(e!==null&&(t.dependencies=e.dependencies),dt|=t.lanes,!(r&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error("Resuming work not yet implemented.");if(t.child!==null){for(e=t.child,r=Ke(e,e.pendingProps),t.child=r,r.return=t;e.sibling!==null;)e=e.sibling,r=r.sibling=Ke(e,e.pendingProps),r.return=t;r.sibling=null}return t.child}function Ou(e,t,r){switch(t.tag){case 3:ao(t);break;case 5:zl(t);break;case 1:ce(t.type)&&Tr(t);break;case 4:ji(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,s=t.memoizedProps.value;z(Er,n._currentValue2),n._currentValue2=s;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(z(_,_.current&1),t.flags|=128,null):r&t.child.childLanes?co(e,t,r):(z(_,_.current&1),e=Fe(e,t,r),e!==null?e.sibling:null);z(_,_.current&1);break;case 19:if(n=(r&t.childLanes)!==0,e.flags&128){if(n)return ho(e,t,r);t.flags|=128}if(s=t.memoizedState,s!==null&&(s.rendering=null,s.tail=null,s.lastEffect=null),z(_,_.current),n)break;return null;case 22:case 23:return t.lanes=0,oo(e,t,r)}return Fe(e,t,r)}var fo,ci,po,mo;fo=function(e,t){for(var r=t.child;r!==null;){if(r.tag===5||r.tag===6){var n=e,s=r.stateNode,i=n.children.indexOf(s);i!==-1&&n.children.splice(i,1),n.children.push(s)}else if(r.tag!==4&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}};ci=function(){};po=function(e,t,r,n){e.memoizedProps!==n&&(it(Pe.current),t.updateQueue=cu)&&(t.flags|=4)};mo=function(e,t,r,n){r!==n&&(t.flags|=4)};function Pt(e,t){switch(e.tailMode){case"hidden":t=e.tail;for(var r=null;t!==null;)t.alternate!==null&&(r=t),t=t.sibling;r===null?e.tail=null:r.sibling=null;break;case"collapsed":r=e.tail;for(var n=null;r!==null;)r.alternate!==null&&(n=r),r=r.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Z(e){var t=e.alternate!==null&&e.alternate.child===e.child,r=0,n=0;if(t)for(var s=e.child;s!==null;)r|=s.lanes|s.childLanes,n|=s.subtreeFlags&14680064,n|=s.flags&14680064,s.return=e,s=s.sibling;else for(s=e.child;s!==null;)r|=s.lanes|s.childLanes,n|=s.subtreeFlags,n|=s.flags,s.return=e,s=s.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function Iu(e,t,r){var n=t.pendingProps;switch(Mi(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Z(t),null;case 1:return ce(t.type)&&Sr(),Z(t),null;case 3:return r=t.stateNode,Ot(),B(ae),B(te),Xi(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),e!==null&&e.child!==null||e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Re!==null&&(yi(Re),Re=null)),ci(e,t),Z(t),null;case 5:Ri(t),r=it(Ut.current);var s=t.type;if(e!==null&&t.stateNode!=null)po(e,t,s,n,r),e.ref!==t.ref&&(t.flags|=512);else{if(!n){if(t.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Z(t),null}it(Pe.current),e={type:s,props:n,isHidden:!1,children:[],internalInstanceHandle:t,rootContainerInstance:r,tag:"INSTANCE"},fo(e,t,!1,!1),t.stateNode=e,t.ref!==null&&(t.flags|=512)}return Z(t),null;case 6:if(e&&t.stateNode!=null)mo(e,t,e.memoizedProps,n);else{if(typeof n!="string"&&t.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");it(Ut.current),it(Pe.current),t.stateNode={text:n,isHidden:!1,tag:"TEXT"}}return Z(t),null;case 13:if(B(_),n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n!==null&&n.dehydrated!==null){if(e===null)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");!(t.flags&128)&&(t.memoizedState=null),t.flags|=4,Z(t),s=!1}else Re!==null&&(yi(Re),Re=null),s=!0;if(!s)return t.flags&65536?t:null}return t.flags&128?(t.lanes=r,t):(r=n!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||_.current&1?Q===0&&(Q=3):$i())),t.updateQueue!==null&&(t.flags|=4),Z(t),null);case 4:return Ot(),ci(e,t),Z(t),null;case 10:return Ci(t.type._context),Z(t),null;case 17:return ce(t.type)&&Sr(),Z(t),null;case 19:if(B(_),s=t.memoizedState,s===null)return Z(t),null;n=(t.flags&128)!==0;var i=s.rendering;if(i===null)if(n)Pt(s,!1);else{if(Q!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=Mr(e),i!==null){for(t.flags|=128,Pt(s,!1),e=i.updateQueue,e!==null&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,r=t.child;r!==null;)n=r,s=e,n.flags&=14680066,i=n.alternate,i===null?(n.childLanes=0,n.lanes=s,n.child=null,n.subtreeFlags=0,n.memoizedProps=null,n.memoizedState=null,n.updateQueue=null,n.dependencies=null,n.stateNode=null):(n.childLanes=i.childLanes,n.lanes=i.lanes,n.child=i.child,n.subtreeFlags=0,n.deletions=null,n.memoizedProps=i.memoizedProps,n.memoizedState=i.memoizedState,n.updateQueue=i.updateQueue,n.type=i.type,s=i.dependencies,n.dependencies=s===null?null:{lanes:s.lanes,firstContext:s.firstContext}),r=r.sibling;return z(_,_.current&1|2),t.child}e=e.sibling}s.tail!==null&&V()>Qt&&(t.flags|=128,n=!0,Pt(s,!1),t.lanes=4194304)}else{if(!n)if(e=Mr(i),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,e!==null&&(t.updateQueue=e,t.flags|=4),Pt(s,!0),s.tail===null&&s.tailMode==="hidden"&&!i.alternate)return Z(t),null}else 2*V()-s.renderingStartTime>Qt&&r!==1073741824&&(t.flags|=128,n=!0,Pt(s,!1),t.lanes=4194304);s.isBackwards?(i.sibling=t.child,t.child=i):(e=s.last,e!==null?e.sibling=i:t.child=i,s.last=i)}return s.tail!==null?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=V(),t.sibling=null,e=_.current,z(_,n?e&1|2:e&1),t):(Z(t),null);case 22:case 23:return Qi(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?he&1073741824&&(Z(t),t.subtreeFlags&6&&(t.flags|=8192)):Z(t),null;case 24:return null;case 25:return null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Cu(e,t){switch(Mi(t),t.tag){case 1:return ce(t.type)&&Sr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ot(),B(ae),B(te),Xi(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Ri(t),null;case 13:if(B(_),e=t.memoizedState,e!==null&&e.dehydrated!==null&&t.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return B(_),null;case 4:return Ot(),null;case 10:return Ci(t.type._context),null;case 22:case 23:return Qi(),null;case 24:return null;default:return null}}var Pu=typeof WeakSet=="function"?WeakSet:Set,P=null;function Cr(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){se(e,t,n)}else r.current=null}function hi(e,t,r){try{r()}catch(n){se(e,t,n)}}var ks=!1;function ku(e,t){for(P=t;P!==null;)if(e=P,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,P=t;else for(;P!==null;){e=P;try{var r=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(r!==null){var n=r.memoizedProps,s=r.memoizedState,i=e.stateNode,l=i.getSnapshotBeforeUpdate(e.elementType===e.type?n:xe(e.type,n),s);i.__reactInternalSnapshotBeforeUpdate=l}break;case 3:e.stateNode.containerInfo.children.splice(0);break;case 5:case 6:case 4:case 17:break;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}catch(o){se(e,e.return,o)}if(t=e.sibling,t!==null){t.return=e.return,P=t;break}P=e.return}return r=ks,ks=!1,r}function Pr(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var s=n=n.next;do{if((s.tag&e)===e){var i=s.destroy;s.destroy=void 0,i!==void 0&&hi(t,r,i)}s=s.next}while(s!==n)}}function Ui(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function go(e){var t=e.alternate;t!==null&&(e.alternate=null,go(t)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function yo(e){return e.tag===5||e.tag===3||e.tag===4}function js(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||yo(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function di(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?kl(r,e,t):Pl(r,e);else if(n!==4&&(e=e.child,e!==null))for(di(e,t,r),e=e.sibling;e!==null;)di(e,t,r),e=e.sibling}function fi(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?kl(r,e,t):Pl(r,e);else if(n!==4&&(e=e.child,e!==null))for(fi(e,t,r),e=e.sibling;e!==null;)fi(e,t,r),e=e.sibling}var re=null;function tt(e,t,r){for(r=r.child;r!==null;)vo(e,t,r),r=r.sibling}function vo(e,t,r){if(Ce&&typeof Ce.onCommitFiberUnmount=="function")try{Ce.onCommitFiberUnmount(_r,r)}catch{}switch(r.tag){case 5:Cr(r,t);case 6:var n=re;re=null,tt(e,t,r),re=n,re!==null&&(e=re,r=e.children.indexOf(r.stateNode),e.children.splice(r,1));break;case 18:re!==null&&Ve(re,r.stateNode);break;case 4:n=re,re=r.stateNode.containerInfo,tt(e,t,r),re=n;break;case 0:case 11:case 14:case 15:if(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null)){var s=n=n.next;do{var i=s,l=i.destroy;i=i.tag,l!==void 0&&(i&2||i&4)&&hi(r,t,l),s=s.next}while(s!==n)}tt(e,t,r);break;case 1:if(Cr(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function")try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(o){se(r,t,o)}tt(e,t,r);break;case 21:tt(e,t,r);break;case 22:tt(e,t,r);break;default:tt(e,t,r)}}function Rs(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new Pu),t.forEach(function(n){var s=Uu.bind(null,e,n);r.has(n)||(r.add(n),n.then(s,s))})}}function Ne(e,t){var r=t.deletions;if(r!==null)for(var n=0;ns&&(s=l),n&=~i}if(n=s,n=V()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ru(n/1960))-n,10e?16:e,Qe===null)var n=!1;else{if(e=Qe,Qe=null,Rr=0,X&6)throw Error("Cannot flush passive effects while already rendering.");var s=X;for(X|=4,P=e.current;P!==null;){var i=P,l=i.child;if(P.flags&16){var o=i.deletions;if(o!==null){for(var u=0;uV()-Vi?ot(e,0):Wi|=r),ge(e,t)}function No(e,t){t===0&&(e.mode&1?(t=Zt,Zt<<=1,!(Zt&130023424)&&(Zt=4194304)):t=1);var r=Te();e=Mt(e,t),e!==null&&(Ar(e,t,r),ge(e,r))}function bu(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),No(e,r)}function Uu(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,s=e.memoizedState;s!==null&&(r=s.retryLane);break;case 19:n=e.stateNode;break;default:throw Error("Pinged unknown suspense boundary type. This is probably a bug in React.")}n!==null&&n.delete(t),No(e,r)}var Lo;Lo=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||ae.current)le=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return le=!1,Ou(e,t,r);le=!!(e.flags&131072)}else le=!1;switch(t.lanes=0,t.tag){case 2:var n=t.type;cr(e,t),e=t.pendingProps;var s=Nt(t,te.current);if(St(t,r),s=zi(null,t,n,e,s,r),t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,ce(n)){var i=!0;Tr(t)}else i=!1;t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,ki(t),s.updater=qr,t.stateNode=s,s._reactInternals=t,ii(t,n,e,r),t=oi(null,t,n,!0,i,r)}else t.tag=0,ne(null,t,s,r),t=t.child;return t;case 16:n=t.elementType;e:{switch(cr(e,t),e=t.pendingProps,s=n._init,n=s(n._payload),t.type=n,s=t.tag=Wu(n),e=xe(n,e),s){case 0:t=li(null,t,n,e,r);break e;case 1:t=Cs(null,t,n,e,r);break e;case 11:t=Os(null,t,n,e,r);break e;case 14:t=Is(null,t,n,xe(n.type,e),r);break e}throw Error("Element type is invalid. Received a promise that resolves to: "+n+". Lazy element type must resolve to a class or function.")}return t;case 0:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:xe(n,s),li(e,t,n,s,r);case 1:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:xe(n,s),Cs(e,t,n,s,r);case 3:if(ao(t),e===null)throw Error("Should have a current fiber. This is a bug in React.");return s=t.pendingProps,n=t.memoizedState.element,Fl(e,t),Lr(t,s,null,r),s=t.memoizedState.element,s===n?t=Fe(e,t,r):(ne(e,t,s,r),t=t.child),t;case 5:return zl(t),n=t.pendingProps.children,uo(e,t),ne(e,t,n,r),t.child;case 6:return null;case 13:return co(e,t,r);case 4:return ji(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Lt(t,null,n,r):ne(e,t,n,r),t.child;case 11:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:xe(n,s),Os(e,t,n,s,r);case 7:return ne(e,t,t.pendingProps,r),t.child;case 8:return ne(e,t,t.pendingProps.children,r),t.child;case 12:return ne(e,t,t.pendingProps.children,r),t.child;case 10:e:{n=t.type._context,s=t.pendingProps,i=t.memoizedProps;var l=s.value;if(z(Er,n._currentValue2),n._currentValue2=l,i!==null)if(De(i.value,l)){if(i.children===s.children&&!ae.current){t=Fe(e,t,r);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var o=i.dependencies;if(o!==null){l=i.child;for(var u=o.firstContext;u!==null;){if(u.context===n){if(i.tag===1){u=$e(-1,r&-r),u.tag=2;var d=i.updateQueue;if(d!==null){d=d.shared;var c=d.pending;c===null?u.next=u:(u.next=c.next,c.next=u),d.pending=u}}i.lanes|=r,u=i.alternate,u!==null&&(u.lanes|=r),ri(i.return,r,t),o.lanes|=r;break}u=u.next}}else if(i.tag===10)l=i.type===t.type?null:i.child;else if(i.tag===18){if(l=i.return,l===null)throw Error("We just came from a parent so we must have had a parent. This is a bug in React.");l.lanes|=r,o=l.alternate,o!==null&&(o.lanes|=r),ri(l,r,t),l=i.sibling}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===t){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}ne(e,t,s.children,r),t=t.child}return t;case 9:return s=t.type,n=t.pendingProps.children,St(t,r),s=ye(s),n=n(s),t.flags|=1,ne(e,t,n,r),t.child;case 14:return n=t.type,s=xe(n,t.pendingProps),s=xe(n.type,s),Is(e,t,n,s,r);case 15:return lo(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:xe(n,s),cr(e,t),t.tag=1,ce(n)?(e=!0,Tr(t)):e=!1,St(t,r),no(t,n,s),ii(t,n,s,r),oi(null,t,n,!0,e,r);case 19:return ho(e,t,r);case 22:return oo(e,t,r)}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")};function Mo(e,t){return Li(e,t)}function qu(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ie(e,t,r,n){return new qu(e,t,r,n)}function Hi(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Wu(e){if(typeof e=="function")return Hi(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ei)return 11;if(e===Ni)return 14}return 2}function Ke(e,t){var r=e.alternate;return r===null?(r=Ie(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function fr(e,t,r,n,s,i){var l=2;if(n=e,typeof e=="function")Hi(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case gt:return ut(r.children,s,i,t);case Di:l=8,s|=8;break;case Hn:return e=Ie(12,r,t,s|2),e.elementType=Hn,e.lanes=i,e;case Jn:return e=Ie(13,r,t,s),e.elementType=Jn,e.lanes=i,e;case Kn:return e=Ie(19,r,t,s),e.elementType=Kn,e.lanes=i,e;case Nl:return Vr(r,s,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Dl:l=10;break e;case El:l=9;break e;case Ei:l=11;break e;case Ni:l=14;break e;case be:l=16,n=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+((e==null?e:typeof e)+"."))}return t=Ie(l,r,t,s),t.elementType=e,t.type=n,t.lanes=i,t}function ut(e,t,r,n){return e=Ie(7,e,n,t),e.lanes=r,e}function Vr(e,t,r,n){return e=Ie(22,e,n,t),e.elementType=Nl,e.lanes=r,e.stateNode={isHidden:!1},e}function an(e,t,r){return e=Ie(6,e,null,t),e.lanes=r,e}function cn(e,t,r){return t=Ie(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Vu(e,t,r,n,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Kr(0),this.expirationTimes=Kr(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Kr(0),this.identifierPrefix=n,this.onRecoverableError=s}function Qu(e,t,r,n,s,i,l){return e=new Vu(e,t,!1,i,l),t===1?(t=1,n===!0&&(t|=8)):t=0,n=Ie(3,null,null,t),e.current=n,n.stateNode=e,n.memoizedState={element:null,isDehydrated:!1,cache:null,transitions:null,pendingSuspenseBoundaries:null},ki(n),e}function hn(e,t,r,n){var s=t.current,i=Te(),l=Tt(s);e:if(r){r=r._reactInternals;t:{if(Br(r)!==r||r.tag!==1)throw Error("Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.");var o=r;do{switch(o.tag){case 3:o=o.stateNode.context;break t;case 1:if(ce(o.type)){o=o.stateNode.__reactInternalMemoizedMergedChildContext;break t}}o=o.return}while(o!==null);throw Error("Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.")}if(r.tag===1){var u=r.type;if(ce(u)){r=jl(r,u,o);break e}}r=o}else r=Ze;return t.context===null?t.context=r:t.pendingContext=r,t=$e(i,l),t.payload={element:e},n=n===void 0?null:n,n!==null&&(t.callback=n),e=lt(s,t,l),e!==null&&(Je(e,s,l,i),or(e,s,l)),l}function $u(){return null}var Hu=Sl.unstable_act,Ju={createNodeMock:function(){return null}};function pr(e){if(e.isHidden)return null;switch(e.tag){case"TEXT":return e.text;case"INSTANCE":var t=e.props,r=["children"];if(t==null)t={};else{var n={},s=Object.keys(t),i;for(i=0;iwi(r).length)break;return Ji(r)}r=r.return}return null}},{key:"children",get:function(){return wi(this._currentFiber())}}]),e}();function mr(e,t,r){var n=r?r.deep:!0,s=[];return t(e)&&(s.push(e),!n)||e.children.forEach(function(i){typeof i!="string"&&s.push.apply(s,mr(i,t,r))}),s}function dn(e,t){if(e.length===1)return e[0];throw Error((e.length===0?"No instances found ":"Expected 1 but found "+e.length+" instances ")+t)}function Yu(e){console.error(e)}var fn=new WeakMap;function Ji(e){var t=fn.get(e);return t===void 0&&e.alternate!==null&&(t=fn.get(e.alternate)),t===void 0&&(t=new Ku(e),fn.set(e,t)),t}var jt={findFiberByHostInstance:function(){throw Error("TestRenderer does not support findFiberByHostInstance()")},bundleType:0,version:"18.3.1",rendererPackageName:"react-test-renderer"},Zu={bundleType:jt.bundleType,version:jt.version,rendererPackageName:jt.rendererPackageName,rendererConfig:jt.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Ge.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Ll(e),e=e!==null?Ml(e):null,e===null?null:e.stateNode},findFiberByHostInstance:jt.findFiberByHostInstance||$u,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var sr=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!sr.isDisabled&&sr.supportsFiber)try{_r=sr.inject(Zu),Ce=sr}catch{}}$t._Scheduler=Tl;$t.act=Hu;$t.create=function(e,t){var r=Ju.createNodeMock,n=!1,s=!1;typeof t=="object"&&t!==null&&(typeof t.createNodeMock=="function"&&(r=t.createNodeMock),t.unstable_isConcurrent===!0&&(n=!0),t.unstable_strictMode===!0&&(s=!0));var i={children:[],createNodeMock:r,tag:"CONTAINER"},l=Qu(i,n?1:0,null,s,null,"",Yu);if(l==null)throw Error("something went wrong");return hn(e,l,null,null),e={_Scheduler:Tl,root:void 0,toJSON:function(){if(l==null||l.current==null||i==null||i.children.length===0)return null;if(i.children.length===1)return pr(i.children[0]);if(i.children.length===2&&i.children[0].isHidden===!0&&i.children[1].isHidden===!1)return pr(i.children[1]);var o=null;if(i.children&&i.children.length)for(var u=0;u":"attribute: {"+n+"}, parent: <"+this.parent.name+">"}isEqualNode(n){return!(n.namespaceURI!==this.namespaceURI||n.prefix!==this.prefix||n.localName!==this.localName||n.value!==this.value)}}return Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"ownerElement",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"textContent",{get:function(){return this.value},set:function(r){return this.value=r||""}}),Object.defineProperty(t.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(t.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(t.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"specified",{get:function(){return!0}}),t}.call(this)}.call(R)),Tn.exports}var Dn={exports:{}},Ws;function Ki(){return Ws||(Ws=1,function(){Dn.exports=function(){class e{constructor(r){this.nodes=r}clone(){return this.nodes=null}getNamedItem(r){return this.nodes[r]}setNamedItem(r){var n;return n=this.nodes[r.nodeName],this.nodes[r.nodeName]=r,n||null}removeNamedItem(r){var n;return n=this.nodes[r],delete this.nodes[r],n||null}item(r){return this.nodes[Object.keys(this.nodes)[r]]||null}getNamedItemNS(r,n){throw new Error("This DOM method is not implemented.")}setNamedItemNS(r){throw new Error("This DOM method is not implemented.")}removeNamedItemNS(r,n){throw new Error("This DOM method is not implemented.")}}return Object.defineProperty(e.prototype,"length",{get:function(){return Object.keys(this.nodes).length||0}}),e}.call(this)}.call(R)),Dn.exports}var Vs;function Yi(){return Vs||(Vs=1,function(){var e,t,r,n,s,i,l,o={}.hasOwnProperty;({isObject:l,isFunction:i,getValue:s}=Be()),n=we(),e=q(),t=Po(),r=Ki(),xn.exports=function(){class u extends n{constructor(c,g,v){var D,L,O,k;if(super(c),g==null)throw new Error("Missing element name. "+this.debugInfo());if(this.name=this.stringify.name(g),this.type=e.Element,this.attribs={},this.schemaTypeInfo=null,v!=null&&this.attribute(v),c.type===e.Document&&(this.isRoot=!0,this.documentObject=c,c.rootObject=this,c.children)){for(k=c.children,L=0,O=k.length;L=D;g=0<=D?++v:--v)if(!this.attribs[g].isEqualNode(c.attribs[g]))return!1;return!0}}return Object.defineProperty(u.prototype,"tagName",{get:function(){return this.name}}),Object.defineProperty(u.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(u.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(u.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(u.prototype,"id",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(u.prototype,"className",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(u.prototype,"classList",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(u.prototype,"attributes",{get:function(){return(!this.attributeMap||!this.attributeMap.nodes)&&(this.attributeMap=new r(this.attribs)),this.attributeMap}}),u}.call(this)}.call(R)),xn.exports}var En={exports:{}},Nn={exports:{}},Qs;function Qr(){return Qs||(Qs=1,function(){var e;e=we(),Nn.exports=function(){class t extends e{constructor(n){super(n),this.value=""}clone(){return Object.create(this)}substringData(n,s){throw new Error("This DOM method is not implemented."+this.debugInfo())}appendData(n){throw new Error("This DOM method is not implemented."+this.debugInfo())}insertData(n,s){throw new Error("This DOM method is not implemented."+this.debugInfo())}deleteData(n,s){throw new Error("This DOM method is not implemented."+this.debugInfo())}replaceData(n,s,i){throw new Error("This DOM method is not implemented."+this.debugInfo())}isEqualNode(n){return!(!super.isEqualNode(n)||n.data!==this.data)}}return Object.defineProperty(t.prototype,"data",{get:function(){return this.value},set:function(r){return this.value=r||""}}),Object.defineProperty(t.prototype,"length",{get:function(){return this.value.length}}),Object.defineProperty(t.prototype,"textContent",{get:function(){return this.value},set:function(r){return this.value=r||""}}),t}.call(this)}.call(R)),Nn.exports}var $s;function Zi(){return $s||($s=1,function(){var e,t;e=q(),t=Qr(),En.exports=class extends t{constructor(n,s){if(super(n),s==null)throw new Error("Missing CDATA text. "+this.debugInfo());this.name="#cdata-section",this.type=e.CData,this.value=this.stringify.cdata(s)}clone(){return Object.create(this)}toString(n){return this.options.writer.cdata(this,this.options.writer.filterOptions(n))}}}.call(R)),En.exports}var Ln={exports:{}},Hs;function Gi(){return Hs||(Hs=1,function(){var e,t;e=q(),t=Qr(),Ln.exports=class extends t{constructor(n,s){if(super(n),s==null)throw new Error("Missing comment text. "+this.debugInfo());this.name="#comment",this.type=e.Comment,this.value=this.stringify.comment(s)}clone(){return Object.create(this)}toString(n){return this.options.writer.comment(this,this.options.writer.filterOptions(n))}}}.call(R)),Ln.exports}var Mn={exports:{}},Js;function es(){return Js||(Js=1,function(){var e,t,r;({isObject:r}=Be()),t=we(),e=q(),Mn.exports=class extends t{constructor(s,i,l,o){super(s),r(i)&&({version:i,encoding:l,standalone:o}=i),i||(i="1.0"),this.type=e.Declaration,this.version=this.stringify.xmlVersion(i),l!=null&&(this.encoding=this.stringify.xmlEncoding(l)),o!=null&&(this.standalone=this.stringify.xmlStandalone(o))}toString(s){return this.options.writer.declaration(this,this.options.writer.filterOptions(s))}}}.call(R)),Mn.exports}var On={exports:{}},In={exports:{}},Ks;function ts(){return Ks||(Ks=1,function(){var e,t;t=we(),e=q(),In.exports=class extends t{constructor(n,s,i,l,o,u){if(super(n),s==null)throw new Error("Missing DTD element name. "+this.debugInfo());if(i==null)throw new Error("Missing DTD attribute name. "+this.debugInfo(s));if(!l)throw new Error("Missing DTD attribute type. "+this.debugInfo(s));if(!o)throw new Error("Missing DTD attribute default. "+this.debugInfo(s));if(o.indexOf("#")!==0&&(o="#"+o),!o.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/))throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. "+this.debugInfo(s));if(u&&!o.match(/^(#FIXED|#DEFAULT)$/))throw new Error("Default value only applies to #FIXED or #DEFAULT. "+this.debugInfo(s));this.elementName=this.stringify.name(s),this.type=e.AttributeDeclaration,this.attributeName=this.stringify.name(i),this.attributeType=this.stringify.dtdAttType(l),u&&(this.defaultValue=this.stringify.dtdAttDefault(u)),this.defaultValueType=o}toString(n){return this.options.writer.dtdAttList(this,this.options.writer.filterOptions(n))}}}.call(R)),In.exports}var Cn={exports:{}},Ys;function rs(){return Ys||(Ys=1,function(){var e,t,r;({isObject:r}=Be()),t=we(),e=q(),Cn.exports=function(){class n extends t{constructor(i,l,o,u){if(super(i),o==null)throw new Error("Missing DTD entity name. "+this.debugInfo(o));if(u==null)throw new Error("Missing DTD entity value. "+this.debugInfo(o));if(this.pe=!!l,this.name=this.stringify.name(o),this.type=e.EntityDeclaration,!r(u))this.value=this.stringify.dtdEntityValue(u),this.internal=!0;else{if(!u.pubID&&!u.sysID)throw new Error("Public and/or system identifiers are required for an external entity. "+this.debugInfo(o));if(u.pubID&&!u.sysID)throw new Error("System identifier is required for a public external entity. "+this.debugInfo(o));if(this.internal=!1,u.pubID!=null&&(this.pubID=this.stringify.dtdPubID(u.pubID)),u.sysID!=null&&(this.sysID=this.stringify.dtdSysID(u.sysID)),u.nData!=null&&(this.nData=this.stringify.dtdNData(u.nData)),this.pe&&this.nData)throw new Error("Notation declaration is not allowed in a parameter entity. "+this.debugInfo(o))}}toString(i){return this.options.writer.dtdEntity(this,this.options.writer.filterOptions(i))}}return Object.defineProperty(n.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(n.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(n.prototype,"notationName",{get:function(){return this.nData||null}}),Object.defineProperty(n.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(n.prototype,"xmlEncoding",{get:function(){return null}}),Object.defineProperty(n.prototype,"xmlVersion",{get:function(){return null}}),n}.call(this)}.call(R)),Cn.exports}var Pn={exports:{}},Zs;function ns(){return Zs||(Zs=1,function(){var e,t;t=we(),e=q(),Pn.exports=class extends t{constructor(n,s,i){if(super(n),s==null)throw new Error("Missing DTD element name. "+this.debugInfo());i||(i="(#PCDATA)"),Array.isArray(i)&&(i="("+i.join(",")+")"),this.name=this.stringify.name(s),this.type=e.ElementDeclaration,this.value=this.stringify.dtdElementValue(i)}toString(n){return this.options.writer.dtdElement(this,this.options.writer.filterOptions(n))}}}.call(R)),Pn.exports}var kn={exports:{}},Gs;function is(){return Gs||(Gs=1,function(){var e,t;t=we(),e=q(),kn.exports=function(){class r extends t{constructor(s,i,l){if(super(s),i==null)throw new Error("Missing DTD notation name. "+this.debugInfo(i));if(!l.pubID&&!l.sysID)throw new Error("Public or system identifiers are required for an external entity. "+this.debugInfo(i));this.name=this.stringify.name(i),this.type=e.NotationDeclaration,l.pubID!=null&&(this.pubID=this.stringify.dtdPubID(l.pubID)),l.sysID!=null&&(this.sysID=this.stringify.dtdSysID(l.sysID))}toString(s){return this.options.writer.dtdNotation(this,this.options.writer.filterOptions(s))}}return Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),r}.call(this)}.call(R)),kn.exports}var el;function ss(){return el||(el=1,function(){var e,t,r,n,s,i,l,o;({isObject:o}=Be()),l=we(),e=q(),t=ts(),n=rs(),r=ns(),s=is(),i=Ki(),On.exports=function(){class u extends l{constructor(c,g,v){var D,L,O,k;if(super(c),this.type=e.DocType,c.children){for(k=c.children,L=0,O=k.length;L":(m=this.parent)!=null&&m.name?"node: <"+a+">, parent: <"+this.parent.name+">":"node: <"+a+">"}ele(a,p,m){return this.element(a,p,m)}nod(a,p,m){return this.node(a,p,m)}txt(a){return this.text(a)}dat(a){return this.cdata(a)}com(a){return this.comment(a)}ins(a,p){return this.instruction(a,p)}doc(){return this.document()}dec(a,p,m){return this.declaration(a,p,m)}e(a,p,m){return this.element(a,p,m)}n(a,p,m){return this.node(a,p,m)}t(a){return this.text(a)}d(a){return this.cdata(a)}c(a){return this.comment(a)}r(a){return this.raw(a)}i(a,p){return this.instruction(a,p)}u(){return this.up()}importXMLBuilder(a){return this.importDocument(a)}attribute(a,p){throw new Error("attribute() applies to element nodes only.")}att(a,p){return this.attribute(a,p)}a(a,p){return this.attribute(a,p)}removeAttribute(a){throw new Error("attribute() applies to element nodes only.")}replaceChild(a,p){throw new Error("This DOM method is not implemented."+this.debugInfo())}removeChild(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}appendChild(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}hasChildNodes(){return this.children.length!==0}cloneNode(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}normalize(){throw new Error("This DOM method is not implemented."+this.debugInfo())}isSupported(a,p){return!0}hasAttributes(){return this.attribs.length!==0}compareDocumentPosition(a){var p,m;return p=this,p===a?0:this.document()!==a.document()?(m=e.Disconnected|e.ImplementationSpecific,Math.random()<.5?m|=e.Preceding:m|=e.Following,m):p.isAncestor(a)?e.Contains|e.Preceding:p.isDescendant(a)?e.Contains|e.Following:p.isPreceding(a)?e.Preceding:e.Following}isSameNode(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}lookupPrefix(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}isDefaultNamespace(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}lookupNamespaceURI(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}isEqualNode(a){var p,m,S;if(a.nodeType!==this.nodeType||a.children.length!==this.children.length)return!1;for(p=m=0,S=this.children.length-1;0<=S?m<=S:m>=S;p=0<=S?++m:--m)if(!this.children[p].isEqualNode(a.children[p]))return!1;return!0}getFeature(a,p){throw new Error("This DOM method is not implemented."+this.debugInfo())}setUserData(a,p,m){throw new Error("This DOM method is not implemented."+this.debugInfo())}getUserData(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}contains(a){return a?a===this||this.isDescendant(a):!1}isDescendant(a){var p,m,S,h,y;for(y=this.children,S=0,h=y.length;Sm}treePosition(a){var p,m;return m=0,p=!1,this.foreachTreeNode(this.document(),function(S){if(m++,!p&&S===a)return p=!0}),p?m:-1}foreachTreeNode(a,p){var m,S,h,y,T;for(a||(a=this.document()),y=a.children,S=0,h=y.length;S","]]]]>"),this.assertLegalChar(n))}comment(n){if(this.options.noValidation)return n;if(n=""+n||"",n.match(/--/))throw new Error("Comment text cannot contain double-hypen: "+n);return this.assertLegalChar(n)}raw(n){return this.options.noValidation?n:""+n||""}attValue(n){return this.options.noValidation?n:this.assertLegalChar(this.attEscape(n=""+n||""))}insTarget(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}insValue(n){if(this.options.noValidation)return n;if(n=""+n||"",n.match(/\?>/))throw new Error("Invalid processing instruction value: "+n);return this.assertLegalChar(n)}xmlVersion(n){if(this.options.noValidation)return n;if(n=""+n||"",!n.match(/1\.[0-9]+/))throw new Error("Invalid version number: "+n);return n}xmlEncoding(n){if(this.options.noValidation)return n;if(n=""+n||"",!n.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/))throw new Error("Invalid encoding: "+n);return this.assertLegalChar(n)}xmlStandalone(n){return this.options.noValidation?n:n?"yes":"no"}dtdPubID(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdSysID(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdElementValue(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdAttType(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdAttDefault(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdEntityValue(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdNData(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}assertLegalChar(n){var s,i;if(this.options.noValidation)return n;if(this.options.version==="1.0"){if(s=/[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,this.options.invalidCharReplacement!==void 0)n=n.replace(s,this.options.invalidCharReplacement);else if(i=n.match(s))throw new Error(`Invalid character in string: ${n} at index ${i.index}`)}else if(this.options.version==="1.1"){if(s=/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,this.options.invalidCharReplacement!==void 0)n=n.replace(s,this.options.invalidCharReplacement);else if(i=n.match(s))throw new Error(`Invalid character in string: ${n} at index ${i.index}`)}return n}assertLegalName(n){var s;if(this.options.noValidation)return n;if(n=this.assertLegalChar(n),s=/^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/,!n.match(s))throw new Error(`Invalid character in name: ${n}`);return n}textEscape(n){var s;return this.options.noValidation?n:(s=this.options.noDoubleEncoding?/(?!&(lt|gt|amp|apos|quot);)&/g:/&/g,n.replace(s,"&").replace(//g,">").replace(/\r/g," "))}attEscape(n){var s;return this.options.noValidation?n:(s=this.options.noDoubleEncoding?/(?!&(lt|gt|amp|apos|quot);)&/g:/&/g,n.replace(s,"&").replace(/0)?new Array(u).join(l.indent):""}endline(i,l,o){return!l.pretty||l.suppressPrettyCount?"":l.newline}attribute(i,l,o){var u;return this.openAttribute(i,l,o),l.pretty&&l.width>0?u=i.name+'="'+i.value+'"':u=" "+i.name+'="'+i.value+'"',this.closeAttribute(i,l,o),u}cdata(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}comment(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}declaration(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+"",u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}docType(i,l,o){var u,d,c,g,v;if(o||(o=0),this.openNode(i,l,o),l.state=t.OpenTag,g=this.indent(i,l,o),g+="0){for(g+=" [",g+=this.endline(i,l,o),l.state=t.InsideTag,v=i.children,d=0,c=v.length;d",g+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),g}element(i,l,o){var u,d,c,g,v,D,L,O,k,x,f,w,a,p,m,S,h,y,T;if(o||(o=0),w=!1,this.openNode(i,l,o),l.state=t.OpenTag,a=this.indent(i,l,o)+"<"+i.name,l.pretty&&l.width>0){O=a.length,m=i.attribs;for(f in m)n.call(m,f)&&(u=m[f],p=this.attribute(u,l,o),d=p.length,O+d>l.width?(T=this.indent(i,l,o+1)+p,a+=this.endline(i,l,o)+T,O=T.length):(T=" "+p,a+=T,O+=T.length))}else{S=i.attribs;for(f in S)n.call(S,f)&&(u=S[f],a+=this.attribute(u,l,o))}if(g=i.children.length,v=g===0?null:i.children[0],g===0||i.children.every(function(M){return(M.type===e.Text||M.type===e.Raw||M.type===e.CData)&&M.value===""}))l.allowEmpty?(a+=">",l.state=t.CloseTag,a+=""+this.endline(i,l,o)):(l.state=t.CloseTag,a+=l.spaceBeforeSlash+"/>"+this.endline(i,l,o));else if(l.pretty&&g===1&&(v.type===e.Text||v.type===e.Raw||v.type===e.CData)&&v.value!=null)a+=">",l.state=t.InsideTag,l.suppressPrettyCount++,w=!0,a+=this.writeChildNode(v,l,o+1),l.suppressPrettyCount--,w=!1,l.state=t.CloseTag,a+=""+this.endline(i,l,o);else{if(l.dontPrettyTextNodes){for(h=i.children,D=0,k=h.length;D"+this.endline(i,l,o),l.state=t.InsideTag,y=i.children,L=0,x=y.length;L",w&&l.suppressPrettyCount--,a+=this.endline(i,l,o),l.state=t.None}return this.closeNode(i,l,o),a}writeChildNode(i,l,o){switch(i.type){case e.CData:return this.cdata(i,l,o);case e.Comment:return this.comment(i,l,o);case e.Element:return this.element(i,l,o);case e.Raw:return this.raw(i,l,o);case e.Text:return this.text(i,l,o);case e.ProcessingInstruction:return this.processingInstruction(i,l,o);case e.Dummy:return"";case e.Declaration:return this.declaration(i,l,o);case e.DocType:return this.docType(i,l,o);case e.AttributeDeclaration:return this.dtdAttList(i,l,o);case e.ElementDeclaration:return this.dtdElement(i,l,o);case e.EntityDeclaration:return this.dtdEntity(i,l,o);case e.NotationDeclaration:return this.dtdNotation(i,l,o);default:throw new Error("Unknown XML node type: "+i.constructor.name)}}processingInstruction(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+"",u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}raw(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o),l.state=t.InsideTag,u+=i.value,l.state=t.CloseTag,u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}text(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o),l.state=t.InsideTag,u+=i.value,l.state=t.CloseTag,u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdAttList(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdElement(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdEntity(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdNotation(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}openNode(i,l,o){}closeNode(i,l,o){}openAttribute(i,l,o){}closeAttribute(i,l,o){}}}.call(R)),bn.exports}var hl;function as(){return hl||(hl=1,function(){var e;e=Ro(),An.exports=class extends e{constructor(r){super(r)}document(r,n){var s,i,l,o,u;for(n=this.filterOptions(n),o="",u=r.children,i=0,l=u.length;i=0;)this.up();return this.onEnd()}openCurrent(){if(this.currentNode)return this.currentNode.children=!0,this.openNode(this.currentNode)}openNode(h){var y,T,M,C;if(!h.isOpen){if(!this.root&&this.currentLevel===0&&h.type===e.Element&&(this.root=h),T="",h.type===e.Element){this.writerOptions.state=t.OpenTag,T=this.writer.indent(h,this.writerOptions,this.currentLevel)+"<"+h.name,C=h.attribs;for(M in C)m.call(C,M)&&(y=C[M],T+=this.writer.attribute(y,this.writerOptions,this.currentLevel));T+=(h.children?">":"/>")+this.writer.endline(h,this.writerOptions,this.currentLevel),this.writerOptions.state=t.InsideTag}else this.writerOptions.state=t.OpenTag,T=this.writer.indent(h,this.writerOptions,this.currentLevel)+""),T+=this.writer.endline(h,this.writerOptions,this.currentLevel);return this.onData(T,this.currentLevel),h.isOpen=!0}}closeNode(h){var y;if(!h.isClosed)return y="",this.writerOptions.state=t.CloseTag,h.type===e.Element?y=this.writer.indent(h,this.writerOptions,this.currentLevel)+""+this.writer.endline(h,this.writerOptions,this.currentLevel):y=this.writer.indent(h,this.writerOptions,this.currentLevel)+"]>"+this.writer.endline(h,this.writerOptions,this.currentLevel),this.writerOptions.state=t.None,this.onData(y,this.currentLevel),h.isClosed=!0}onData(h,y){return this.documentStarted=!0,this.onDataCallback(h,y+1)}onEnd(){return this.documentCompleted=!0,this.onEndCallback()}debugInfo(h){return h==null?"":"node: <"+h+">"}ele(){return this.element(...arguments)}nod(h,y,T){return this.node(h,y,T)}txt(h){return this.text(h)}dat(h){return this.cdata(h)}com(h){return this.comment(h)}ins(h,y){return this.instruction(h,y)}dec(h,y,T){return this.declaration(h,y,T)}dtd(h,y,T){return this.doctype(h,y,T)}e(h,y,T){return this.element(h,y,T)}n(h,y,T){return this.node(h,y,T)}t(h){return this.text(h)}d(h){return this.cdata(h)}c(h){return this.comment(h)}r(h){return this.raw(h)}i(h,y){return this.instruction(h,y)}att(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList(...arguments):this.attribute(...arguments)}a(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList(...arguments):this.attribute(...arguments)}ent(h,y){return this.entity(h,y)}pent(h,y){return this.pEntity(h,y)}not(h,y){return this.notation(h,y)}}}.call(R)),qn.exports}var Wn={exports:{}},pl;function oa(){return pl||(pl=1,function(){var e,t,r,n={}.hasOwnProperty;e=q(),r=Ro(),t=$r(),Wn.exports=class extends r{constructor(i,l){super(l),this.stream=i}endline(i,l,o){return i.isLastRootNode&&l.state===t.CloseTag?"":super.endline(i,l,o)}document(i,l){var o,u,d,c,g,v,D,L,O;for(D=i.children,u=d=0,g=D.length;d0){for(this.stream.write(" ["),this.stream.write(this.endline(i,l,o)),l.state=t.InsideTag,g=i.children,d=0,c=g.length;d"),this.stream.write(this.endline(i,l,o)),l.state=t.None,this.closeNode(i,l,o)}element(i,l,o){var u,d,c,g,v,D,L,O,k,x,f,w,a,p,m;if(o||(o=0),this.openNode(i,l,o),l.state=t.OpenTag,x=this.indent(i,l,o)+"<"+i.name,l.pretty&&l.width>0){L=x.length,w=i.attribs;for(k in w)n.call(w,k)&&(u=w[k],f=this.attribute(u,l,o),d=f.length,L+d>l.width?(m=this.indent(i,l,o+1)+f,x+=this.endline(i,l,o)+m,L=m.length):(m=" "+f,x+=m,L+=m.length))}else{a=i.attribs;for(k in a)n.call(a,k)&&(u=a[k],x+=this.attribute(u,l,o))}if(this.stream.write(x),g=i.children.length,v=g===0?null:i.children[0],g===0||i.children.every(function(S){return(S.type===e.Text||S.type===e.Raw||S.type===e.CData)&&S.value===""}))l.allowEmpty?(this.stream.write(">"),l.state=t.CloseTag,this.stream.write("")):(l.state=t.CloseTag,this.stream.write(l.spaceBeforeSlash+"/>"));else if(l.pretty&&g===1&&(v.type===e.Text||v.type===e.Raw||v.type===e.CData)&&v.value!=null)this.stream.write(">"),l.state=t.InsideTag,l.suppressPrettyCount++,this.writeChildNode(v,l,o+1),l.suppressPrettyCount--,l.state=t.CloseTag,this.stream.write("");else{for(this.stream.write(">"+this.endline(i,l,o)),l.state=t.InsideTag,p=i.children,D=0,O=p.length;D")}return this.stream.write(this.endline(i,l,o)),l.state=t.None,this.closeNode(i,l,o)}processingInstruction(i,l,o){return this.stream.write(super.processingInstruction(i,l,o))}raw(i,l,o){return this.stream.write(super.raw(i,l,o))}text(i,l,o){return this.stream.write(super.text(i,l,o))}dtdAttList(i,l,o){return this.stream.write(super.dtdAttList(i,l,o))}dtdElement(i,l,o){return this.stream.write(super.dtdElement(i,l,o))}dtdEntity(i,l,o){return this.stream.write(super.dtdEntity(i,l,o))}dtdNotation(i,l,o){return this.stream.write(super.dtdNotation(i,l,o))}}}.call(R)),Wn.exports}(function(){var e,t,r,n,s,i,l,o,u;({assign:o,isFunction:u}=Be()),r=Co(),n=Xo(),s=la(),l=as(),i=oa(),e=q(),t=$r(),_e.create=function(d,c,g,v){var D,L;if(d==null)throw new Error("Root element needs a name.");return v=o({},c,g,v),D=new n(v),L=D.element(d),v.headless||(D.declaration(v),(v.pubID!=null||v.sysID!=null)&&D.dtd(v)),L},_e.begin=function(d,c,g){return u(d)&&([c,g]=[d,c],d={}),c?new s(d,c,g):new n(d)},_e.stringWriter=function(d){return new l(d)},_e.streamWriter=function(d,c){return new i(d,c)},_e.implementation=new r,_e.nodeType=e,_e.writerState=t}).call(R);const Fo=(e,t,r=!1)=>{const{type:n,props:s,children:i}=t,l=i||[],o=l[0];if(l.length===1&&typeof o=="string"){e.ele(n,s,o);return}let u=null;r?Object.keys(s).map(d=>{e.att(d,s[d])}):u=e.ele(n,s),l.forEach(d=>{if(typeof d=="string")throw new Error("Invaild XML");Fo(u||e,d)})},ua=e=>{const t=ea.create(e).toJSON();if(!t)throw new Error("Element is invalid");const r=_e.create(t.type);return Fo(r,t,!0),r.end({pretty:!0}),r.toString({pretty:!0})};class Fa{title;pageSize;unitSize;staffLayout;paperOptions;headers;voiceStaves;score;workTitle="";partBuilders=[];constructor(t){Object.assign(this,t);const r=this.voiceStaves;for(const[n,s]of this.partTemplate.entries()){const i=this.ensurePartBuilder(n,s);for(const l of s.map(o=>r[o]))for(const[o,u]of l.voices.entries())for(const[d,c]of u.measures.entries())i.ensureMeasureBuilder(d).addVoice({...c,voiceIndexOfStaff:o})}}get partTemplate(){return this.staffLayout.partGroups.map(t=>t.range[0]===t.range[1]?[t.range[0]]:t.range)}ensurePartBuilder(t,r){for(;this.partBuilders.length<=t;){const n=new aa({parent:this,template:r});this.partBuilders.push(n)}return this.partBuilders[t]}createPartListElement(){return E.jsx("part-list",{children:this.partBuilders.map(t=>E.jsx("score-part",{id:t.id,children:E.jsx("part-name",{"print-object":"no",children:t.name})}))})}toJSX(){const t=new Date;return`${t.getFullYear()}${String(t.getMonth()+1).padStart(2,"0")}${String(t.getDate()).padStart(2,"0")}`,E.jsxs("score-partwise",{version:"4.0",children:[E.jsx("work",{children:E.jsx("work-title",{children:this.workTitle})}),E.jsx("movement-title",{children:this.workTitle}),E.jsx("defaults",{children:E.jsxs("scaling",{children:[E.jsx("millimeters",{children:"8"}),E.jsx("tenths",{children:Jo})]})}),E.jsx("part-list",{children:this.partBuilders.map(r=>E.jsx("score-part",{id:r.id,children:E.jsx("part-name",{"print-object":"no",children:"MusicXML Part"})}))}),this.partBuilders.map(r=>r.toJSX())]})}toString(){return` +`+i.stack}return{value:e,source:t,stack:s,digest:null}}function un(e,t,r){return{value:e,source:null,stack:r??null,digest:t??null}}function li(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var Eu=typeof WeakMap=="function"?WeakMap:Map;function io(e,t,r){r=He(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){Fr||(Fr=!0,mi=n),li(e,t)},r}function so(e,t,r){r=He(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var s=t.value;r.payload=function(){return n(s)},r.callback=function(){li(e,t)}}var i=e.stateNode;return i!==null&&typeof i.componentDidCatch=="function"&&(r.callback=function(){li(e,t),typeof n!="function"&&(Je===null?Je=new Set([this]):Je.add(this));var l=t.stack;this.componentDidCatch(t.value,{componentStack:l!==null?l:""})}),r}function Ms(e,t,r){var n=e.pingCache;if(n===null){n=e.pingCache=new Eu;var s=new Set;n.set(t,s)}else s=n.get(t),s===void 0&&(s=new Set,n.set(t,s));s.has(r)||(s.add(r),e=_u.bind(null,e,t,r),t.then(e,e))}var Nu=et.ReactCurrentOwner,oe=!1;function ie(e,t,r,n){t.child=e===null?gu(t,null,r,n):Ot(t,e.child,r,n)}function Os(e,t,r,n,s){r=r.render;var i=t.ref;return Dt(t,s),n=Bi(e,t,r,n,i,s),e!==null&&!oe?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~s,ze(e,t,s)):(t.flags|=1,ie(e,t,n,s),t.child)}function Is(e,t,r,n,s){if(e===null){var i=r.type;return typeof i=="function"&&!Ji(i)&&i.defaultProps===void 0&&r.compare===null&&r.defaultProps===void 0?(t.tag=15,t.type=i,lo(e,t,i,n,s)):(e=gr(r.type,null,n,t,t.mode,s),e.ref=t.ref,e.return=t,t.child=e)}if(i=e.child,!(e.lanes&s)){var l=i.memoizedProps;if(r=r.compare,r=r!==null?r:Lr,r(l,n)&&e.ref===t.ref)return ze(e,t,s)}return t.flags|=1,e=Ye(i,n),e.ref=t.ref,e.return=t,t.child=e}function lo(e,t,r,n,s){if(e!==null){var i=e.memoizedProps;if(Lr(i,n)&&e.ref===t.ref)if(oe=!1,t.pendingProps=n=i,(e.lanes&s)!==0)e.flags&131072&&(oe=!0);else return t.lanes=e.lanes,ze(e,t,s)}return oi(e,t,r,n,s)}function oo(e,t,r){var n=t.pendingProps,s=n.children,i=e!==null?e.memoizedState:null;if(n.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},z(St,de),de|=r;else{if(!(r&1073741824))return e=i!==null?i.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,z(St,de),de|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=i!==null?i.baseLanes:r,z(St,de),de|=n}else i!==null?(n=i.baseLanes|r,t.memoizedState=null):n=r,z(St,de),de|=n;return ie(e,t,s,r),t.child}function uo(e,t){var r=t.ref;(e===null&&r!==null||e!==null&&e.ref!==r)&&(t.flags|=512)}function oi(e,t,r,n,s){var i=he(r)?ht:te.current;return i=Mt(t,i),Dt(t,s),r=Bi(e,t,r,n,i,s),e!==null&&!oe?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~s,ze(e,t,s)):(t.flags|=1,ie(e,t,r,s),t.child)}function Cs(e,t,r,n,s){if(he(r)){var i=!0;Nr(t)}else i=!1;if(Dt(t,s),t.stateNode===null)fr(e,t),no(t,r,n),si(t,r,n,s),n=!0;else if(e===null){var l=t.stateNode,o=t.memoizedProps;l.props=o;var u=l.context,d=r.contextType;typeof d=="object"&&d!==null?d=we(d):(d=he(r)?ht:te.current,d=Mt(t,d));var c=r.getDerivedStateFromProps,g=typeof c=="function"||typeof l.getSnapshotBeforeUpdate=="function";g||typeof l.UNSAFE_componentWillReceiveProps!="function"&&typeof l.componentWillReceiveProps!="function"||(o!==n||u!==d)&&Ls(t,l,n,d),qe=!1;var v=t.memoizedState;l.state=v,Ir(t,n,l,s),u=t.memoizedState,o!==n||v!==u||ce.current||qe?(typeof c=="function"&&(ii(t,r,c,n),u=t.memoizedState),(o=qe||Ns(t,r,o,n,v,u,d))?(g||typeof l.UNSAFE_componentWillMount!="function"&&typeof l.componentWillMount!="function"||(typeof l.componentWillMount=="function"&&l.componentWillMount(),typeof l.UNSAFE_componentWillMount=="function"&&l.UNSAFE_componentWillMount()),typeof l.componentDidMount=="function"&&(t.flags|=4)):(typeof l.componentDidMount=="function"&&(t.flags|=4),t.memoizedProps=n,t.memoizedState=u),l.props=n,l.state=u,l.context=d,n=o):(typeof l.componentDidMount=="function"&&(t.flags|=4),n=!1)}else{l=t.stateNode,Fl(e,t),o=t.memoizedProps,d=t.type===t.elementType?o:Te(t.type,o),l.props=d,g=t.pendingProps,v=l.context,u=r.contextType,typeof u=="object"&&u!==null?u=we(u):(u=he(r)?ht:te.current,u=Mt(t,u));var E=r.getDerivedStateFromProps;(c=typeof E=="function"||typeof l.getSnapshotBeforeUpdate=="function")||typeof l.UNSAFE_componentWillReceiveProps!="function"&&typeof l.componentWillReceiveProps!="function"||(o!==g||v!==u)&&Ls(t,l,n,u),qe=!1,v=t.memoizedState,l.state=v,Ir(t,n,l,s);var L=t.memoizedState;o!==g||v!==L||ce.current||qe?(typeof E=="function"&&(ii(t,r,E,n),L=t.memoizedState),(d=qe||Ns(t,r,d,n,v,L,u)||!1)?(c||typeof l.UNSAFE_componentWillUpdate!="function"&&typeof l.componentWillUpdate!="function"||(typeof l.componentWillUpdate=="function"&&l.componentWillUpdate(n,L,u),typeof l.UNSAFE_componentWillUpdate=="function"&&l.UNSAFE_componentWillUpdate(n,L,u)),typeof l.componentDidUpdate=="function"&&(t.flags|=4),typeof l.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof l.componentDidUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof l.getSnapshotBeforeUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=L),l.props=n,l.state=L,l.context=u,n=d):(typeof l.componentDidUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof l.getSnapshotBeforeUpdate!="function"||o===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),n=!1)}return ui(e,t,r,n,i,s)}function ui(e,t,r,n,s,i){uo(e,t);var l=(t.flags&128)!==0;if(!n&&!l)return s&&ys(t,r,!1),ze(e,t,i);n=t.stateNode,Nu.current=t;var o=l&&typeof r.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&l?(t.child=Ot(t,e.child,null,i),t.child=Ot(t,null,o,i)):ie(e,t,o,i),t.memoizedState=n.state,s&&ys(t,r,!0),t.child}function ao(e){var t=e.stateNode;t.pendingContext?gs(e,t.pendingContext,t.pendingContext!==t.context):t.context&&gs(e,t.context,!1),Ri(e,t.containerInfo)}var ai={dehydrated:null,treeContext:null,retryLane:0};function ci(e){return{baseLanes:e,cachePool:null,transitions:null}}function co(e,t,r){var n=t.pendingProps,s=A.current,i=!1,l=(t.flags&128)!==0,o;if((o=l)||(o=e!==null&&e.memoizedState===null?!1:(s&2)!==0),o?(i=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(s|=1),z(A,s&1),e===null)return e=t.memoizedState,e!==null&&e.dehydrated!==null?(t.mode&1?Qe()?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(l=n.children,e=n.fallback,i?(n=t.mode,i=t.child,l={mode:"hidden",children:l},!(n&1)&&i!==null?(i.childLanes=0,i.pendingProps=l):i=Hr(l,n,0,null),e=at(e,n,r,null),i.return=t,e.return=t,i.sibling=e,t.child=i,t.child.memoizedState=ci(r),t.memoizedState=ai,e):Ui(t,l));if(s=e.memoizedState,s!==null&&(o=s.dehydrated,o!==null))return Lu(e,t,l,n,o,s,r);if(i){i=n.fallback,l=t.mode,s=e.child,o=s.sibling;var u={mode:"hidden",children:n.children};return!(l&1)&&t.child!==s?(n=t.child,n.childLanes=0,n.pendingProps=u,t.deletions=null):(n=Ye(s,u),n.subtreeFlags=s.subtreeFlags&14680064),o!==null?i=Ye(o,i):(i=at(i,l,r,null),i.flags|=2),i.return=t,n.return=t,n.sibling=i,t.child=n,n=i,i=t.child,l=e.child.memoizedState,l=l===null?ci(r):{baseLanes:l.baseLanes|r,cachePool:null,transitions:l.transitions},i.memoizedState=l,i.childLanes=e.childLanes&~r,t.memoizedState=ai,n}return i=e.child,e=i.sibling,n=Ye(i,{mode:"visible",children:n.children}),!(t.mode&1)&&(n.lanes=r),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n}function Ui(e,t){return t=Hr({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function lr(e,t,r,n){return n!==null&&(Xe===null?Xe=[n]:Xe.push(n)),Ot(t,e.child,null,r),e=Ui(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Lu(e,t,r,n,s,i,l){if(r)return t.flags&256?(t.flags&=-257,i=un(Error("There was an error while hydrating this Suspense boundary. Switched to client rendering.")),lr(e,t,l,i)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(i=n.fallback,r=t.mode,n=Hr({mode:"visible",children:n.children},r,0,null),i=at(i,r,l,null),i.flags|=2,n.return=t,i.return=t,n.sibling=i,t.child=n,t.mode&1&&Ot(t,e.child,null,l),t.child.memoizedState=ci(l),t.memoizedState=ai,i);if(!(t.mode&1))return lr(e,t,l,null);if(Qe())return i=Qe().digest,i=un(Error("The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."),i,void 0),lr(e,t,l,i);if(r=(l&e.childLanes)!==0,oe||r){if(n=J,n!==null){switch(l&-l){case 4:r=2;break;case 16:r=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=r&(n.suspendedLanes|l)?0:r,r!==0&&r!==i.retryLane&&(i.retryLane=r,It(e,r),Ke(n,e,r,-1))}return Hi(),i=un(Error("This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition.")),lr(e,t,l,i)}return Qe()?(t.flags|=128,t.child=e.child,Au.bind(null,e),Qe(),null):(e=Ui(t,n.children),e.flags|=4096,e)}function Ps(e,t,r){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),ni(e.return,t,r)}function an(e,t,r,n,s){var i=e.memoizedState;i===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:s}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=n,i.tail=r,i.tailMode=s)}function ho(e,t,r){var n=t.pendingProps,s=n.revealOrder,i=n.tail;if(ie(e,t,n.children,r),n=A.current,n&2)n=n&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Ps(e,r,t);else if(e.tag===19)Ps(e,r,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(z(A,n),!(t.mode&1))t.memoizedState=null;else switch(s){case"forwards":for(r=t.child,s=null;r!==null;)e=r.alternate,e!==null&&Cr(e)===null&&(s=r),r=r.sibling;r=s,r===null?(s=t.child,t.child=null):(s=r.sibling,r.sibling=null),an(t,!1,s,r,i);break;case"backwards":for(r=null,s=t.child,t.child=null;s!==null;){if(e=s.alternate,e!==null&&Cr(e)===null){t.child=s;break}e=s.sibling,s.sibling=r,r=s,s=e}an(t,!0,r,null,i);break;case"together":an(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function fr(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function ze(e,t,r){if(e!==null&&(t.dependencies=e.dependencies),ft|=t.lanes,!(r&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error("Resuming work not yet implemented.");if(t.child!==null){for(e=t.child,r=Ye(e,e.pendingProps),t.child=r,r.return=t;e.sibling!==null;)e=e.sibling,r=r.sibling=Ye(e,e.pendingProps),r.return=t;r.sibling=null}return t.child}function Mu(e,t,r){switch(t.tag){case 3:ao(t);break;case 5:zl(t);break;case 1:he(t.type)&&Nr(t);break;case 4:Ri(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,s=t.memoizedProps.value;z(Mr,n._currentValue2),n._currentValue2=s;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(z(A,A.current&1),t.flags|=128,null):r&t.child.childLanes?co(e,t,r):(z(A,A.current&1),e=ze(e,t,r),e!==null?e.sibling:null);z(A,A.current&1);break;case 19:if(n=(r&t.childLanes)!==0,e.flags&128){if(n)return ho(e,t,r);t.flags|=128}if(s=t.memoizedState,s!==null&&(s.rendering=null,s.tail=null,s.lastEffect=null),z(A,A.current),n)break;return null;case 22:case 23:return t.lanes=0,oo(e,t,r)}return ze(e,t,r)}var fo,hi,po,mo;fo=function(e,t){for(var r=t.child;r!==null;){if(r.tag===5||r.tag===6){var n=e,s=r.stateNode,i=n.children.indexOf(s);i!==-1&&n.children.splice(i,1),n.children.push(s)}else if(r.tag!==4&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}};hi=function(){};po=function(e,t,r,n){e.memoizedProps!==n&&(st(ke.current),t.updateQueue=au)&&(t.flags|=4)};mo=function(e,t,r,n){r!==n&&(t.flags|=4)};function Rt(e,t){switch(e.tailMode){case"hidden":t=e.tail;for(var r=null;t!==null;)t.alternate!==null&&(r=t),t=t.sibling;r===null?e.tail=null:r.sibling=null;break;case"collapsed":r=e.tail;for(var n=null;r!==null;)r.alternate!==null&&(n=r),r=r.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Z(e){var t=e.alternate!==null&&e.alternate.child===e.child,r=0,n=0;if(t)for(var s=e.child;s!==null;)r|=s.lanes|s.childLanes,n|=s.subtreeFlags&14680064,n|=s.flags&14680064,s.return=e,s=s.sibling;else for(s=e.child;s!==null;)r|=s.lanes|s.childLanes,n|=s.subtreeFlags,n|=s.flags,s.return=e,s=s.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function Ou(e,t,r){var n=t.pendingProps;switch(Oi(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Z(t),null;case 1:return he(t.type)&&Er(),Z(t),null;case 3:return r=t.stateNode,Ct(),_(ce),_(te),Fi(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),e!==null&&e.child!==null||e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Xe!==null&&(vi(Xe),Xe=null)),hi(e,t),Z(t),null;case 5:Xi(t),r=st(Vt.current);var s=t.type;if(e!==null&&t.stateNode!=null)po(e,t,s,n,r),e.ref!==t.ref&&(t.flags|=512);else{if(!n){if(t.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Z(t),null}st(ke.current),e={type:s,props:n,isHidden:!1,children:[],internalInstanceHandle:t,rootContainerInstance:r,tag:"INSTANCE"},fo(e,t,!1,!1),t.stateNode=e,t.ref!==null&&(t.flags|=512)}return Z(t),null;case 6:if(e&&t.stateNode!=null)mo(e,t,e.memoizedProps,n);else{if(typeof n!="string"&&t.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");st(Vt.current),st(ke.current),t.stateNode={text:n,isHidden:!1,tag:"TEXT"}}return Z(t),null;case 13:if(_(A),n=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(n!==null&&n.dehydrated!==null){if(e===null)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");!(t.flags&128)&&(t.memoizedState=null),t.flags|=4,Z(t),s=!1}else Xe!==null&&(vi(Xe),Xe=null),s=!0;if(!s)return t.flags&65536?t:null}return t.flags&128?(t.lanes=r,t):(r=n!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||A.current&1?Q===0&&(Q=3):Hi())),t.updateQueue!==null&&(t.flags|=4),Z(t),null);case 4:return Ct(),hi(e,t),Z(t),null;case 10:return Pi(t.type._context),Z(t),null;case 17:return he(t.type)&&Er(),Z(t),null;case 19:if(_(A),s=t.memoizedState,s===null)return Z(t),null;n=(t.flags&128)!==0;var i=s.rendering;if(i===null)if(n)Rt(s,!1);else{if(Q!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=Cr(e),i!==null){for(t.flags|=128,Rt(s,!1),e=i.updateQueue,e!==null&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,r=t.child;r!==null;)n=r,s=e,n.flags&=14680066,i=n.alternate,i===null?(n.childLanes=0,n.lanes=s,n.child=null,n.subtreeFlags=0,n.memoizedProps=null,n.memoizedState=null,n.updateQueue=null,n.dependencies=null,n.stateNode=null):(n.childLanes=i.childLanes,n.lanes=i.lanes,n.child=i.child,n.subtreeFlags=0,n.deletions=null,n.memoizedProps=i.memoizedProps,n.memoizedState=i.memoizedState,n.updateQueue=i.updateQueue,n.type=i.type,s=i.dependencies,n.dependencies=s===null?null:{lanes:s.lanes,firstContext:s.firstContext}),r=r.sibling;return z(A,A.current&1|2),t.child}e=e.sibling}s.tail!==null&&V()>Jt&&(t.flags|=128,n=!0,Rt(s,!1),t.lanes=4194304)}else{if(!n)if(e=Cr(i),e!==null){if(t.flags|=128,n=!0,e=e.updateQueue,e!==null&&(t.updateQueue=e,t.flags|=4),Rt(s,!0),s.tail===null&&s.tailMode==="hidden"&&!i.alternate)return Z(t),null}else 2*V()-s.renderingStartTime>Jt&&r!==1073741824&&(t.flags|=128,n=!0,Rt(s,!1),t.lanes=4194304);s.isBackwards?(i.sibling=t.child,t.child=i):(e=s.last,e!==null?e.sibling=i:t.child=i,s.last=i)}return s.tail!==null?(t=s.tail,s.rendering=t,s.tail=t.sibling,s.renderingStartTime=V(),t.sibling=null,e=A.current,z(A,n?e&1|2:e&1),t):(Z(t),null);case 22:case 23:return $i(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?de&1073741824&&(Z(t),t.subtreeFlags&6&&(t.flags|=8192)):Z(t),null;case 24:return null;case 25:return null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Iu(e,t){switch(Oi(t),t.tag){case 1:return he(t.type)&&Er(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ct(),_(ce),_(te),Fi(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return Xi(t),null;case 13:if(_(A),e=t.memoizedState,e!==null&&e.dehydrated!==null&&t.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return _(A),null;case 4:return Ct(),null;case 10:return Pi(t.type._context),null;case 22:case 23:return $i(),null;case 24:return null;default:return null}}var Cu=typeof WeakSet=="function"?WeakSet:Set,P=null;function jr(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){le(e,t,n)}else r.current=null}function di(e,t,r){try{r()}catch(n){le(e,t,n)}}var ks=!1;function Pu(e,t){for(P=t;P!==null;)if(e=P,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,P=t;else for(;P!==null;){e=P;try{var r=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(r!==null){var n=r.memoizedProps,s=r.memoizedState,i=e.stateNode,l=i.getSnapshotBeforeUpdate(e.elementType===e.type?n:Te(e.type,n),s);i.__reactInternalSnapshotBeforeUpdate=l}break;case 3:e.stateNode.containerInfo.children.splice(0);break;case 5:case 6:case 4:case 17:break;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}catch(o){le(e,e.return,o)}if(t=e.sibling,t!==null){t.return=e.return,P=t;break}P=e.return}return r=ks,ks=!1,r}function Rr(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var s=n=n.next;do{if((s.tag&e)===e){var i=s.destroy;s.destroy=void 0,i!==void 0&&di(t,r,i)}s=s.next}while(s!==n)}}function qi(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function go(e){var t=e.alternate;t!==null&&(e.alternate=null,go(t)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function yo(e){return e.tag===5||e.tag===3||e.tag===4}function js(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||yo(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function fi(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?kl(r,e,t):Pl(r,e);else if(n!==4&&(e=e.child,e!==null))for(fi(e,t,r),e=e.sibling;e!==null;)fi(e,t,r),e=e.sibling}function pi(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?kl(r,e,t):Pl(r,e);else if(n!==4&&(e=e.child,e!==null))for(pi(e,t,r),e=e.sibling;e!==null;)pi(e,t,r),e=e.sibling}var re=null;function rt(e,t,r){for(r=r.child;r!==null;)vo(e,t,r),r=r.sibling}function vo(e,t,r){if(Pe&&typeof Pe.onCommitFiberUnmount=="function")try{Pe.onCommitFiberUnmount(Ur,r)}catch{}switch(r.tag){case 5:jr(r,t);case 6:var n=re;re=null,rt(e,t,r),re=n,re!==null&&(e=re,r=e.children.indexOf(r.stateNode),e.children.splice(r,1));break;case 18:re!==null&&Qe(re,r.stateNode);break;case 4:n=re,re=r.stateNode.containerInfo,rt(e,t,r),re=n;break;case 0:case 11:case 14:case 15:if(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null)){var s=n=n.next;do{var i=s,l=i.destroy;i=i.tag,l!==void 0&&(i&2||i&4)&&di(r,t,l),s=s.next}while(s!==n)}rt(e,t,r);break;case 1:if(jr(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function")try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(o){le(r,t,o)}rt(e,t,r);break;case 21:rt(e,t,r);break;case 22:rt(e,t,r);break;default:rt(e,t,r)}}function Rs(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new Cu),t.forEach(function(n){var s=bu.bind(null,e,n);r.has(n)||(r.add(n),n.then(s,s))})}}function Le(e,t){var r=t.deletions;if(r!==null)for(var n=0;ns&&(s=l),n&=~i}if(n=s,n=V()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*ju(n/1960))-n,10e?16:e,$e===null)var n=!1;else{if(e=$e,$e=null,zr=0,X&6)throw Error("Cannot flush passive effects while already rendering.");var s=X;for(X|=4,P=e.current;P!==null;){var i=P,l=i.child;if(P.flags&16){var o=i.deletions;if(o!==null){for(var u=0;uV()-Qi?ut(e,0):Vi|=r),ve(e,t)}function No(e,t){t===0&&(e.mode&1?(t=tr,tr<<=1,!(tr&130023424)&&(tr=4194304)):t=1);var r=Ee();e=It(e,t),e!==null&&(qr(e,t,r),ve(e,r))}function Au(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),No(e,r)}function bu(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,s=e.memoizedState;s!==null&&(r=s.retryLane);break;case 19:n=e.stateNode;break;default:throw Error("Pinged unknown suspense boundary type. This is probably a bug in React.")}n!==null&&n.delete(t),No(e,r)}var Lo;Lo=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||ce.current)oe=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return oe=!1,Mu(e,t,r);oe=!!(e.flags&131072)}else oe=!1;switch(t.lanes=0,t.tag){case 2:var n=t.type;fr(e,t),e=t.pendingProps;var s=Mt(t,te.current);if(Dt(t,r),s=Bi(null,t,n,e,s,r),t.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,he(n)){var i=!0;Nr(t)}else i=!1;t.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,ji(t),s.updater=Qr,t.stateNode=s,s._reactInternals=t,si(t,n,e,r),t=ui(null,t,n,!0,i,r)}else t.tag=0,ie(null,t,s,r),t=t.child;return t;case 16:n=t.elementType;e:{switch(fr(e,t),e=t.pendingProps,s=n._init,n=s(n._payload),t.type=n,s=t.tag=qu(n),e=Te(n,e),s){case 0:t=oi(null,t,n,e,r);break e;case 1:t=Cs(null,t,n,e,r);break e;case 11:t=Os(null,t,n,e,r);break e;case 14:t=Is(null,t,n,Te(n.type,e),r);break e}throw Error("Element type is invalid. Received a promise that resolves to: "+n+". Lazy element type must resolve to a class or function.")}return t;case 0:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:Te(n,s),oi(e,t,n,s,r);case 1:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:Te(n,s),Cs(e,t,n,s,r);case 3:if(ao(t),e===null)throw Error("Should have a current fiber. This is a bug in React.");return s=t.pendingProps,n=t.memoizedState.element,Fl(e,t),Ir(t,s,null,r),s=t.memoizedState.element,s===n?t=ze(e,t,r):(ie(e,t,s,r),t=t.child),t;case 5:return zl(t),n=t.pendingProps.children,uo(e,t),ie(e,t,n,r),t.child;case 6:return null;case 13:return co(e,t,r);case 4:return Ri(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Ot(t,null,n,r):ie(e,t,n,r),t.child;case 11:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:Te(n,s),Os(e,t,n,s,r);case 7:return ie(e,t,t.pendingProps,r),t.child;case 8:return ie(e,t,t.pendingProps.children,r),t.child;case 12:return ie(e,t,t.pendingProps.children,r),t.child;case 10:e:{n=t.type._context,s=t.pendingProps,i=t.memoizedProps;var l=s.value;if(z(Mr,n._currentValue2),n._currentValue2=l,i!==null)if(Ne(i.value,l)){if(i.children===s.children&&!ce.current){t=ze(e,t,r);break e}}else for(i=t.child,i!==null&&(i.return=t);i!==null;){var o=i.dependencies;if(o!==null){l=i.child;for(var u=o.firstContext;u!==null;){if(u.context===n){if(i.tag===1){u=He(-1,r&-r),u.tag=2;var d=i.updateQueue;if(d!==null){d=d.shared;var c=d.pending;c===null?u.next=u:(u.next=c.next,c.next=u),d.pending=u}}i.lanes|=r,u=i.alternate,u!==null&&(u.lanes|=r),ni(i.return,r,t),o.lanes|=r;break}u=u.next}}else if(i.tag===10)l=i.type===t.type?null:i.child;else if(i.tag===18){if(l=i.return,l===null)throw Error("We just came from a parent so we must have had a parent. This is a bug in React.");l.lanes|=r,o=l.alternate,o!==null&&(o.lanes|=r),ni(l,r,t),l=i.sibling}else l=i.child;if(l!==null)l.return=i;else for(l=i;l!==null;){if(l===t){l=null;break}if(i=l.sibling,i!==null){i.return=l.return,l=i;break}l=l.return}i=l}ie(e,t,s.children,r),t=t.child}return t;case 9:return s=t.type,n=t.pendingProps.children,Dt(t,r),s=we(s),n=n(s),t.flags|=1,ie(e,t,n,r),t.child;case 14:return n=t.type,s=Te(n,t.pendingProps),s=Te(n.type,s),Is(e,t,n,s,r);case 15:return lo(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,s=t.pendingProps,s=t.elementType===n?s:Te(n,s),fr(e,t),t.tag=1,he(n)?(e=!0,Nr(t)):e=!1,Dt(t,r),no(t,n,s),si(t,n,s,r),ui(null,t,n,!0,e,r);case 19:return ho(e,t,r);case 22:return oo(e,t,r)}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")};function Mo(e,t){return Mi(e,t)}function Uu(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ce(e,t,r,n){return new Uu(e,t,r,n)}function Ji(e){return e=e.prototype,!(!e||!e.isReactComponent)}function qu(e){if(typeof e=="function")return Ji(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Ni)return 11;if(e===Li)return 14}return 2}function Ye(e,t){var r=e.alternate;return r===null?(r=Ce(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function gr(e,t,r,n,s,i){var l=2;if(n=e,typeof e=="function")Ji(e)&&(l=1);else if(typeof e=="string")l=5;else e:switch(e){case vt:return at(r.children,s,i,t);case Ei:l=8,s|=8;break;case Jn:return e=Ce(12,r,t,s|2),e.elementType=Jn,e.lanes=i,e;case Kn:return e=Ce(13,r,t,s),e.elementType=Kn,e.lanes=i,e;case Yn:return e=Ce(19,r,t,s),e.elementType=Yn,e.lanes=i,e;case Nl:return Hr(r,s,i,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Dl:l=10;break e;case El:l=9;break e;case Ni:l=11;break e;case Li:l=14;break e;case Ue:l=16,n=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+((e==null?e:typeof e)+"."))}return t=Ce(l,r,t,s),t.elementType=e,t.type=n,t.lanes=i,t}function at(e,t,r,n){return e=Ce(7,e,n,t),e.lanes=r,e}function Hr(e,t,r,n){return e=Ce(22,e,n,t),e.elementType=Nl,e.lanes=r,e.stateNode={isHidden:!1},e}function cn(e,t,r){return e=Ce(6,e,null,t),e.lanes=r,e}function hn(e,t,r){return t=Ce(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Wu(e,t,r,n,s){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Yr(0),this.expirationTimes=Yr(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Yr(0),this.identifierPrefix=n,this.onRecoverableError=s}function Vu(e,t,r,n,s,i,l){return e=new Wu(e,t,!1,i,l),t===1?(t=1,n===!0&&(t|=8)):t=0,n=Ce(3,null,null,t),e.current=n,n.stateNode=e,n.memoizedState={element:null,isDehydrated:!1,cache:null,transitions:null,pendingSuspenseBoundaries:null},ji(n),e}function dn(e,t,r,n){var s=t.current,i=Ee(),l=Et(s);e:if(r){r=r._reactInternals;t:{if(br(r)!==r||r.tag!==1)throw Error("Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.");var o=r;do{switch(o.tag){case 3:o=o.stateNode.context;break t;case 1:if(he(o.type)){o=o.stateNode.__reactInternalMemoizedMergedChildContext;break t}}o=o.return}while(o!==null);throw Error("Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.")}if(r.tag===1){var u=r.type;if(he(u)){r=jl(r,u,o);break e}}r=o}else r=Ge;return t.context===null?t.context=r:t.pendingContext=r,t=He(i,l),t.payload={element:e},n=n===void 0?null:n,n!==null&&(t.callback=n),e=ot(s,t,l),e!==null&&(Ke(e,s,l,i),cr(e,s,l)),l}function Qu(){return null}var $u=Sl.unstable_act,Hu={createNodeMock:function(){return null}};function yr(e){if(e.isHidden)return null;switch(e.tag){case"TEXT":return e.text;case"INSTANCE":var t=e.props,r=["children"];if(t==null)t={};else{var n={},s=Object.keys(t),i;for(i=0;ixi(r).length)break;return Ki(r)}r=r.return}return null}},{key:"children",get:function(){return xi(this._currentFiber())}}]),e}();function vr(e,t,r){var n=r?r.deep:!0,s=[];return t(e)&&(s.push(e),!n)||e.children.forEach(function(i){typeof i!="string"&&s.push.apply(s,vr(i,t,r))}),s}function fn(e,t){if(e.length===1)return e[0];throw Error((e.length===0?"No instances found ":"Expected 1 but found "+e.length+" instances ")+t)}function Ku(e){console.error(e)}var pn=new WeakMap;function Ki(e){var t=pn.get(e);return t===void 0&&e.alternate!==null&&(t=pn.get(e.alternate)),t===void 0&&(t=new Ju(e),pn.set(e,t)),t}var Ft={findFiberByHostInstance:function(){throw Error("TestRenderer does not support findFiberByHostInstance()")},bundleType:0,version:"18.3.1",rendererPackageName:"react-test-renderer"},Yu={bundleType:Ft.bundleType,version:Ft.version,rendererPackageName:Ft.rendererPackageName,rendererConfig:Ft.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:et.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=Ll(e),e=e!==null?Ml(e):null,e===null?null:e.stateNode},findFiberByHostInstance:Ft.findFiberByHostInstance||Qu,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var ur=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ur.isDisabled&&ur.supportsFiber)try{Ur=ur.inject(Yu),Pe=ur}catch{}}Kt._Scheduler=Tl;Kt.act=$u;Kt.create=function(e,t){var r=Hu.createNodeMock,n=!1,s=!1;typeof t=="object"&&t!==null&&(typeof t.createNodeMock=="function"&&(r=t.createNodeMock),t.unstable_isConcurrent===!0&&(n=!0),t.unstable_strictMode===!0&&(s=!0));var i={children:[],createNodeMock:r,tag:"CONTAINER"},l=Vu(i,n?1:0,null,s,null,"",Ku);if(l==null)throw Error("something went wrong");return dn(e,l,null,null),e={_Scheduler:Tl,root:void 0,toJSON:function(){if(l==null||l.current==null||i==null||i.children.length===0)return null;if(i.children.length===1)return yr(i.children[0]);if(i.children.length===2&&i.children[0].isHidden===!0&&i.children[1].isHidden===!1)return yr(i.children[1]);var o=null;if(i.children&&i.children.length)for(var u=0;u":"attribute: {"+n+"}, parent: <"+this.parent.name+">"}isEqualNode(n){return!(n.namespaceURI!==this.namespaceURI||n.prefix!==this.prefix||n.localName!==this.localName||n.value!==this.value)}}return Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"ownerElement",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"textContent",{get:function(){return this.value},set:function(r){return this.value=r||""}}),Object.defineProperty(t.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(t.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(t.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"specified",{get:function(){return!0}}),t}.call(this)}.call(R)),Dn.exports}var En={exports:{}},Ws;function Yi(){return Ws||(Ws=1,function(){En.exports=function(){class e{constructor(r){this.nodes=r}clone(){return this.nodes=null}getNamedItem(r){return this.nodes[r]}setNamedItem(r){var n;return n=this.nodes[r.nodeName],this.nodes[r.nodeName]=r,n||null}removeNamedItem(r){var n;return n=this.nodes[r],delete this.nodes[r],n||null}item(r){return this.nodes[Object.keys(this.nodes)[r]]||null}getNamedItemNS(r,n){throw new Error("This DOM method is not implemented.")}setNamedItemNS(r){throw new Error("This DOM method is not implemented.")}removeNamedItemNS(r,n){throw new Error("This DOM method is not implemented.")}}return Object.defineProperty(e.prototype,"length",{get:function(){return Object.keys(this.nodes).length||0}}),e}.call(this)}.call(R)),En.exports}var Vs;function Zi(){return Vs||(Vs=1,function(){var e,t,r,n,s,i,l,o={}.hasOwnProperty;({isObject:l,isFunction:i,getValue:s}=_e()),n=Se(),e=q(),t=Po(),r=Yi(),Sn.exports=function(){class u extends n{constructor(c,g,v){var E,L,I,j;if(super(c),g==null)throw new Error("Missing element name. "+this.debugInfo());if(this.name=this.stringify.name(g),this.type=e.Element,this.attribs={},this.schemaTypeInfo=null,v!=null&&this.attribute(v),c.type===e.Document&&(this.isRoot=!0,this.documentObject=c,c.rootObject=this,c.children)){for(j=c.children,L=0,I=j.length;L=E;g=0<=E?++v:--v)if(!this.attribs[g].isEqualNode(c.attribs[g]))return!1;return!0}}return Object.defineProperty(u.prototype,"tagName",{get:function(){return this.name}}),Object.defineProperty(u.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(u.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(u.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(u.prototype,"id",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(u.prototype,"className",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(u.prototype,"classList",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(u.prototype,"attributes",{get:function(){return(!this.attributeMap||!this.attributeMap.nodes)&&(this.attributeMap=new r(this.attribs)),this.attributeMap}}),u}.call(this)}.call(R)),Sn.exports}var Nn={exports:{}},Ln={exports:{}},Qs;function Jr(){return Qs||(Qs=1,function(){var e;e=Se(),Ln.exports=function(){class t extends e{constructor(n){super(n),this.value=""}clone(){return Object.create(this)}substringData(n,s){throw new Error("This DOM method is not implemented."+this.debugInfo())}appendData(n){throw new Error("This DOM method is not implemented."+this.debugInfo())}insertData(n,s){throw new Error("This DOM method is not implemented."+this.debugInfo())}deleteData(n,s){throw new Error("This DOM method is not implemented."+this.debugInfo())}replaceData(n,s,i){throw new Error("This DOM method is not implemented."+this.debugInfo())}isEqualNode(n){return!(!super.isEqualNode(n)||n.data!==this.data)}}return Object.defineProperty(t.prototype,"data",{get:function(){return this.value},set:function(r){return this.value=r||""}}),Object.defineProperty(t.prototype,"length",{get:function(){return this.value.length}}),Object.defineProperty(t.prototype,"textContent",{get:function(){return this.value},set:function(r){return this.value=r||""}}),t}.call(this)}.call(R)),Ln.exports}var $s;function Gi(){return $s||($s=1,function(){var e,t;e=q(),t=Jr(),Nn.exports=class extends t{constructor(n,s){if(super(n),s==null)throw new Error("Missing CDATA text. "+this.debugInfo());this.name="#cdata-section",this.type=e.CData,this.value=this.stringify.cdata(s)}clone(){return Object.create(this)}toString(n){return this.options.writer.cdata(this,this.options.writer.filterOptions(n))}}}.call(R)),Nn.exports}var Mn={exports:{}},Hs;function es(){return Hs||(Hs=1,function(){var e,t;e=q(),t=Jr(),Mn.exports=class extends t{constructor(n,s){if(super(n),s==null)throw new Error("Missing comment text. "+this.debugInfo());this.name="#comment",this.type=e.Comment,this.value=this.stringify.comment(s)}clone(){return Object.create(this)}toString(n){return this.options.writer.comment(this,this.options.writer.filterOptions(n))}}}.call(R)),Mn.exports}var On={exports:{}},Js;function ts(){return Js||(Js=1,function(){var e,t,r;({isObject:r}=_e()),t=Se(),e=q(),On.exports=class extends t{constructor(s,i,l,o){super(s),r(i)&&({version:i,encoding:l,standalone:o}=i),i||(i="1.0"),this.type=e.Declaration,this.version=this.stringify.xmlVersion(i),l!=null&&(this.encoding=this.stringify.xmlEncoding(l)),o!=null&&(this.standalone=this.stringify.xmlStandalone(o))}toString(s){return this.options.writer.declaration(this,this.options.writer.filterOptions(s))}}}.call(R)),On.exports}var In={exports:{}},Cn={exports:{}},Ks;function rs(){return Ks||(Ks=1,function(){var e,t;t=Se(),e=q(),Cn.exports=class extends t{constructor(n,s,i,l,o,u){if(super(n),s==null)throw new Error("Missing DTD element name. "+this.debugInfo());if(i==null)throw new Error("Missing DTD attribute name. "+this.debugInfo(s));if(!l)throw new Error("Missing DTD attribute type. "+this.debugInfo(s));if(!o)throw new Error("Missing DTD attribute default. "+this.debugInfo(s));if(o.indexOf("#")!==0&&(o="#"+o),!o.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/))throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. "+this.debugInfo(s));if(u&&!o.match(/^(#FIXED|#DEFAULT)$/))throw new Error("Default value only applies to #FIXED or #DEFAULT. "+this.debugInfo(s));this.elementName=this.stringify.name(s),this.type=e.AttributeDeclaration,this.attributeName=this.stringify.name(i),this.attributeType=this.stringify.dtdAttType(l),u&&(this.defaultValue=this.stringify.dtdAttDefault(u)),this.defaultValueType=o}toString(n){return this.options.writer.dtdAttList(this,this.options.writer.filterOptions(n))}}}.call(R)),Cn.exports}var Pn={exports:{}},Ys;function ns(){return Ys||(Ys=1,function(){var e,t,r;({isObject:r}=_e()),t=Se(),e=q(),Pn.exports=function(){class n extends t{constructor(i,l,o,u){if(super(i),o==null)throw new Error("Missing DTD entity name. "+this.debugInfo(o));if(u==null)throw new Error("Missing DTD entity value. "+this.debugInfo(o));if(this.pe=!!l,this.name=this.stringify.name(o),this.type=e.EntityDeclaration,!r(u))this.value=this.stringify.dtdEntityValue(u),this.internal=!0;else{if(!u.pubID&&!u.sysID)throw new Error("Public and/or system identifiers are required for an external entity. "+this.debugInfo(o));if(u.pubID&&!u.sysID)throw new Error("System identifier is required for a public external entity. "+this.debugInfo(o));if(this.internal=!1,u.pubID!=null&&(this.pubID=this.stringify.dtdPubID(u.pubID)),u.sysID!=null&&(this.sysID=this.stringify.dtdSysID(u.sysID)),u.nData!=null&&(this.nData=this.stringify.dtdNData(u.nData)),this.pe&&this.nData)throw new Error("Notation declaration is not allowed in a parameter entity. "+this.debugInfo(o))}}toString(i){return this.options.writer.dtdEntity(this,this.options.writer.filterOptions(i))}}return Object.defineProperty(n.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(n.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(n.prototype,"notationName",{get:function(){return this.nData||null}}),Object.defineProperty(n.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(n.prototype,"xmlEncoding",{get:function(){return null}}),Object.defineProperty(n.prototype,"xmlVersion",{get:function(){return null}}),n}.call(this)}.call(R)),Pn.exports}var kn={exports:{}},Zs;function is(){return Zs||(Zs=1,function(){var e,t;t=Se(),e=q(),kn.exports=class extends t{constructor(n,s,i){if(super(n),s==null)throw new Error("Missing DTD element name. "+this.debugInfo());i||(i="(#PCDATA)"),Array.isArray(i)&&(i="("+i.join(",")+")"),this.name=this.stringify.name(s),this.type=e.ElementDeclaration,this.value=this.stringify.dtdElementValue(i)}toString(n){return this.options.writer.dtdElement(this,this.options.writer.filterOptions(n))}}}.call(R)),kn.exports}var jn={exports:{}},Gs;function ss(){return Gs||(Gs=1,function(){var e,t;t=Se(),e=q(),jn.exports=function(){class r extends t{constructor(s,i,l){if(super(s),i==null)throw new Error("Missing DTD notation name. "+this.debugInfo(i));if(!l.pubID&&!l.sysID)throw new Error("Public or system identifiers are required for an external entity. "+this.debugInfo(i));this.name=this.stringify.name(i),this.type=e.NotationDeclaration,l.pubID!=null&&(this.pubID=this.stringify.dtdPubID(l.pubID)),l.sysID!=null&&(this.sysID=this.stringify.dtdSysID(l.sysID))}toString(s){return this.options.writer.dtdNotation(this,this.options.writer.filterOptions(s))}}return Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),r}.call(this)}.call(R)),jn.exports}var el;function ls(){return el||(el=1,function(){var e,t,r,n,s,i,l,o;({isObject:o}=_e()),l=Se(),e=q(),t=rs(),n=ns(),r=is(),s=ss(),i=Yi(),In.exports=function(){class u extends l{constructor(c,g,v){var E,L,I,j;if(super(c),this.type=e.DocType,c.children){for(j=c.children,L=0,I=j.length;L":(m=this.parent)!=null&&m.name?"node: <"+a+">, parent: <"+this.parent.name+">":"node: <"+a+">"}ele(a,p,m){return this.element(a,p,m)}nod(a,p,m){return this.node(a,p,m)}txt(a){return this.text(a)}dat(a){return this.cdata(a)}com(a){return this.comment(a)}ins(a,p){return this.instruction(a,p)}doc(){return this.document()}dec(a,p,m){return this.declaration(a,p,m)}e(a,p,m){return this.element(a,p,m)}n(a,p,m){return this.node(a,p,m)}t(a){return this.text(a)}d(a){return this.cdata(a)}c(a){return this.comment(a)}r(a){return this.raw(a)}i(a,p){return this.instruction(a,p)}u(){return this.up()}importXMLBuilder(a){return this.importDocument(a)}attribute(a,p){throw new Error("attribute() applies to element nodes only.")}att(a,p){return this.attribute(a,p)}a(a,p){return this.attribute(a,p)}removeAttribute(a){throw new Error("attribute() applies to element nodes only.")}replaceChild(a,p){throw new Error("This DOM method is not implemented."+this.debugInfo())}removeChild(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}appendChild(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}hasChildNodes(){return this.children.length!==0}cloneNode(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}normalize(){throw new Error("This DOM method is not implemented."+this.debugInfo())}isSupported(a,p){return!0}hasAttributes(){return this.attribs.length!==0}compareDocumentPosition(a){var p,m;return p=this,p===a?0:this.document()!==a.document()?(m=e.Disconnected|e.ImplementationSpecific,Math.random()<.5?m|=e.Preceding:m|=e.Following,m):p.isAncestor(a)?e.Contains|e.Preceding:p.isDescendant(a)?e.Contains|e.Following:p.isPreceding(a)?e.Preceding:e.Following}isSameNode(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}lookupPrefix(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}isDefaultNamespace(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}lookupNamespaceURI(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}isEqualNode(a){var p,m,S;if(a.nodeType!==this.nodeType||a.children.length!==this.children.length)return!1;for(p=m=0,S=this.children.length-1;0<=S?m<=S:m>=S;p=0<=S?++m:--m)if(!this.children[p].isEqualNode(a.children[p]))return!1;return!0}getFeature(a,p){throw new Error("This DOM method is not implemented."+this.debugInfo())}setUserData(a,p,m){throw new Error("This DOM method is not implemented."+this.debugInfo())}getUserData(a){throw new Error("This DOM method is not implemented."+this.debugInfo())}contains(a){return a?a===this||this.isDescendant(a):!1}isDescendant(a){var p,m,S,h,y;for(y=this.children,S=0,h=y.length;Sm}treePosition(a){var p,m;return m=0,p=!1,this.foreachTreeNode(this.document(),function(S){if(m++,!p&&S===a)return p=!0}),p?m:-1}foreachTreeNode(a,p){var m,S,h,y,T;for(a||(a=this.document()),y=a.children,S=0,h=y.length;S","]]]]>"),this.assertLegalChar(n))}comment(n){if(this.options.noValidation)return n;if(n=""+n||"",n.match(/--/))throw new Error("Comment text cannot contain double-hypen: "+n);return this.assertLegalChar(n)}raw(n){return this.options.noValidation?n:""+n||""}attValue(n){return this.options.noValidation?n:this.assertLegalChar(this.attEscape(n=""+n||""))}insTarget(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}insValue(n){if(this.options.noValidation)return n;if(n=""+n||"",n.match(/\?>/))throw new Error("Invalid processing instruction value: "+n);return this.assertLegalChar(n)}xmlVersion(n){if(this.options.noValidation)return n;if(n=""+n||"",!n.match(/1\.[0-9]+/))throw new Error("Invalid version number: "+n);return n}xmlEncoding(n){if(this.options.noValidation)return n;if(n=""+n||"",!n.match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/))throw new Error("Invalid encoding: "+n);return this.assertLegalChar(n)}xmlStandalone(n){return this.options.noValidation?n:n?"yes":"no"}dtdPubID(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdSysID(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdElementValue(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdAttType(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdAttDefault(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdEntityValue(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}dtdNData(n){return this.options.noValidation?n:this.assertLegalChar(""+n||"")}assertLegalChar(n){var s,i;if(this.options.noValidation)return n;if(this.options.version==="1.0"){if(s=/[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,this.options.invalidCharReplacement!==void 0)n=n.replace(s,this.options.invalidCharReplacement);else if(i=n.match(s))throw new Error(`Invalid character in string: ${n} at index ${i.index}`)}else if(this.options.version==="1.1"){if(s=/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/g,this.options.invalidCharReplacement!==void 0)n=n.replace(s,this.options.invalidCharReplacement);else if(i=n.match(s))throw new Error(`Invalid character in string: ${n} at index ${i.index}`)}return n}assertLegalName(n){var s;if(this.options.noValidation)return n;if(n=this.assertLegalChar(n),s=/^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/,!n.match(s))throw new Error(`Invalid character in name: ${n}`);return n}textEscape(n){var s;return this.options.noValidation?n:(s=this.options.noDoubleEncoding?/(?!&(lt|gt|amp|apos|quot);)&/g:/&/g,n.replace(s,"&").replace(//g,">").replace(/\r/g," "))}attEscape(n){var s;return this.options.noValidation?n:(s=this.options.noDoubleEncoding?/(?!&(lt|gt|amp|apos|quot);)&/g:/&/g,n.replace(s,"&").replace(/0)?new Array(u).join(l.indent):""}endline(i,l,o){return!l.pretty||l.suppressPrettyCount?"":l.newline}attribute(i,l,o){var u;return this.openAttribute(i,l,o),l.pretty&&l.width>0?u=i.name+'="'+i.value+'"':u=" "+i.name+'="'+i.value+'"',this.closeAttribute(i,l,o),u}cdata(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}comment(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}declaration(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+"",u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}docType(i,l,o){var u,d,c,g,v;if(o||(o=0),this.openNode(i,l,o),l.state=t.OpenTag,g=this.indent(i,l,o),g+="0){for(g+=" [",g+=this.endline(i,l,o),l.state=t.InsideTag,v=i.children,d=0,c=v.length;d",g+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),g}element(i,l,o){var u,d,c,g,v,E,L,I,j,x,f,w,a,p,m,S,h,y,T;if(o||(o=0),w=!1,this.openNode(i,l,o),l.state=t.OpenTag,a=this.indent(i,l,o)+"<"+i.name,l.pretty&&l.width>0){I=a.length,m=i.attribs;for(f in m)n.call(m,f)&&(u=m[f],p=this.attribute(u,l,o),d=p.length,I+d>l.width?(T=this.indent(i,l,o+1)+p,a+=this.endline(i,l,o)+T,I=T.length):(T=" "+p,a+=T,I+=T.length))}else{S=i.attribs;for(f in S)n.call(S,f)&&(u=S[f],a+=this.attribute(u,l,o))}if(g=i.children.length,v=g===0?null:i.children[0],g===0||i.children.every(function(M){return(M.type===e.Text||M.type===e.Raw||M.type===e.CData)&&M.value===""}))l.allowEmpty?(a+=">",l.state=t.CloseTag,a+=""+this.endline(i,l,o)):(l.state=t.CloseTag,a+=l.spaceBeforeSlash+"/>"+this.endline(i,l,o));else if(l.pretty&&g===1&&(v.type===e.Text||v.type===e.Raw||v.type===e.CData)&&v.value!=null)a+=">",l.state=t.InsideTag,l.suppressPrettyCount++,w=!0,a+=this.writeChildNode(v,l,o+1),l.suppressPrettyCount--,w=!1,l.state=t.CloseTag,a+=""+this.endline(i,l,o);else{if(l.dontPrettyTextNodes){for(h=i.children,E=0,j=h.length;E"+this.endline(i,l,o),l.state=t.InsideTag,y=i.children,L=0,x=y.length;L",w&&l.suppressPrettyCount--,a+=this.endline(i,l,o),l.state=t.None}return this.closeNode(i,l,o),a}writeChildNode(i,l,o){switch(i.type){case e.CData:return this.cdata(i,l,o);case e.Comment:return this.comment(i,l,o);case e.Element:return this.element(i,l,o);case e.Raw:return this.raw(i,l,o);case e.Text:return this.text(i,l,o);case e.ProcessingInstruction:return this.processingInstruction(i,l,o);case e.Dummy:return"";case e.Declaration:return this.declaration(i,l,o);case e.DocType:return this.docType(i,l,o);case e.AttributeDeclaration:return this.dtdAttList(i,l,o);case e.ElementDeclaration:return this.dtdElement(i,l,o);case e.EntityDeclaration:return this.dtdEntity(i,l,o);case e.NotationDeclaration:return this.dtdNotation(i,l,o);default:throw new Error("Unknown XML node type: "+i.constructor.name)}}processingInstruction(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+"",u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}raw(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o),l.state=t.InsideTag,u+=i.value,l.state=t.CloseTag,u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}text(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o),l.state=t.InsideTag,u+=i.value,l.state=t.CloseTag,u+=this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdAttList(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdElement(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdEntity(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}dtdNotation(i,l,o){var u;return this.openNode(i,l,o),l.state=t.OpenTag,u=this.indent(i,l,o)+""+this.endline(i,l,o),l.state=t.None,this.closeNode(i,l,o),u}openNode(i,l,o){}closeNode(i,l,o){}openAttribute(i,l,o){}closeAttribute(i,l,o){}}}.call(R)),Un.exports}var hl;function cs(){return hl||(hl=1,function(){var e;e=Ro(),bn.exports=class extends e{constructor(r){super(r)}document(r,n){var s,i,l,o,u;for(n=this.filterOptions(n),o="",u=r.children,i=0,l=u.length;i=0;)this.up();return this.onEnd()}openCurrent(){if(this.currentNode)return this.currentNode.children=!0,this.openNode(this.currentNode)}openNode(h){var y,T,M,C;if(!h.isOpen){if(!this.root&&this.currentLevel===0&&h.type===e.Element&&(this.root=h),T="",h.type===e.Element){this.writerOptions.state=t.OpenTag,T=this.writer.indent(h,this.writerOptions,this.currentLevel)+"<"+h.name,C=h.attribs;for(M in C)m.call(C,M)&&(y=C[M],T+=this.writer.attribute(y,this.writerOptions,this.currentLevel));T+=(h.children?">":"/>")+this.writer.endline(h,this.writerOptions,this.currentLevel),this.writerOptions.state=t.InsideTag}else this.writerOptions.state=t.OpenTag,T=this.writer.indent(h,this.writerOptions,this.currentLevel)+""),T+=this.writer.endline(h,this.writerOptions,this.currentLevel);return this.onData(T,this.currentLevel),h.isOpen=!0}}closeNode(h){var y;if(!h.isClosed)return y="",this.writerOptions.state=t.CloseTag,h.type===e.Element?y=this.writer.indent(h,this.writerOptions,this.currentLevel)+""+this.writer.endline(h,this.writerOptions,this.currentLevel):y=this.writer.indent(h,this.writerOptions,this.currentLevel)+"]>"+this.writer.endline(h,this.writerOptions,this.currentLevel),this.writerOptions.state=t.None,this.onData(y,this.currentLevel),h.isClosed=!0}onData(h,y){return this.documentStarted=!0,this.onDataCallback(h,y+1)}onEnd(){return this.documentCompleted=!0,this.onEndCallback()}debugInfo(h){return h==null?"":"node: <"+h+">"}ele(){return this.element(...arguments)}nod(h,y,T){return this.node(h,y,T)}txt(h){return this.text(h)}dat(h){return this.cdata(h)}com(h){return this.comment(h)}ins(h,y){return this.instruction(h,y)}dec(h,y,T){return this.declaration(h,y,T)}dtd(h,y,T){return this.doctype(h,y,T)}e(h,y,T){return this.element(h,y,T)}n(h,y,T){return this.node(h,y,T)}t(h){return this.text(h)}d(h){return this.cdata(h)}c(h){return this.comment(h)}r(h){return this.raw(h)}i(h,y){return this.instruction(h,y)}att(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList(...arguments):this.attribute(...arguments)}a(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList(...arguments):this.attribute(...arguments)}ent(h,y){return this.entity(h,y)}pent(h,y){return this.pEntity(h,y)}not(h,y){return this.notation(h,y)}}}.call(R)),Wn.exports}var Vn={exports:{}},pl;function la(){return pl||(pl=1,function(){var e,t,r,n={}.hasOwnProperty;e=q(),r=Ro(),t=Kr(),Vn.exports=class extends r{constructor(i,l){super(l),this.stream=i}endline(i,l,o){return i.isLastRootNode&&l.state===t.CloseTag?"":super.endline(i,l,o)}document(i,l){var o,u,d,c,g,v,E,L,I;for(E=i.children,u=d=0,g=E.length;d0){for(this.stream.write(" ["),this.stream.write(this.endline(i,l,o)),l.state=t.InsideTag,g=i.children,d=0,c=g.length;d"),this.stream.write(this.endline(i,l,o)),l.state=t.None,this.closeNode(i,l,o)}element(i,l,o){var u,d,c,g,v,E,L,I,j,x,f,w,a,p,m;if(o||(o=0),this.openNode(i,l,o),l.state=t.OpenTag,x=this.indent(i,l,o)+"<"+i.name,l.pretty&&l.width>0){L=x.length,w=i.attribs;for(j in w)n.call(w,j)&&(u=w[j],f=this.attribute(u,l,o),d=f.length,L+d>l.width?(m=this.indent(i,l,o+1)+f,x+=this.endline(i,l,o)+m,L=m.length):(m=" "+f,x+=m,L+=m.length))}else{a=i.attribs;for(j in a)n.call(a,j)&&(u=a[j],x+=this.attribute(u,l,o))}if(this.stream.write(x),g=i.children.length,v=g===0?null:i.children[0],g===0||i.children.every(function(S){return(S.type===e.Text||S.type===e.Raw||S.type===e.CData)&&S.value===""}))l.allowEmpty?(this.stream.write(">"),l.state=t.CloseTag,this.stream.write("")):(l.state=t.CloseTag,this.stream.write(l.spaceBeforeSlash+"/>"));else if(l.pretty&&g===1&&(v.type===e.Text||v.type===e.Raw||v.type===e.CData)&&v.value!=null)this.stream.write(">"),l.state=t.InsideTag,l.suppressPrettyCount++,this.writeChildNode(v,l,o+1),l.suppressPrettyCount--,l.state=t.CloseTag,this.stream.write("");else{for(this.stream.write(">"+this.endline(i,l,o)),l.state=t.InsideTag,p=i.children,E=0,I=p.length;E")}return this.stream.write(this.endline(i,l,o)),l.state=t.None,this.closeNode(i,l,o)}processingInstruction(i,l,o){return this.stream.write(super.processingInstruction(i,l,o))}raw(i,l,o){return this.stream.write(super.raw(i,l,o))}text(i,l,o){return this.stream.write(super.text(i,l,o))}dtdAttList(i,l,o){return this.stream.write(super.dtdAttList(i,l,o))}dtdElement(i,l,o){return this.stream.write(super.dtdElement(i,l,o))}dtdEntity(i,l,o){return this.stream.write(super.dtdEntity(i,l,o))}dtdNotation(i,l,o){return this.stream.write(super.dtdNotation(i,l,o))}}}.call(R)),Vn.exports}(function(){var e,t,r,n,s,i,l,o,u;({assign:o,isFunction:u}=_e()),r=Co(),n=Xo(),s=sa(),l=cs(),i=la(),e=q(),t=Kr(),Ae.create=function(d,c,g,v){var E,L;if(d==null)throw new Error("Root element needs a name.");return v=o({},c,g,v),E=new n(v),L=E.element(d),v.headless||(E.declaration(v),(v.pubID!=null||v.sysID!=null)&&E.dtd(v)),L},Ae.begin=function(d,c,g){return u(d)&&([c,g]=[d,c],d={}),c?new s(d,c,g):new n(d)},Ae.stringWriter=function(d){return new l(d)},Ae.streamWriter=function(d,c){return new i(d,c)},Ae.implementation=new r,Ae.nodeType=e,Ae.writerState=t}).call(R);const Fo=(e,t,r=!1)=>{const{type:n,props:s,children:i}=t,l=i||[],o=l[0];if(l.length===1&&typeof o=="string"){e.ele(n,s,o);return}let u=null;r?Object.keys(s).map(d=>{e.att(d,s[d])}):u=e.ele(n,s),l.forEach(d=>{if(typeof d=="string")throw new Error("Invaild XML");Fo(u||e,d)})},oa=e=>{const t=Gu.create(e).toJSON();if(!t)throw new Error("Element is invalid");const r=Ae.create(t.type);return Fo(r,t,!0),r.end({pretty:!0}),r.toString({pretty:!0})};function ua(e){return{alter:e.alter,step:"CDEFGAB"[(e.note+98)%7],octave:Math.floor(e.note/7)+4}}function aa(e){const t=[O.f,O.p,O.m,O.r,O.s,O.z],r=["p","pp","ppp","pppp","ppppp","pppppp","f","ff","fff","ffff","fffff","ffffff","m","mp","mf","sf","sfp","sfpp","fp","rf","rfz","sfz","sffz","fz","n","pf","sfzp","other-dynamics"],n=e.filter(i=>t.includes(i.type)),s=n.sort((i,l)=>i.x-l.x).map(i=>i.type).join("");if(n&&n.length>0){if(r.includes(s))return{type:s,direction:{"^":"above",_:"below"}[n[0].direction]};console.error("无法识别的力度记号",s)}}function ca(e){return{10:"1024th",9:"512th",8:"256th",7:"128th",6:"64th",5:"32nd",4:"16th",3:"eighth",2:"quarter",1:"half",0:"whole"}[e]}class _a{title;pageSize;unitSize;staffLayout;paperOptions;headers;voiceStaves;score;workTitle="";partBuilders=[];constructor(t){Object.assign(this,t);const r=this.voiceStaves;for(const[n,s]of this.partTemplate.entries()){const i=this.ensurePartBuilder(n,s);for(const l of s.map(o=>r[o]))for(const[o,u]of l.voices.entries())for(const[d,c]of u.measures.entries())i.ensureMeasureBuilder(d).addVoice({...c,voiceIndexOfStaff:o})}}get partTemplate(){return this.staffLayout.partGroups.map(t=>t.range[0]===t.range[1]?[t.range[0]]:t.range)}ensurePartBuilder(t,r){for(;this.partBuilders.length<=t;){const n=new ha({parent:this,template:r});this.partBuilders.push(n)}return this.partBuilders[t]}createPartListElement(){return D.jsx("part-list",{children:this.partBuilders.map(t=>D.jsx("score-part",{id:t.id,children:D.jsx("part-name",{"print-object":"no",children:t.name})}))})}toJSX(){const t=new Date;return`${t.getFullYear()}${String(t.getMonth()+1).padStart(2,"0")}${String(t.getDate()).padStart(2,"0")}`,D.jsxs("score-partwise",{version:"4.0",children:[D.jsx("work",{children:D.jsx("work-title",{children:this.workTitle})}),D.jsx("movement-title",{children:this.workTitle}),D.jsx("defaults",{children:D.jsxs("scaling",{children:[D.jsx("millimeters",{children:"8"}),D.jsx("tenths",{children:Ho})]})}),D.jsx("part-list",{children:this.partBuilders.map(r=>D.jsx("score-part",{id:r.id,children:D.jsx("part-name",{"print-object":"no",children:"MusicXML Part"})}))}),this.partBuilders.map(r=>r.toJSX())]})}toString(){return` -${ua(this.toJSX())} -`}}class aa{parent;name;measureBuilders=[];staffContexts=[];template;get id(){return`P${this.parent.partBuilders.indexOf(this)+1}`}get stavesCount(){return this.template.length}constructor(t){Object.assign(this,t)}ensureStaffContext(t){for(;this.staffContexts.length<=t;){const r=new da({parent:this,index:t});this.staffContexts.push(r)}return this.staffContexts[t]}ensureMeasureBuilder(t){for(;this.measureBuilders.length<=t;){const r=new ca({parent:this});this.measureBuilders.push(r)}return this.measureBuilders[t]}toJSX(){return E.jsx("part",{id:this.id,children:this.measureBuilders.map((t,r)=>t.toJSX())})}}class ca{parent;voiceBuilders=[];beamCount=0;beamState;get index(){return this.parent.measureBuilders.indexOf(this)}get score(){return this.parent.parent.score}constructor(t){Object.assign(this,t)}addVoice(t){const r=new ha({parent:this,voice:t});this.voiceBuilders.push(r),t.contextedTerms.filter(i=>i.type===Vo.Clef).forEach(i=>{const l={[I.ClefC]:"C",[I.ClefF]:"F",[I.ClefG]:"G"}[i.tokenType];l||console.error("unknown Clef",i.tokenType);const o=this.parent.ensureStaffContext(i.staff);o.addClef(new zo({parent:o,measureIndex:this.index,tick:i.tick,number:i.staff-this.parent.template[0],sign:l,line:3-i.y})),o.addKey(new Bo({parent:o,measureIndex:this.index,fifths:t.keySignature})),o.addTime(new _o({parent:o,measureIndex:this.index,beats:t.timeSignature.numerator,beatType:t.timeSignature.denominator,timeSigNumeric:t.timeSigNumeric}))});const n={[I.OctaveShift8va]:8,[I.OctaveShift8vb]:-8,[I.OctaveShift0]:0},s=Object.keys(n);t.contextedTerms.forEach(i=>{s.includes(i.tokenType)&&this.parent.ensureStaffContext(i.staff).addOctaveShiftTerm(i,this.index)})}toJSX(){const t=this.score.pages.reduce((r,n)=>[...r,...n.systems.reduce((s,i)=>[...s,...i.measureBars],[])],[]);return this.beamCount=0,E.jsxs("measure",{number:this.index+1,width:Math.round(t[this.index]*10),children:[this.index===0&&E.jsx(E.Fragment,{children:this.parent.staffContexts.map(r=>{var n;return r.clefBuilders.length>0?E.jsx("attributes",{children:(n=r.clefBuilders)==null?void 0:n[0].toJSX()}):null})}),this.voiceBuilders.reduce((r,n,s)=>{var i,l;return r.push(...n.toJSX()),(l=(i=this.voiceBuilders[s+1])==null?void 0:i.toJSX)!=null&&l.call(i)&&r.push(E.jsx("backup",{children:E.jsx("duration",{children:n.voice.duration})})),r},[])]})}}class ha{parent;voice;get index(){return this.parent.voiceBuilders.indexOf(this)}constructor(t){Object.assign(this,t)}toJSX(){const t=[],r={[I.AccNatural]:0,[I.AccSharp]:1,[I.AccDoublesharp]:2,[I.AccFlat]:-1,[I.AccFlatflat]:-1,[I.KeyNatural]:0,[I.KeySharp]:1,[I.KeyFlat]:-1},n=Object.keys(r),s=this.voice.contextedTerms.reduce((l,o)=>{if(n.includes(o.tokenType)){const u=l.findIndex(d=>d.x===o.x&&d.y===o.y);u>-1?l.splice(u,1):l.push(o)}return l},[]),i=Object.entries(this.voice.tickMap).map(([l,o])=>[Number(l),o]).sort(([l],[o])=>l-o);return i.forEach(([l,o])=>{const u=s.filter(d=>d.tick===l);u.length>0&&u.forEach(d=>{var g;const c=(g=o.ys)==null?void 0:g.findIndex(v=>v===d.y);c>-1&&(o.pitches[c].accidental=r[d.tokenType])})}),i.forEach(([l,o],u)=>{var c,g,v,D,L;const d=this.parent.parent.ensureStaffContext(o.staff||0);if(o instanceof Qo){const O=d.lookupDivisions(this.parent.index),k=d.lookupStaves(this.parent.index),x=d.lookupClef(this.parent.index,+l),f=d.lookupKey(this.parent.index),w=d.lookupTime(this.parent.index),a=[O,f,w,k,x].filter(Boolean).map(N=>N.toJSX());u===0&&a.length>0&&t.push(E.jsx("attributes",{children:a}));const p=[],m=[];m.push(...new ma(o.accessories).toJSX()||[]),m.length>0&&p.push(E.jsx("technical",{children:m}));const S=[];o.accessories.some(N=>N.type===I.ScriptStaccato)&&S.push(E.jsx("staccato",{})),o.accessories.some(N=>N.type===I.ScriptSforzato)&&S.push(E.jsx("accent",{})),o.accessories.some(N=>N.type===I.ScriptStaccatissimo)&&S.push(E.jsx("spiccato",{})),o.accessories.some(N=>N.type===I.ScriptMarcato)&&S.push(E.jsx("strong-accent",{})),o.accessories.some(N=>N.type===I.ScriptTenuto)&&S.push(E.jsx("tenuto",{})),S.length>0&&p.push(E.jsx("articulations",{children:S}));const h=o.accessories.find(N=>N.type===I.ScriptFermata);h&&p.push(E.jsx("fermata",{type:{[Ae.Up]:"upright",[Ae.Down]:"inverted"}[h.direction]})),o.accessories.some(N=>N.type===I.SlurBegin)&&o.accessories.filter(N=>N.type===I.SlurBegin).forEach(N=>{p.push(E.jsx("slur",{"default-x":(o.x+N.x).toFixed(2),placement:{[Ae.Up]:"above",[Ae.Down]:"below"}[N.direction],type:"start"}))}),o.accessories.some(N=>N.type===I.SlurEnd)&&o.accessories.filter(N=>N.type===I.SlurEnd).forEach(N=>{p.push(E.jsx("slur",{"default-x":(o.x+N.x).toFixed(2),number:"1",placement:{[Ae.Up]:"above",[Ae.Down]:"below"}[N.direction],type:"stop"}))}),o.accessories.some(N=>N.type===I.TieBegin)&&o.accessories.filter(N=>N.type===I.TieBegin).forEach(N=>{p.push(E.jsx("tied",{type:"start"}))}),o.accessories.some(N=>N.type===I.TieEnd)&&o.accessories.filter(N=>N.type===I.TieEnd).forEach(N=>{p.push(E.jsx("tied",{type:"stop"}))});const y=[];o.accessories.some(N=>N.type===I.ScriptTurn)&&y.push(E.jsx("turn",{})),o.accessories.some(N=>N.type===I.ScriptTrill)&&y.push(E.jsx("trill-mark",{})),o.accessories.some(N=>N.type===I.ScriptMordent)&&y.push(E.jsx("mordent",{})),o.accessories.some(N=>N.type===I.ScriptPortato)&&y.push(E.jsx("inverted-mordent",{})),y.length>0&&p.push(E.jsx("ornaments",{children:y}));const T=Ho(o.division);if(this.index===0){const N=(g=(c=d.lookupOctaveShift(this.parent.index))==null?void 0:c.getJSX)==null?void 0:g.call(c,o.tick);N&&t.push(N)}if(o.pitches){const N=o.pitches.length>1;(v=o.pitches)==null||v.forEach((b,j)=>{const{alter:Ee,step:Hr,octave:Jr}=$o(b),cs={u:"up",d:"down"}[o.stemDirection];if(!this.voice.empty){let Jt=null;switch(o.beam){case"Open":Jt=E.jsx("beam",{number:"1",children:"begin"}),this.parent.beamState=o.beam;break;case"Close":Jt=E.jsx("beam",{number:"1",children:"end"}),this.parent.beamCount+=1,this.parent.beamState=o.beam;break;default:this.parent.beamState==="Open"&&(Jt=E.jsx("beam",{number:"1",children:"continue"}));break}const Ao=o.staff-this.parent.parent.template[0]+1;t.push(E.jsxs("note",{children:[o.grace&&E.jsx("grace",{"steal-time-following":o.duration}),N&&j!==0&&E.jsx("chord",{}),!o.rest&&E.jsxs("pitch",{children:[E.jsx("step",{children:Hr}),Ee!==0&&E.jsx("alter",{children:Ee}),E.jsx("octave",{children:Jr})]}),o.rest==="r"&&E.jsxs("rest",{children:[E.jsx("display-step",{children:Hr}),E.jsx("display-octave",{children:Jr})]}),o.rest==="R"&&E.jsxs("rest",{measure:"yes",children:[E.jsx("display-step",{children:Hr}),E.jsx("display-octave",{children:Jr})]}),o.grace?null:E.jsx("duration",{children:o.duration}),E.jsx("voice",{children:this.index+1}),E.jsx("type",{children:T}),Array(o.dots).fill(null).map(()=>E.jsx("dot",{})),new va(b.accidental).toJSX(),o.timeWarp&&new ga(o.timeWarp).toJSX(),cs?E.jsx("stem",{children:cs}):null,E.jsx("staff",{children:Ao}),Jt,j===0?p.length>0&&E.jsx("notations",{children:p}):null]}))}})}if(this.index===0&&u===i.length-1){const N=d.getCurrentTime(this.parent.index);if(N){const b=(L=(D=d.lookupOctaveShift(this.parent.index))==null?void 0:D.getJSX)==null?void 0:L.call(D,gl*N.beatType/4*N.beats);b&&t.push(b)}}const M=Math.max(...d.clefBuilders.map(N=>N.tick)),C=Math.max(...Object.keys(this.voice.tickMap).map(N=>+N));if(M>=C){const N=d.lookupClef(this.parent.index,M);N&&t.push(E.jsx("attributes",{children:N.toJSX()}))}}}),t}}class da{parent;index;divisionsBuilder=new fa({value:gl});clefBuilders=[];keyBuilders=[];timeBuilders=[];octave;tied;beamCount=0;octaveShiftBuilders=[];constructor(t){Object.assign(this,t)}lookupDivisions(t){return t===0?this.divisionsBuilder:null}lookupStaves(t){return t===0?new pa({value:this.parent.stavesCount}):null}addClef(t){this.lookupClef(t.measureIndex,t.tick)||this.clefBuilders.length>0&&zo.equals(this.clefBuilders[this.clefBuilders.length-1],t)||this.clefBuilders.push(t)}lookupClef(t,r){const n=this.clefBuilders.filter(s=>s.measureIndex===t&&s.tick===r);return n.length>0?n[0]:null}addKey(t){this.lookupKey(t.measureIndex)||this.keyBuilders.length>0&&Bo.equals(this.keyBuilders[this.keyBuilders.length-1],t)||this.keyBuilders.push(t)}lookupKey(t){const r=this.keyBuilders.filter(n=>n.measureIndex===t);return r.length>0?r[0]:null}addTime(t){this.lookupTime(t.measureIndex)||this.timeBuilders.length>0&&_o.equals(this.timeBuilders[this.timeBuilders.length-1],t)||this.timeBuilders.push(t)}lookupTime(t){const r=this.timeBuilders.filter(n=>n.measureIndex===t);return r.length>0?r[0]:null}getCurrentTime(t){const r=this.timeBuilders.filter(n=>n.measureIndex<=t);return r.sort((n,s)=>n.measureIndex-s.measureIndex),r[r.length-1]}addOctaveShiftTerm(t,r){let n=this.octaveShiftBuilders.find(s=>s.measureIndex===r);n||(n=new wa({parent:this,measureIndex:r}),this.octaveShiftBuilders.push(n)),n.addTerm(t)}lookupOctaveShift(t){const r=this.octaveShiftBuilders.filter(n=>n.measureIndex===t);return r.length>0?r[0]:null}}class zo{parent;measureIndex;tick;number;sign;line;size="full";afterBarline=!0;additional=!1;constructor(t){Object.assign(this,t)}static equals(t,r){return t&&r&&t.number===r.number&&t.sign===r.sign&&t.line===r.line&&t.size===r.size}toJSX(){return E.jsxs("clef",{number:this.number+1,size:this.size,additional:this.additional?"yes":"no","after-barline":this.afterBarline?"yes":"no",children:[E.jsx("sign",{children:this.sign}),E.jsx("line",{children:this.line})]})}}class Bo{parent;measureIndex;fifths;mode;constructor(t){Object.assign(this,t)}static equals(t,r){return t&&r&&t.fifths===r.fifths&&t.mode===r.mode}toJSX(){return E.jsxs("key",{children:[E.jsx("fifths",{children:this.fifths}),this.mode?E.jsx("mode",{children:this.mode}):null]})}}class _o{parent;measureIndex;beats;beatType;timeSigNumeric;constructor(t){Object.assign(this,t)}static equals(t,r){return t&&r&&t.beats===r.beats&&t.beatType===r.beatType}toJSX(){const t={};return this.beats===2&&this.beatType===2&&(t.symbol="cut"),this.beats===4&&this.beatType===4&&(t.symbol="common"),E.jsxs("time",{...t,children:[E.jsx("beats",{children:this.beats}),E.jsx("beat-type",{children:this.beatType})]})}}class fa{value;constructor(t){Object.assign(this,t)}toJSX(){return E.jsx("divisions",{children:this.value})}}class pa{value;constructor(t){Object.assign(this,t)}toJSX(){return E.jsx("staves",{children:this.value})}}const ml={[I.Zero]:0,[I.One]:1,[I.Two]:2,[I.Three]:3,[I.Four]:4,[I.Five]:5,[I.Six]:6,[I.Seven]:7,[I.Eight]:8,[I.Nine]:9};class ma{value;placement;data;constructor(t){this.data=t}toJSX(){const t=Object.keys(ml),r=this.data.filter(n=>t.includes(n.type));return r.length>0?r.map(n=>E.jsx("fingering",{placement:{[Ae.Up]:"above",[Ae.Down]:"below"}[n.direction],children:ml[n.type]})):null}}class ga{timeWarp;constructor(t){this.timeWarp=t}toJSX(){return E.jsxs("time-modification",{children:[E.jsx("actual-notes",{children:this.timeWarp.denominator}),E.jsx("normal-notes",{children:this.timeWarp.numerator})]})}}const ya={"-2":"flat-flat","-1":"flat",0:"natural",1:"sharp",2:"double-sharp"};class va{alter;constructor(t){this.alter=t}toJSX(){return typeof this.alter=="number"?E.jsx("accidental",{children:ya[this.alter]}):null}}class wa{parent;measureIndex;number;terms=[];constructor(t){Object.assign(this,t)}addTerm(t){this.terms.find(r=>r.tick===t.tick)||this.terms.push(t)}getJSX(t){const r=this.terms.find(s=>s.tick===t);if(!r)return null;let n="up";switch(r.tokenType){case I.OctaveShift8vb:n="up";break;case I.OctaveShift8va:n="down";break;case I.OctaveShift0:n="stop";break}return E.jsxs("direction",{children:[E.jsx("direction-type",{children:E.jsx("octave-shift",{size:"8",type:n,number:"1"})}),E.jsx("staff",{children:this.parent.parent.template.indexOf(this.parent.index)+1})]})}validate(){if(this.terms.length===0)return!0;this.terms.sort((n,s)=>n.tick-s.tick);const t=[],r=[];for(let n of this.terms)[I.OctaveShift8va,I.OctaveShift8vb].includes(n.tokenType)&&r.push(n),I.OctaveShift0===n.tokenType&&(r.push(n),t.push([...r]),r.length=0);return t.some(n=>n.length!==2)||r.length===1?(console.error("八度记号配对错误"),!1):!0}toJSX(){}}export{Fa as S}; +${oa(this.toJSX())} +`}}class ha{parent;name;measureBuilders=[];staffContexts=[];template;get id(){return`P${this.parent.partBuilders.indexOf(this)+1}`}get stavesCount(){return this.template.length}constructor(t){Object.assign(this,t)}ensureStaffContext(t){for(;this.staffContexts.length<=t;){const r=new pa({parent:this,index:t});this.staffContexts.push(r)}return this.staffContexts[t]}ensureMeasureBuilder(t){for(;this.measureBuilders.length<=t;){const r=new da({parent:this});this.measureBuilders.push(r)}return this.measureBuilders[t]}toJSX(){return D.jsx("part",{id:this.id,children:this.measureBuilders.map((t,r)=>t.toJSX())})}}class da{parent;voiceBuilders=[];beamCount=0;beamState;get index(){return this.parent.measureBuilders.indexOf(this)}get score(){return this.parent.parent.score}constructor(t){Object.assign(this,t)}addVoice(t){const r=new fa({parent:this,voice:t});this.voiceBuilders.push(r),t.contextedTerms.filter(i=>i.type===Qo.Clef).forEach(i=>{const l={[O.ClefC]:"C",[O.ClefF]:"F",[O.ClefG]:"G"}[i.tokenType];l||console.error("unknown Clef",i.tokenType);const o=this.parent.ensureStaffContext(i.staff);o.addClef(new zo({parent:o,measureIndex:this.index,tick:i.tick,number:i.staff-this.parent.template[0],sign:l,line:3-i.y})),o.addKey(new Bo({parent:o,measureIndex:this.index,fifths:t.keySignature})),o.addTime(new _o({parent:o,measureIndex:this.index,beats:t.timeSignature.numerator,beatType:t.timeSignature.denominator,timeSigNumeric:t.timeSigNumeric}))});const n={[O.OctaveShift8va]:8,[O.OctaveShift8vb]:-8,[O.OctaveShift0]:0},s=Object.keys(n);t.contextedTerms.forEach(i=>{s.includes(i.tokenType)&&this.parent.ensureStaffContext(i.staff).addOctaveShiftTerm(i,this.index)})}toJSX(){const t=this.score.pages.reduce((r,n)=>[...r,...n.systems.reduce((s,i)=>[...s,...i.measureBars],[])],[]);return this.beamCount=0,D.jsxs("measure",{number:this.index+1,width:Math.round(t[this.index]*10),children:[this.index===0&&D.jsx(D.Fragment,{children:this.parent.staffContexts.map(r=>{var n;return r.clefBuilders.length>0?D.jsx("attributes",{children:(n=r.clefBuilders)==null?void 0:n[0].toJSX()}):null})}),this.voiceBuilders.reduce((r,n,s)=>{var i,l;return r.push(...n.toJSX()),(l=(i=this.voiceBuilders[s+1])==null?void 0:i.toJSX)!=null&&l.call(i)&&r.push(D.jsx("backup",{children:D.jsx("duration",{children:n.voice.duration})})),r},[])]})}}class fa{parent;voice;get index(){return this.parent.voiceBuilders.indexOf(this)}constructor(t){Object.assign(this,t)}toJSX(){const t=[],r={[O.AccNatural]:0,[O.AccSharp]:1,[O.AccDoublesharp]:2,[O.AccFlat]:-1,[O.AccFlatflat]:-1,[O.KeyNatural]:0,[O.KeySharp]:1,[O.KeyFlat]:-1},n=Object.keys(r),s=this.voice.contextedTerms.reduce((l,o)=>{if(n.includes(o.tokenType)){const u=l.findIndex(d=>d.x===o.x&&d.y===o.y);u>-1?l.splice(u,1):l.push(o)}return l},[]),i=Object.entries(this.voice.tickMap).map(([l,o])=>[Number(l),o]).sort(([l],[o])=>l-o);return i.forEach(([l,o])=>{const u=s.filter(d=>d.tick===l);u.length>0&&u.forEach(d=>{var g;const c=(g=o.ys)==null?void 0:g.findIndex(v=>v===d.y);c>-1&&(o.pitches[c].accidental=r[d.tokenType])})}),i.forEach(([l,o],u)=>{var c,g,v,E,L;const d=this.parent.parent.ensureStaffContext(o.staff||0);if(o instanceof $o){const I=d.lookupDivisions(this.parent.index),j=d.lookupStaves(this.parent.index),x=d.lookupClef(this.parent.index,+l),f=d.lookupKey(this.parent.index),w=d.lookupTime(this.parent.index),a=[I,f,w,j,x].filter(Boolean).map(N=>N.toJSX());u===0&&this.index===0&&a.length>0&&t.push(D.jsx("attributes",{children:a}));const p=[],m=[];m.push(...new ya(o.accessories).toJSX()||[]),m.length>0&&p.push(D.jsx("technical",{children:m}));const S=[];o.accessories.some(N=>N.type===O.ScriptStaccato)&&S.push(D.jsx("staccato",{})),o.accessories.some(N=>N.type===O.ScriptSforzato)&&S.push(D.jsx("accent",{})),o.accessories.some(N=>N.type===O.ScriptStaccatissimo)&&S.push(D.jsx("spiccato",{})),o.accessories.some(N=>N.type===O.ScriptMarcato)&&S.push(D.jsx("strong-accent",{})),o.accessories.some(N=>N.type===O.ScriptTenuto)&&S.push(D.jsx("tenuto",{})),S.length>0&&p.push(D.jsx("articulations",{children:S}));const h=o.accessories.find(N=>N.type===O.ScriptFermata);h&&p.push(D.jsx("fermata",{type:{[be.Up]:"upright",[be.Down]:"inverted"}[h.direction]})),o.accessories.some(N=>N.type===O.SlurBegin)&&o.accessories.filter(N=>N.type===O.SlurBegin).forEach(N=>{p.push(D.jsx("slur",{"default-x":(o.x+N.x).toFixed(2),placement:{[be.Up]:"above",[be.Down]:"below"}[N.direction],type:"start"}))}),o.accessories.some(N=>N.type===O.SlurEnd)&&o.accessories.filter(N=>N.type===O.SlurEnd).forEach(N=>{p.push(D.jsx("slur",{"default-x":(o.x+N.x).toFixed(2),number:"1",placement:{[be.Up]:"above",[be.Down]:"below"}[N.direction],type:"stop"}))}),o.accessories.some(N=>N.type===O.TieBegin)&&o.accessories.filter(N=>N.type===O.TieBegin).forEach(N=>{p.push(D.jsx("tied",{type:"start"}))}),o.accessories.some(N=>N.type===O.TieEnd)&&o.accessories.filter(N=>N.type===O.TieEnd).forEach(N=>{p.push(D.jsx("tied",{type:"stop"}))});const y=[];o.accessories.some(N=>N.type===O.ScriptTurn)&&y.push(D.jsx("turn",{})),o.accessories.some(N=>N.type===O.ScriptTrill)&&y.push(D.jsx("trill-mark",{})),o.accessories.some(N=>N.type===O.ScriptMordent)&&y.push(D.jsx("mordent",{})),o.accessories.some(N=>N.type===O.ScriptPortato)&&y.push(D.jsx("inverted-mordent",{})),y.length>0&&p.push(D.jsx("ornaments",{children:y}));const T=ca(o.division);if(this.index===0){const N=o.staff-this.parent.parent.template[0]+1,B=aa(o.accessories);if(B){const ne=B.type;t.push(D.jsxs("direction",{placement:B.direction??"below",children:[D.jsx("direction-type",{children:D.jsx("dynamics",{children:Wo.createElement(ne)})}),D.jsx("staff",{children:N})]}))}const k=o.accessories.find(ne=>ne.type===O.WedgeCrescendo),fe=o.accessories.find(ne=>ne.type===O.WedgeDiminuendo),Pt=o.accessories.find(ne=>ne.type===O.WedgeClose);k&&t.push(D.jsxs("direction",{placement:"below",children:[D.jsx("direction-type",{children:D.jsx("wedge",{type:"crescendo"})}),D.jsx("staff",{children:N})]})),fe&&t.push(D.jsxs("direction",{placement:"below",children:[D.jsx("direction-type",{children:D.jsx("wedge",{type:"diminuendo"})}),D.jsx("staff",{children:N})]})),Pt&&t.push(D.jsxs("direction",{children:[D.jsx("direction-type",{children:D.jsx("wedge",{type:"stop"})}),D.jsx("staff",{children:N})]})),o.accessories.some(ne=>ne.type===O.PedalPed)&&t.push(D.jsxs("direction",{children:[D.jsx("direction-type",{children:D.jsx("pedal",{type:"start",sign:"yes"})}),D.jsx("staff",{children:N})]})),o.accessories.some(ne=>ne.type===O.PedalStar)&&t.push(D.jsxs("direction",{children:[D.jsx("direction-type",{children:D.jsx("pedal",{type:"stop",sign:"yes"})}),D.jsx("staff",{children:N})]}));const gt=(g=(c=d.lookupOctaveShift(this.parent.index))==null?void 0:c.getJSX)==null?void 0:g.call(c,o.tick);gt&&t.push(gt)}if(o.pitches){const N=o.pitches.length>1;(v=o.pitches)==null||v.forEach((B,k)=>{const{alter:fe,step:Pt,octave:gt}=ua(B),ne={u:"up",d:"down"}[o.stemDirection];if(!this.voice.empty){let Zt=null;switch(o.beam){case"Open":Zt=D.jsx("beam",{number:"1",children:"begin"}),this.parent.beamState=o.beam;break;case"Close":Zt=D.jsx("beam",{number:"1",children:"end"}),this.parent.beamCount+=1,this.parent.beamState=o.beam;break;default:this.parent.beamState==="Open"&&(Zt=D.jsx("beam",{number:"1",children:"continue"}));break}const Ao=o.staff-this.parent.parent.template[0]+1;t.push(D.jsxs("note",{children:[o.grace&&D.jsx("grace",{"steal-time-following":o.duration}),N&&k!==0&&D.jsx("chord",{}),!o.rest&&D.jsxs("pitch",{children:[D.jsx("step",{children:Pt}),fe!==0&&D.jsx("alter",{children:fe}),D.jsx("octave",{children:gt})]}),o.rest==="r"&&D.jsxs("rest",{children:[D.jsx("display-step",{children:Pt}),D.jsx("display-octave",{children:gt})]}),o.rest==="R"&&D.jsxs("rest",{measure:"yes",children:[D.jsx("display-step",{children:Pt}),D.jsx("display-octave",{children:gt})]}),o.grace?null:D.jsx("duration",{children:o.duration}),D.jsx("voice",{children:this.index+1}),D.jsx("type",{children:T}),Array(o.dots).fill(null).map(()=>D.jsx("dot",{})),new xa(B.accidental).toJSX(),o.timeWarp&&new va(o.timeWarp).toJSX(),ne?D.jsx("stem",{children:ne}):null,D.jsx("staff",{children:Ao}),Zt,k===0?p.length>0&&D.jsx("notations",{children:p}):null]}))}})}if(this.index===0&&u===i.length-1){const N=d.getCurrentTime(this.parent.index);if(N){const B=(L=(E=d.lookupOctaveShift(this.parent.index))==null?void 0:E.getJSX)==null?void 0:L.call(E,gl*N.beatType/4*N.beats);B&&t.push(B)}}const M=Math.max(...d.clefBuilders.map(N=>N.tick)),C=Math.max(...Object.keys(this.voice.tickMap).map(N=>+N));if(M>=C){const N=d.lookupClef(this.parent.index,M);N&&t.push(D.jsx("attributes",{children:N.toJSX()}))}}}),t}}class pa{parent;index;divisionsBuilder=new ma({value:gl});clefBuilders=[];keyBuilders=[];timeBuilders=[];octave;tied;beamCount=0;octaveShiftBuilders=[];constructor(t){Object.assign(this,t)}lookupDivisions(t){return t===0?this.divisionsBuilder:null}lookupStaves(t){return t===0?new ga({value:this.parent.stavesCount}):null}addClef(t){this.lookupClef(t.measureIndex,t.tick)||this.clefBuilders.length>0&&zo.equals(this.clefBuilders[this.clefBuilders.length-1],t)||this.clefBuilders.push(t)}lookupClef(t,r){const n=this.clefBuilders.filter(s=>s.measureIndex===t&&s.tick===r);return n.length>0?n[0]:null}addKey(t){this.lookupKey(t.measureIndex)||this.keyBuilders.length>0&&Bo.equals(this.keyBuilders[this.keyBuilders.length-1],t)||this.keyBuilders.push(t)}lookupKey(t){const r=this.keyBuilders.filter(n=>n.measureIndex===t);return r.length>0?r[0]:null}addTime(t){this.lookupTime(t.measureIndex)||this.timeBuilders.length>0&&_o.equals(this.timeBuilders[this.timeBuilders.length-1],t)||this.timeBuilders.push(t)}lookupTime(t){const r=this.timeBuilders.filter(n=>n.measureIndex===t);return r.length>0?r[0]:null}getCurrentTime(t){const r=this.timeBuilders.filter(n=>n.measureIndex<=t);return r.sort((n,s)=>n.measureIndex-s.measureIndex),r[r.length-1]}addOctaveShiftTerm(t,r){let n=this.octaveShiftBuilders.find(s=>s.measureIndex===r);n||(n=new Sa({parent:this,measureIndex:r}),this.octaveShiftBuilders.push(n)),n.addTerm(t)}lookupOctaveShift(t){const r=this.octaveShiftBuilders.filter(n=>n.measureIndex===t);return r.length>0?r[0]:null}}class zo{parent;measureIndex;tick;number;sign;line;size="full";afterBarline=!0;additional=!1;constructor(t){Object.assign(this,t)}static equals(t,r){return t&&r&&t.number===r.number&&t.sign===r.sign&&t.line===r.line&&t.size===r.size}toJSX(){return D.jsxs("clef",{number:this.number+1,size:this.size,additional:this.additional?"yes":"no","after-barline":this.afterBarline?"yes":"no",children:[D.jsx("sign",{children:this.sign}),D.jsx("line",{children:this.line})]})}}class Bo{parent;measureIndex;fifths;mode;constructor(t){Object.assign(this,t)}static equals(t,r){return t&&r&&t.fifths===r.fifths&&t.mode===r.mode}toJSX(){return D.jsxs("key",{children:[D.jsx("fifths",{children:this.fifths}),this.mode?D.jsx("mode",{children:this.mode}):null]})}}class _o{parent;measureIndex;beats;beatType;timeSigNumeric;constructor(t){Object.assign(this,t)}static equals(t,r){return t&&r&&t.beats===r.beats&&t.beatType===r.beatType}toJSX(){const t={};return this.beats===2&&this.beatType===2&&(t.symbol="cut"),this.beats===4&&this.beatType===4&&(t.symbol="common"),D.jsxs("time",{...t,children:[D.jsx("beats",{children:this.beats}),D.jsx("beat-type",{children:this.beatType})]})}}class ma{value;constructor(t){Object.assign(this,t)}toJSX(){return D.jsx("divisions",{children:this.value})}}class ga{value;constructor(t){Object.assign(this,t)}toJSX(){return D.jsx("staves",{children:this.value})}}const ml={[O.Zero]:0,[O.One]:1,[O.Two]:2,[O.Three]:3,[O.Four]:4,[O.Five]:5,[O.Six]:6,[O.Seven]:7,[O.Eight]:8,[O.Nine]:9};class ya{value;placement;data;constructor(t){this.data=t}toJSX(){const t=Object.keys(ml),r=this.data.filter(n=>t.includes(n.type));return r.length>0?r.map(n=>D.jsx("fingering",{placement:{[be.Up]:"above",[be.Down]:"below"}[n.direction],children:ml[n.type]})):null}}class va{timeWarp;constructor(t){this.timeWarp=t}toJSX(){return D.jsxs("time-modification",{children:[D.jsx("actual-notes",{children:this.timeWarp.denominator}),D.jsx("normal-notes",{children:this.timeWarp.numerator})]})}}const wa={"-2":"flat-flat","-1":"flat",0:"natural",1:"sharp",2:"double-sharp"};class xa{alter;constructor(t){this.alter=t}toJSX(){return typeof this.alter=="number"?D.jsx("accidental",{children:wa[this.alter]}):null}}class Sa{parent;measureIndex;number;terms=[];constructor(t){Object.assign(this,t)}addTerm(t){this.terms.find(r=>r.tick===t.tick)||this.terms.push(t)}getJSX(t){const r=this.terms.find(s=>s.tick===t);if(!r)return null;let n="up";switch(r.tokenType){case O.OctaveShift8vb:n="up";break;case O.OctaveShift8va:n="down";break;case O.OctaveShift0:n="stop";break}return D.jsxs("direction",{children:[D.jsx("direction-type",{children:D.jsx("octave-shift",{size:"8",type:n,number:"1"})}),D.jsx("staff",{children:this.parent.parent.template.indexOf(this.parent.index)+1})]})}validate(){if(this.terms.length===0)return!0;this.terms.sort((n,s)=>n.tick-s.tick);const t=[],r=[];for(let n of this.terms)[O.OctaveShift8va,O.OctaveShift8vb].includes(n.tokenType)&&r.push(n),O.OctaveShift0===n.tokenType&&(r.push(n),t.push([...r]),r.length=0);return t.some(n=>n.length!==2)||r.length===1?(console.error("八度记号配对错误"),!1):!0}toJSX(){}}export{_a as S}; diff --git a/dist/assets/Table-5d4bbec4.js b/dist/assets/Table-5d4bbec4.js deleted file mode 100644 index 8c9fd0b842192c2a3a22733934b08c96f0ae694e..0000000000000000000000000000000000000000 --- a/dist/assets/Table-5d4bbec4.js +++ /dev/null @@ -1,44 +0,0 @@ -import{A as Tt,f as h,w as Jr,a as U,a1 as uu,C as Bt,O as He,c as ve,b as B,e as xa,d as rl,a2 as Xf,a3 as tn,_ as Ke,a4 as cu,a5 as on,V as yn,a6 as bn,U as Cn,T as xn,Z as ze,a7 as Zf,a8 as Gh,a9 as Ia,I as al,o as _a,aa as ol,L as La,ab as du,ac as Qf,ad as fu,ae as qh,af as fs,ag as Xh,ah as Zh,ai as Qh,aj as Jh,Y as Bn,ak as eg,al as ic,am as vu,an as Jf,ao as ev,ap as aa,aq as tv,ar as mu,as as nv,at as sr,au as il,av as rv,aw as oa,ax as tg,ay as av,az as ov,aA as iv,aB as ll,aC as ng,N as lc,aD as lv,aE as rg,aF as ag,aG as og,aH as pt,aI as sv,aJ as xt,aK as Ve,m as Bl,aL as pn,aM as hn,aN as pu,aO as Nr,aP as uv,aQ as ig,aR as cv,aS as dv,aT as lg,aU as fv,aV as vv,aW as sg,aX as ug}from"./_setToString-038b76d7.js";import{r as i,_ as J,k as Nt,R as Z,g as ja,j as x,c as hi,e as mv}from"./umi-2135699e.js";import{d as pv,g as sc,r as cg,h as Tr,P as dg,K as Be,j as hv,u as kt,k as fg,l as uc,m as vg,p as mg,q as ir,F as sl,s as ul,t as gv,v as cl,w as hu,x as Do,y as pg,a as rr,D as hg,z as yv,T as nn,A as Er,B as cc,G as dc,J as gu,M as gg,I as kn,N as bv,E as fc,e as Sa,O as yg,R as Hn,C as Zt,Q as bg,S as Xt,U as Cg}from"./util-e99b60d9.js";import{T as xg,s as yu,a as fo,w as Sg,F as zt,I as ea,b as wg,D as Cv,A as Pg,S as xv,R as Eg}from"./useDebounce-ed4013a1.js";import{t as Rn,u as dl,B as _n}from"./button-eb671c5b.js";import{a as Sv,u as fl,c as wv,B as Pv,d as bu,g as Ev,b as $r,C as kv,P as Rv,L as kg,e as So,S as Rg,D as Mg}from"./index-c4a8d365.js";import{S as Fr,a as Tg,d as Fg}from"./index-eb226363.js";import{_ as Oo,a as Ng,b as $g,c as Dg,d as Og,D as Io,e as Ig,O as _g,E as Lg,P as jg,M as Ag}from"./index-bbd283be.js";import{D as Mv}from"./DeleteOutlined-1f8a2958.js";var Kg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z"}}]},name:"calendar",theme:"outlined"};const Vg=Kg;var zg=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:Vg}))},Bg=i.forwardRef(zg);const Tv=Bg;var Hg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"filled"};const Wg=Hg;var Ug=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:Wg}))},Yg=i.forwardRef(Ug);const Gg=Yg;var qg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"outlined"};const Xg=qg;var Zg=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:Xg}))},Qg=i.forwardRef(Zg);const Jg=Qg;var e0={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M858.9 689L530.5 308.2c-9.4-10.9-27.5-10.9-37 0L165.1 689c-12.2 14.2-1.2 35 18.5 35h656.8c19.7 0 30.7-20.8 18.5-35z"}}]},name:"caret-up",theme:"outlined"};const t0=e0;var n0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:t0}))},r0=i.forwardRef(n0);const a0=r0;var o0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};const i0=o0;var l0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:i0}))},s0=i.forwardRef(l0);const Fv=s0;var u0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 00-11.3 0L403.6 366.3a7.23 7.23 0 005.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z"}}]},name:"column-height",theme:"outlined"};const c0=u0;var d0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:c0}))},f0=i.forwardRef(d0);const v0=f0;var m0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"}}]},name:"copy",theme:"outlined"};const p0=m0;var h0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:p0}))},g0=i.forwardRef(h0);const Cu=g0;var y0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M272.9 512l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L186.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H532c6.7 0 10.4-7.7 6.3-12.9L272.9 512zm304 0l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L490.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H836c6.7 0 10.4-7.7 6.3-12.9L576.9 512z"}}]},name:"double-left",theme:"outlined"};const b0=y0;var C0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:b0}))},x0=i.forwardRef(C0);const S0=x0;var w0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z"}}]},name:"double-right",theme:"outlined"};const P0=w0;var E0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:P0}))},k0=i.forwardRef(E0);const R0=k0;var M0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 170h-60c-4.4 0-8 3.6-8 8v518H310v-73c0-6.7-7.8-10.5-13-6.3l-141.9 112a8 8 0 000 12.6l141.9 112c5.3 4.2 13 .4 13-6.3v-75h498c35.3 0 64-28.7 64-64V178c0-4.4-3.6-8-8-8z"}}]},name:"enter",theme:"outlined"};const T0=M0;var F0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:T0}))},N0=i.forwardRef(F0);const $0=N0;var D0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file",theme:"outlined"};const O0=D0;var I0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:O0}))},_0=i.forwardRef(I0);const Nv=_0;var L0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V642H349v196zm531.1-684H143.9c-24.5 0-39.8 26.7-27.5 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"}}]},name:"filter",theme:"filled"};const j0=L0;var A0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:j0}))},K0=i.forwardRef(A0);const V0=K0;var z0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z"}}]},name:"filter",theme:"outlined"};const B0=z0;var H0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:B0}))},W0=i.forwardRef(H0);const U0=W0;var Y0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 444H820V330.4c0-17.7-14.3-32-32-32H473L355.7 186.2a8.15 8.15 0 00-5.5-2.2H96c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h698c13 0 24.8-7.9 29.7-20l134-332c1.5-3.8 2.3-7.9 2.3-12 0-17.7-14.3-32-32-32zM136 256h188.5l119.6 114.4H748V444H238c-13 0-24.8 7.9-29.7 20L136 643.2V256zm635.3 512H159l103.3-256h612.4L771.3 768z"}}]},name:"folder-open",theme:"outlined"};const G0=Y0;var q0=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:G0}))},X0=i.forwardRef(q0);const Z0=X0;var Q0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 298.4H521L403.7 186.2a8.15 8.15 0 00-5.5-2.2H144c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V330.4c0-17.7-14.3-32-32-32zM840 768H184V256h188.5l119.6 114.4H840V768z"}}]},name:"folder",theme:"outlined"};const J0=Q0;var e1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:J0}))},t1=i.forwardRef(e1);const n1=t1;var r1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M391 240.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L280 333.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L401 410c5.1.6 9.5-3.7 8.9-8.9L391 240.9zm10.1 373.2L240.8 633c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824a8.03 8.03 0 000 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7A8.01 8.01 0 00391 783l18.9-160.1c.6-5.1-3.7-9.4-8.8-8.8zm221.8-204.2L783.2 391c6.6-.8 9.4-8.9 4.7-13.6L744 333.6 877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3a8.03 8.03 0 00-11.3 0L690.3 279.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L614.1 401c-.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L623 614c-5.1-.6-9.5 3.7-8.9 8.9L633 783.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z"}}]},name:"fullscreen-exit",theme:"outlined"};const a1=r1;var o1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:a1}))},i1=i.forwardRef(o1);const l1=i1;var s1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M290 236.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7a8.01 8.01 0 0013.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 000 11.3l42.4 42.4zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9L845 694.9zm-463.7-94.6a8.03 8.03 0 00-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"}}]},name:"fullscreen",theme:"outlined"};const u1=s1;var c1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:u1}))},d1=i.forwardRef(c1);const f1=d1;var v1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M300 276.5a56 56 0 1056-97 56 56 0 00-56 97zm0 284a56 56 0 1056-97 56 56 0 00-56 97zM640 228a56 56 0 10112 0 56 56 0 00-112 0zm0 284a56 56 0 10112 0 56 56 0 00-112 0zM300 844.5a56 56 0 1056-97 56 56 0 00-56 97zM640 796a56 56 0 10112 0 56 56 0 00-112 0z"}}]},name:"holder",theme:"outlined"};const m1=v1;var p1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:m1}))},h1=i.forwardRef(p1);const g1=h1;var y1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"minus-square",theme:"outlined"};const b1=y1;var C1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:b1}))},x1=i.forwardRef(C1);const S1=x1;var w1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"plus-square",theme:"outlined"};const P1=w1;var E1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:P1}))},k1=i.forwardRef(E1);const R1=k1;var M1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H188V494h440v326z"}},{tag:"path",attrs:{d:"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8a325.95 325.95 0 016.5 140.9h74.9c14.8-103.6-11.3-213-81-302.3z"}}]},name:"rotate-left",theme:"outlined"};const T1=M1;var F1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:T1}))},N1=i.forwardRef(F1);const $1=N1;var D1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2A399.75 399.75 0 00123.5 631h74.9c-.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8z"}},{tag:"path",attrs:{d:"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H396V494h440v326z"}}]},name:"rotate-right",theme:"outlined"};const O1=D1;var I1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:O1}))},_1=i.forwardRef(I1);const L1=_1;var j1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3a32.05 32.05 0 00.6 45.3l183.7 179.1-43.4 252.9a31.95 31.95 0 0046.4 33.7L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3z"}}]},name:"star",theme:"filled"};const A1=j1;var K1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:A1}))},V1=i.forwardRef(K1);const z1=V1;var B1={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z"}}]},name:"swap-right",theme:"outlined"};const H1=B1;var W1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:H1}))},U1=i.forwardRef(W1);const Y1=U1;var G1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 780H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM505.7 669a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V176c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8z"}}]},name:"vertical-align-bottom",theme:"outlined"};const q1=G1;var X1=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:q1}))},Z1=i.forwardRef(X1);const Q1=Z1;var J1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 474H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zm-353.6-74.7c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H550V104c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v156h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.6zm11.4 225.4a7.14 7.14 0 00-11.3 0L405.6 752.3a7.23 7.23 0 005.7 11.7H474v156c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V764h62.8c6 0 9.4-7 5.7-11.7L517.7 624.7z"}}]},name:"vertical-align-middle",theme:"outlined"};const ey=J1;var ty=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:ey}))},ny=i.forwardRef(ty);const ry=ny;var ay={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 168H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM518.3 355a8 8 0 00-12.6 0l-112 141.7a7.98 7.98 0 006.3 12.9h73.9V848c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V509.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 355z"}}]},name:"vertical-align-top",theme:"outlined"};const oy=ay;var iy=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:oy}))},ly=i.forwardRef(iy);const sy=ly;var uy={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"warning",theme:"filled"};const cy=uy;var dy=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:cy}))},fy=i.forwardRef(dy);const vy=fy;var my={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-in",theme:"outlined"};const py=my;var hy=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:py}))},gy=i.forwardRef(hy);const yy=gy;var by={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-out",theme:"outlined"};const Cy=by;var xy=function(t,r){return i.createElement(Tt,h(h({},t),{},{ref:r,icon:Cy}))},Sy=i.forwardRef(xy);const wy=Sy;function vs(e){return e!=null&&e===e.window}function Py(e,t){var r,n;if(typeof window>"u")return 0;var a=t?"scrollTop":"scrollLeft",o=0;return vs(e)?o=e[t?"pageYOffset":"pageXOffset"]:e instanceof Document?o=e.documentElement[a]:(e instanceof HTMLElement||e)&&(o=e[a]),e&&!vs(e)&&typeof o!="number"&&(o=(n=((r=e.ownerDocument)!==null&&r!==void 0?r:e).documentElement)===null||n===void 0?void 0:n[a]),o}function Ey(e,t,r,n){var a=r-t;return e/=n/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}function ky(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=t.getContainer,n=r===void 0?function(){return window}:r,a=t.callback,o=t.duration,s=o===void 0?450:o,l=n(),u=Py(l,!0),c=Date.now(),d=function f(){var v=Date.now(),m=v-c,p=Ey(m>s?s:m,u,e,s);vs(l)?l.scrollTo(window.pageXOffset,p):l instanceof Document||l.constructor.name==="HTMLDocument"?l.documentElement.scrollTop=p:l.scrollTop=p,m0&&arguments[0]!==void 0?arguments[0]:!0,t=i.useRef({}),r=pv();return i.useEffect(function(){var n=sc.subscribe(function(a){t.current=a,e&&r()});return function(){return sc.unsubscribe(n)}},[]),t.current}var ms=i.createContext("default"),vc=function(t){var r=t.children,n=t.size;return i.createElement(ms.Consumer,null,function(a){return i.createElement(ms.Provider,{value:n||a},r)})},Ry=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(e);af?"".concat(f,"+"):c,R=D==="0"||D===0,T=c===null||R&&!E,N=(o!=null||l!=null)&&T,M=m&&!R,I=M?"":D,L=i.useMemo(function(){var ue=I==null||I==="";return(ue||R&&!E)&&!M},[I,R,E,M]),j=i.useRef(c);L||(j.current=c);var _=j.current,K=i.useRef(I);L||(K.current=I);var z=K.current,A=i.useRef(M);L||(A.current=M);var V=i.useMemo(function(){if(!b)return J({},C);var ue={marginTop:b[1]};return k==="rtl"?ue.left=parseInt(b[0],10):ue.right=-parseInt(b[0],10),J(J({},ue),C)},[k,b,C]),X=y??(typeof _=="string"||typeof _=="number"?_:void 0),H=L||!s?null:i.createElement("span",{className:"".concat(O,"-status-text")},s),Q=!_||He(_)!=="object"?void 0:xa(_,function(ue){return{style:J(J({},V),ue.style)}}),Y=ve(B(B(B({},"".concat(O,"-status-dot"),N),"".concat(O,"-status-").concat(o),!!o),"".concat(O,"-status-").concat(l),lo(l))),ae={};l&&!lo(l)&&(ae.background=l);var q=ve(O,B(B(B({},"".concat(O,"-status"),N),"".concat(O,"-not-a-wrapper"),!a),"".concat(O,"-rtl"),k==="rtl"),S);if(!a&&N){var ne=V.color;return i.createElement("span",J({},w,{className:q,style:V}),i.createElement("span",{className:Y,style:ae}),s&&i.createElement("span",{style:{color:ne},className:"".concat(O,"-status-text")},s))}return i.createElement("span",J({},w,{className:q}),a,i.createElement(rl,{visible:!L,motionName:"".concat(O,"-zoom"),motionAppear:!1,motionDeadline:1e3},function(ue){var G=ue.className,te=$("scroll-number",n),ee=A.current,le=ve(B(B(B(B(B(B({},"".concat(O,"-dot"),ee),"".concat(O,"-count"),!ee),"".concat(O,"-count-sm"),g==="small"),"".concat(O,"-multiple-words"),!ee&&z&&z.toString().length>1),"".concat(O,"-status-").concat(o),!!o),"".concat(O,"-status-").concat(l),lo(l))),re=J({},V);return l&&!lo(l)&&(re=re||{},re.background=l),i.createElement(Ay,{prefixCls:te,show:!L,motionClassName:G,className:le,count:z,title:X,style:re,key:"scrollNumber"},Q)}),H)};Ov.Ribbon=Oy;const $n=Ov;var Iv=function(t){if(Xf()&&window.document.documentElement){var r=Array.isArray(t)?t:[t],n=window.document.documentElement;return r.some(function(a){return a in n.style})}return!1},Vy=function(t,r){if(!Iv(t))return!1;var n=document.createElement("div"),a=n.style[t];return n.style[t]=r,n.style[t]!==a};function ps(e,t){return!Array.isArray(e)&&t!==void 0?Vy(e,t):Iv(e)}var zy={getNow:function(){return Nt()},getFixedDate:function(t){return Nt(t,"YYYY-MM-DD")},getEndDate:function(t){var r=t.clone();return r.endOf("month")},getWeekDay:function(t){var r=t.clone().locale("en_US");return r.weekday()+r.localeData().firstDayOfWeek()},getYear:function(t){return t.year()},getMonth:function(t){return t.month()},getDate:function(t){return t.date()},getHour:function(t){return t.hour()},getMinute:function(t){return t.minute()},getSecond:function(t){return t.second()},addYear:function(t,r){var n=t.clone();return n.add(r,"year")},addMonth:function(t,r){var n=t.clone();return n.add(r,"month")},addDate:function(t,r){var n=t.clone();return n.add(r,"day")},setYear:function(t,r){var n=t.clone();return n.year(r)},setMonth:function(t,r){var n=t.clone();return n.month(r)},setDate:function(t,r){var n=t.clone();return n.date(r)},setHour:function(t,r){var n=t.clone();return n.hour(r)},setMinute:function(t,r){var n=t.clone();return n.minute(r)},setSecond:function(t,r){var n=t.clone();return n.second(r)},isAfter:function(t,r){return t.isAfter(r)},isValidate:function(t){return t.isValid()},locale:{getWeekFirstDay:function(t){var r=Nt().locale(t);return r.localeData().firstDayOfWeek()},getWeekFirstDate:function(t,r){var n=r.clone(),a=n.locale(t);return a.weekday(0)},getWeek:function(t,r){var n=r.clone(),a=n.locale(t);return a.week()},getShortWeekDays:function(t){var r=Nt().locale(t);return r.localeData().weekdaysMin()},getShortMonths:function(t){var r=Nt().locale(t);return r.localeData().monthsShort()},format:function(t,r,n){var a=r.clone(),o=a.locale(t);return o.format(n)},parse:function(t,r,n){for(var a=[],o=0;o1&&(s=t.addDate(s,-7)),s}function mo(e,t,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;switch(t){case"year":return r.addYear(e,n*10);case"quarter":case"month":return r.addYear(e,n);default:return r.addMonth(e,n)}}function en(e,t){var r=t.generateConfig,n=t.locale,a=t.format;return typeof a=="function"?a(e):r.locale.format(n.locale,e,a)}function Bv(e,t){var r=t.generateConfig,n=t.locale,a=t.formatList;return!e||typeof a[0]=="function"?null:r.locale.parse(n.locale,e,a)}function bs(e){var t=e.cellDate,r=e.mode,n=e.disabledDate,a=e.generateConfig;if(!n)return!1;var o=function(p,g,y){for(var b=g;b<=y;){var C=void 0;switch(p){case"date":{if(C=a.setDate(t,b),!n(C))return!1;break}case"month":{if(C=a.setMonth(t,b),!bs({cellDate:C,mode:"month",generateConfig:a,disabledDate:n}))return!1;break}case"year":{if(C=a.setYear(t,b),!bs({cellDate:C,mode:"year",generateConfig:a,disabledDate:n}))return!1;break}}b+=1}return!0};switch(r){case"date":case"week":return n(t);case"month":{var s=1,l=a.getDate(a.getEndDate(t));return o("date",s,l)}case"quarter":{var u=Math.floor(a.getMonth(t)/3)*3,c=u+2;return o("month",u,c)}case"year":return o("month",0,11);case"decade":{var d=a.getYear(t),f=Math.floor(d/On)*On,v=f+On-1;return o("year",f,v)}}}function lb(e){var t=i.useContext(gn),r=t.hideHeader;if(r)return null;var n=e.prefixCls,a=e.generateConfig,o=e.locale,s=e.value,l=e.format,u="".concat(n,"-header");return i.createElement(Aa,{prefixCls:u},s?en(s,{locale:o,format:l,generateConfig:a}):" ")}function sb(e){var t=e.value,r=e.generateConfig,n=e.disabledMinutes,a=e.disabledSeconds,o=e.minutes,s=e.seconds,l=e.use12Hours,u=function(d,f,v,m){var p=t||r.getNow(),g=Math.max(0,f),y=Math.max(0,v),b=Math.max(0,m),C=n&&n(g);if(C!=null&&C.includes(y)){var S=o.find(function(w){return!C.includes(w.value)});if(S)y=S.value;else return null}var P=a&&a(g,y);if(P!=null&&P.includes(b)){var E=s.find(function(w){return!P.includes(w.value)});if(E)b=E.value;else return null}return p=_v(r,p,!l||!d?g:g+12,y,b),p};return u}function Hv(e,t){for(var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0",n=String(e);n.length=1?r|0:1,s=e;s<=t;s+=o)a.push({label:Hv(s,2),value:s,disabled:(n||[]).includes(s)});return a}function db(e){var t=e.generateConfig,r=e.prefixCls,n=e.operationRef,a=e.activeColumnIndex,o=e.value,s=e.showHour,l=e.showMinute,u=e.showSecond,c=e.use12Hours,d=e.hourStep,f=d===void 0?1:d,v=e.minuteStep,m=v===void 0?1:v,p=e.secondStep,g=p===void 0?1:p,y=e.disabledHours,b=e.disabledMinutes,C=e.disabledSeconds,S=e.disabledTime,P=e.hideDisabledOptions,E=e.onSelect,w=[],F="".concat(r,"-content"),$="".concat(r,"-time-panel"),k,O=o?t.getHour(o):-1,D=O,R=o?t.getMinute(o):-1,T=o?t.getSecond(o):-1,N=t.getNow(),M=i.useMemo(function(){if(S){var G=S(N);return[G.disabledHours,G.disabledMinutes,G.disabledSeconds]}return[y,b,C]},[y,b,C,S,N]),I=U(M,3),L=I[0],j=I[1],_=I[2],K=Hl(0,23,f,L&&L()),z=cu(function(){return K},K,cb);c&&(k=D>=12,D%=12);var A=i.useMemo(function(){if(!c)return[!1,!1];var G=[!0,!0];return z.forEach(function(te){var ee=te.disabled,le=te.value;ee||(le>=12?G[1]=!1:G[0]=!1)}),G},[c,z]),V=U(A,2),X=V[0],H=V[1],Q=i.useMemo(function(){return c?z.filter(k?function(G){return G.value>=12}:function(G){return G.value<12}).map(function(G){var te=G.value%12,ee=te===0?"12":Hv(te,2);return h(h({},G),{},{label:ee,value:te})}):z},[c,k,z]),Y=Hl(0,59,m,j&&j(O)),ae=Hl(0,59,g,_&&_(O,R)),q=sb({value:o,generateConfig:t,disabledMinutes:j,disabledSeconds:_,minutes:Y,seconds:ae,use12Hours:c});n.current={onUpDown:function(te){var ee=w[a];if(ee)for(var le=ee.units.findIndex(function(me){return me.value===ee.value}),re=ee.units.length,ge=1;ge2&&arguments[2]!==void 0?arguments[2]:!1;(Pe===g||dt)&&(fe(xe),F&&F(xe),ae&&ae(xe,Je),$&&!wa(l,xe,ce)&&!(v!=null&&v(xe))&&$(xe))},mt=function(xe){if(Fb.includes(Pe)){var Je,dt,ut=Pe==="date";switch(xe===Be.PAGE_UP||xe===Be.PAGE_DOWN?dt=ut?l.addMonth:l.addYear:dt=ut?l.addDate:l.addMonth,xe){case Be.LEFT:case Be.PAGE_UP:Je=dt(pe,-1);break;case Be.RIGHT:case Be.PAGE_DOWN:Je=dt(pe,1);break;case Be.UP:case Be.DOWN:Je=dt(pe,Number("".concat(xe===Be.UP?"-":"").concat(ut?vo:wu)));break}if(Je)return!(v!=null&&v(Je))}return!0},tt=function(xe){if(re.current&&re.current.onKeyDown){var Je=!0,dt=xe.which;if([Be.LEFT,Be.RIGHT,Be.UP,Be.DOWN,Be.PAGE_UP,Be.PAGE_DOWN,Be.ENTER].includes(dt)&&(xe.preventDefault(),dt!==Be.ENTER&&b===0&&(Je=mt(dt))),Je)return re.current.onKeyDown(xe)}return on(!1,"Panel not correct handle keyDown event. Please help to fire issue about this."),!1},we=function(xe){re.current&&re.current.onBlur&&re.current.onBlur(xe)};Q&&te!=="right"&&(Q.current={onKeyDown:tt,onClose:function(){re.current&&re.current.onClose&&re.current.onClose()}}),i.useEffect(function(){u&&!ge.current&&Ce(u)},[u]),i.useEffect(function(){ge.current=!1},[]);var We,Te=h(h({},e),{},{operationRef:re,prefixCls:n,viewDate:pe,value:ce,onViewDateChange:Re,sourceMode:ct,onPanelChange:Ge,disabledDate:v});switch(delete Te.onChange,delete Te.onSelect,Pe){case"decade":We=i.createElement(rb,J({},Te,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}}));break;case"year":We=i.createElement(Tb,J({},Te,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}}));break;case"month":We=i.createElement(xb,J({},Te,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}}));break;case"quarter":We=i.createElement(kb,J({},Te,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}}));break;case"week":We=i.createElement(gb,J({},Te,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}}));break;case"time":delete Te.showTime,We=i.createElement(Yv,J({},Te,He(S)==="object"?S:null,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}}));break;default:S?We=i.createElement(hb,J({},Te,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}})):We=i.createElement(Su,J({},Te,{onSelect:function(xe,Je){Re(xe),_e(xe,Je)}}))}var Le,ye,de=function(){var xe=l.getNow(),Je=Uy(l.getHour(xe),l.getMinute(xe),l.getSecond(xe),A?I:1,V?j:1,X?K:1),dt=_v(l,xe,Je[0],Je[1],Je[2]);_e(dt,"submit")};q||(Le=Gv(n,Pe,E),ye=qv({prefixCls:n,components:T,needConfirmButton:z,okDisabled:!ce||v&&v(ce),locale:s,showNow:C,onNow:z&&de,onOk:function(){ce&&(_e(ce,"submit",!0),R&&R(ce))}}));var be;if(P&&Pe==="date"&&g==="date"&&!S){var Me=l.getNow(),Ye="".concat(n,"-today-btn"),lt=v&&v(Me);be=i.createElement("a",{className:ve(Ye,lt&&"".concat(Ye,"-disabled")),"aria-disabled":lt,onClick:function(){lt||_e(Me,"mouse",!0)}},s.today)}return i.createElement(gn.Provider,{value:h(h({},H),{},{mode:Pe,hideHeader:"hideHeader"in e?w:H.hideHeader,hidePrevBtn:G&&te==="right",hideNextBtn:G&&te==="left"})},i.createElement("div",{tabIndex:b,className:ve("".concat(n,"-panel"),a,(t={},B(t,"".concat(n,"-panel-has-range"),ee&&ee[0]&&ee[1]),B(t,"".concat(n,"-panel-has-range-hover"),le&&le[0]&&le[1]),B(t,"".concat(n,"-panel-rtl"),N==="rtl"),t)),style:o,onKeyDown:tt,onBlur:we,onMouseDown:O,ref:Y},We,Le||ye||be?i.createElement("div",{className:"".concat(n,"-footer")},Le,ye,be):null))}var Nb={bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}}};function Zv(e){var t,r=e.prefixCls,n=e.popupElement,a=e.popupStyle,o=e.visible,s=e.dropdownClassName,l=e.dropdownAlign,u=e.transitionName,c=e.getPopupContainer,d=e.children,f=e.range,v=e.popupPlacement,m=e.direction,p="".concat(r,"-dropdown"),g=function(){return v!==void 0?v:m==="rtl"?"bottomRight":"bottomLeft"};return i.createElement(fg,{showAction:[],hideAction:[],popupPlacement:g(),builtinPlacements:Nb,prefixCls:p,popupTransitionName:u,popup:n,popupAlign:l,popupVisible:o,popupClassName:ve(s,(t={},B(t,"".concat(p,"-range"),f),B(t,"".concat(p,"-rtl"),m==="rtl"),t)),popupStyle:a,getPopupContainer:c},d)}function xs(e){var t=e.open,r=e.value,n=e.isClickOutside,a=e.triggerOpen,o=e.forwardKeyDown,s=e.onKeyDown,l=e.blurToCancel,u=e.onSubmit,c=e.onCancel,d=e.onFocus,f=e.onBlur,v=e.currentFocusedKey,m=e.key,p=m===void 0?"start":m,g=i.useState(!1),y=U(g,2),b=y[0],C=y[1],S=i.useState(!1),P=U(S,2),E=P[0],w=P[1],F=i.useRef(),$=i.useRef(!1),k=i.useRef(!1),O=i.useRef(!1),D={onMouseDown:function(){C(!0),a(!0)},onKeyDown:function(T){var N=function(){O.current=!0};if(s(T,N),!O.current){switch(T.which){case Be.ENTER:{t?u()!==!1&&C(!0):a(!0),T.preventDefault();return}case Be.TAB:{b&&t&&!T.shiftKey?(C(!1),T.preventDefault()):!b&&t&&!o(T)&&T.shiftKey&&(C(!0),T.preventDefault());return}case Be.ESC:{C(!0),c();return}}!t&&![Be.SHIFT].includes(T.which)?a(!0):b||o(T)}},onFocus:function(T){C(!0),w(!0),v&&(v.current=p),clearTimeout(F.current),d&&d(T)},onBlur:function(T){if($.current||!n(document.activeElement)){$.current=!1;return}l?setTimeout(function(){for(var N=document,M=N.activeElement;M&&M.shadowRoot;)M=M.shadowRoot.activeElement;n(M)&&c()},0):t&&(a(!1),k.current&&u()),w(!1),v?(v.current="",F.current=setTimeout(function(){v.current||f==null||f(T)},100)):f==null||f(T)}};return i.useEffect(function(){k.current=!1},[t]),i.useEffect(function(){k.current=!0},[r]),i.useEffect(function(){return Xy(function(R){var T=Zy(R),N=n(T);t?N?(!E||N)&&a(!1):($.current=!0,requestAnimationFrame(function(){$.current=!1})):E&&!N&&($.current=!0)})}),i.useEffect(function(){return function(){return clearTimeout(F.current)}},[]),[D,{focused:E,typing:b}]}function Ss(e){var t=e.valueTexts,r=e.onTextChange,n=i.useState(""),a=U(n,2),o=a[0],s=a[1],l=i.useRef([]);l.current=t;function u(d){s(d),r(d)}function c(){s(l.current[0])}return i.useEffect(function(){t.every(function(d){return d!==o})&&c()},[t.join("||")]),[o,u,c]}function ji(e,t){var r=t.formatList,n=t.generateConfig,a=t.locale;return cu(function(){if(!e)return[[""],""];for(var o="",s=[],l=0;l1&&arguments[1]!==void 0?arguments[1]:!1;if(cancelAnimationFrame(c.current),b){u(y);return}c.current=requestAnimationFrame(function(){u(y)})}var f=ji(l,{formatList:r,generateConfig:n,locale:a}),v=U(f,2),m=v[1];function p(y){d(y)}function g(){var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;d(null,y)}return i.useEffect(function(){g(!0)},[e]),i.useEffect(function(){return function(){return cancelAnimationFrame(c.current)}},[]),[m,p,g]}function $b(e){var t,r=e.prefixCls,n=r===void 0?"rc-picker":r,a=e.id,o=e.tabIndex,s=e.style,l=e.className,u=e.dropdownClassName,c=e.dropdownAlign,d=e.popupStyle,f=e.transitionName,v=e.generateConfig,m=e.locale,p=e.inputReadOnly,g=e.allowClear,y=e.autoFocus,b=e.showTime,C=e.picker,S=C===void 0?"date":C,P=e.format,E=e.use12Hours,w=e.value,F=e.defaultValue,$=e.open,k=e.defaultOpen,O=e.defaultOpenValue,D=e.suffixIcon,R=e.clearIcon,T=e.disabled,N=e.disabledDate,M=e.placeholder,I=e.getPopupContainer,L=e.pickerRef,j=e.panelRender,_=e.onChange,K=e.onOpenChange,z=e.onFocus,A=e.onBlur,V=e.onMouseDown,X=e.onMouseUp,H=e.onMouseEnter,Q=e.onMouseLeave,Y=e.onContextMenu,ae=e.onClick,q=e.onKeyDown,ne=e.onSelect,ue=e.direction,G=e.autoComplete,te=G===void 0?"off":G,ee=e.inputRender,le=i.useRef(null),re=S==="date"&&!!b||S==="time",ge=Wv(jv(P,S,b,E)),Ee=i.useRef(null),me=i.useRef(null),ce=i.useRef(null),fe=kt(null,{value:w,defaultValue:F}),ie=U(fe,2),se=ie[0],pe=ie[1],Ce=i.useState(se),Re=U(Ce,2),Fe=Re[0],Se=Re[1],ke=i.useRef(null),Pe=kt(!1,{value:$,defaultValue:k,postState:function(De){return T?!1:De},onChange:function(De){K&&K(De),!De&&ke.current&&ke.current.onClose&&ke.current.onClose()}}),Qe=U(Pe,2),et=Qe[0],vt=Qe[1],ct=ji(Fe,{formatList:ge,generateConfig:v,locale:m}),ht=U(ct,2),Ge=ht[0],_e=ht[1],mt=Ss({valueTexts:Ge,onTextChange:function(De){var Oe=Bv(De,{locale:m,formatList:ge,generateConfig:v});Oe&&(!N||!N(Oe))&&Se(Oe)}}),tt=U(mt,3),we=tt[0],We=tt[1],Te=tt[2],Le=function(De){Se(De),pe(De),_&&!wa(v,se,De)&&_(De,De?en(De,{generateConfig:v,locale:m,format:ge[0]}):"")},ye=function(De){T&&De||vt(De)},de=function(De){return et&&ke.current&&ke.current.onKeyDown?ke.current.onKeyDown(De):(on(!1,"Picker not correct forward KeyDown operation. Please help to fire issue about this."),!1)},be=function(){for(var De=arguments.length,Oe=new Array(De),Ue=0;Uem(d);case"month":return v(y)>v(d);case"week":return f(y)>f(d);default:return!or(u,y,d)&&u.isAfter(y,d)}return!1},[s,l[1],d,t]),g=i.useCallback(function(y){if(s&&s(y))return!0;if(l[0]&&c)return!or(u,y,d)&&u.isAfter(c,y);if(r&&c)switch(n){case"quarter":return m(y)0&&arguments[0]!==void 0?arguments[0]:!1,Ae=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},rt=null;Ie&&Tn&&Tn[0]&&Tn[1]&&p.isAfter(Tn[1],Tn[0])&&(rt=Tn);var wt=w;if(w&&He(w)==="object"&&w.defaultValue){var Ut=w.defaultValue;wt=h(h({},w),{},{defaultValue:Et(Ut,we)||void 0})}var Wr=null;return L&&(Wr=function(Nn,An){return L(Nn,An,{range:we?"end":"start"})}),i.createElement(Va.Provider,{value:{inRange:!0,panelPosition:bt,rangedValue:pr||ut,hoverRangedValue:rt}},i.createElement(Xv,J({},e,Ae,{dateRender:Wr,showTime:wt,mode:Ft[we],generateConfig:p,style:void 0,direction:se,disabledDate:we===0?Ze:Xe,disabledTime:function(Nn){return I?I(Nn,we===0?"start":"end"):!1},className:ve(B({},"".concat(o,"-panel-focused"),we===0?!qe:!ln)),value:Et(ut,we),locale:g,tabIndex:-1,onPanelChange:function(Nn,An){we===0&&Br(!0),we===1&&va(!0),ot(wn(Ft,An,we),wn(ut,Nn,we));var Jn=Nn;bt==="right"&&Ft[we]===An&&(Jn=mo(Jn,An,p,-1)),xe(Jn,we)},onOk:null,onSelect:void 0,onChange:void 0,defaultValue:we===0?Et(ut,1):Et(ut,0)})))}var br=0,nc=0;if(we&&Qe.current&&vt.current&&Pe.current){br=Qe.current.offsetWidth+vt.current.offsetWidth;var zh=Ge.current.offsetLeft>br?Ge.current.offsetLeft-br:Ge.current.offsetLeft;Pe.current.offsetWidth&&Ge.current.offsetWidth&&br>Pe.current.offsetWidth-Ge.current.offsetWidth-(se==="rtl"?0:zh)&&(nc=br)}var Bh=se==="rtl"?{right:br}:{left:br};function Hh(){var bt,Ae=Gv(o,Ft[we],Y),rt=qv({prefixCls:o,components:fe,needConfirmButton:Fe,okDisabled:!Et(ut,we)||M&&M(ut[we]),locale:g,rangeList:Vh,onOk:function(){Et(ut,we)&&(Xn(ut,we),me&&me(ut))}});if(E!=="time"&&!w){var wt=$e(we),Ut=mo(wt,E,p),Wr=Ft[we],Qn=Wr===E,Nn=Kl(Qn?"left":!1,{pickerValue:wt,onPickerValueChange:function(dn){xe(dn,we)}}),An=Kl("right",{pickerValue:Ut,onPickerValueChange:function(dn){xe(mo(dn,E,p,-1),we)}});se==="rtl"?bt=i.createElement(i.Fragment,null,An,Qn&&Nn):bt=i.createElement(i.Fragment,null,Nn,Qn&&An)}else bt=Kl();var Jn=i.createElement(i.Fragment,null,i.createElement("div",{className:"".concat(o,"-panels")},bt),(Ae||rt)&&i.createElement("div",{className:"".concat(o,"-footer")},Ae,rt));return j&&(Jn=j(Jn)),i.createElement("div",{className:"".concat(o,"-panel-container"),style:{marginLeft:nc},ref:Pe,onMouseDown:function(dn){dn.preventDefault()}},Jn)}var Wh=i.createElement("div",{className:ve("".concat(o,"-range-wrapper"),"".concat(o,"-").concat(E,"-range-wrapper")),style:{minWidth:At}},i.createElement("div",{ref:Ge,className:"".concat(o,"-range-arrow"),style:Bh}),Hh()),rc;A&&(rc=i.createElement("span",{className:"".concat(o,"-suffix")},A));var ac;z&&(Et(be,0)&&!Le[0]||Et(be,1)&&!Le[1])&&(ac=i.createElement("span",{onMouseDown:function(Ae){Ae.preventDefault(),Ae.stopPropagation()},onMouseUp:function(Ae){Ae.preventDefault(),Ae.stopPropagation();var rt=be;Le[0]||(rt=wn(rt,null,0)),Le[1]||(rt=wn(rt,null,1)),Xn(rt,null),Sn(!1,we)},className:"".concat(o,"-clear")},V||i.createElement("span",{className:"".concat(o,"-clear-btn")})));var oc={size:Av(E,_e[0],p)},Vl=0,zl=0;Qe.current&&et.current&&vt.current&&(we===0?zl=Qe.current.offsetWidth:(Vl=br,zl=et.current.offsetWidth));var Uh=se==="rtl"?{right:Vl}:{left:Vl},Yh=function(Ae,rt){var wt=wn(ut,Ae,we);rt==="submit"||rt!=="key"&&!Fe?(Xn(wt,we),we===0?Br():va()):$t(wt)};return i.createElement(gn.Provider,{value:{operationRef:Te,hideHeader:E==="time",onDateMouseEnter:Al,onDateMouseLeave:ci,hideRanges:!0,onSelect:Yh,open:Ie}},i.createElement(Zv,{visible:Ie,popupElement:Wh,popupStyle:c,prefixCls:o,dropdownClassName:d,dropdownAlign:v,getPopupContainer:m,transitionName:f,range:!0,direction:se},i.createElement("div",J({ref:ke,className:ve(o,"".concat(o,"-range"),u,(t={},B(t,"".concat(o,"-disabled"),Le[0]&&Le[1]),B(t,"".concat(o,"-focused"),we===0?he:Ot),B(t,"".concat(o,"-rtl"),se==="rtl"),t)),style:l,onClick:sn,onMouseEnter:re,onMouseLeave:ge,onMouseDown:Hr,onMouseUp:le},Uv(e)),i.createElement("div",{className:ve("".concat(o,"-input"),(r={},B(r,"".concat(o,"-input-active"),we===0),B(r,"".concat(o,"-input-placeholder"),!!li),r)),ref:Qe},i.createElement("input",J({id:s,disabled:Le[0],readOnly:H||typeof _e[0]=="function"||!qe,value:li||mr,onChange:function(Ae){da(Ae.target.value)},autoFocus:b,placeholder:Et(y,0)||"",ref:ct},W,oc,{autoComplete:Re}))),i.createElement("div",{className:"".concat(o,"-range-separator"),ref:vt},k),i.createElement("div",{className:ve("".concat(o,"-input"),(n={},B(n,"".concat(o,"-input-active"),we===1),B(n,"".concat(o,"-input-placeholder"),!!yr),n)),ref:et},i.createElement("input",J({disabled:Le[1],readOnly:H||typeof _e[0]=="function"||!ln,value:yr||Ct,onChange:function(Ae){_t(Ae.target.value)},placeholder:Et(y,1)||"",ref:ht},Lt,oc,{autoComplete:Re}))),i.createElement("div",{className:"".concat(o,"-active-bar"),style:h(h({},Uh),{},{width:zl,position:"absolute"})}),rc,ac)))}var Ab=function(e){yn(r,e);var t=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),s=0;sN?(R=O,w.current="x"):(R=D,w.current="y"),t(-R,-R)&&k.preventDefault()}var $=i.useRef(null);$.current={onTouchStart:S,onTouchMove:P,onTouchEnd:E,onWheel:F},i.useEffect(function(){function k(T){$.current.onTouchStart(T)}function O(T){$.current.onTouchMove(T)}function D(T){$.current.onTouchEnd(T)}function R(T){$.current.onWheel(T)}return document.addEventListener("touchmove",O,{passive:!1}),document.addEventListener("touchend",D,{passive:!1}),e.current.addEventListener("touchstart",k,{passive:!1}),e.current.addEventListener("wheel",R),function(){document.removeEventListener("touchmove",O),document.removeEventListener("touchend",D)}},[])}function Jv(e){var t=i.useState(0),r=U(t,2),n=r[0],a=r[1],o=i.useRef(0),s=i.useRef();return s.current=e,vg(function(){var l;(l=s.current)===null||l===void 0||l.call(s)},[n]),function(){o.current===n&&(o.current+=1,a(o.current))}}function Wb(e){var t=i.useRef([]),r=i.useState({}),n=U(r,2),a=n[1],o=i.useRef(typeof e=="function"?e():e),s=Jv(function(){var u=o.current;t.current.forEach(function(c){u=c(u)}),t.current=[],o.current=u,a({})});function l(u){t.current.push(u),s()}return[o.current,l]}var Pc={width:0,height:0,left:0,top:0,right:0};function Ub(e,t,r,n,a,o,s){var l=s.tabs,u=s.tabPosition,c=s.rtl,d,f,v;return["top","bottom"].includes(u)?(d="width",f=c?"right":"left",v=Math.abs(r)):(d="height",f="top",v=-r),i.useMemo(function(){if(!l.length)return[0,0];for(var m=l.length,p=m,g=0;gv+t){p=g-1;break}}for(var b=0,C=m-1;C>=0;C-=1){var S=e.get(l[C].key)||Pc;if(S[f]Xe?"left":"right"})}),T=U(R,2),N=T[0],M=T[1],I=xc(0,function(Ze,Xe){!D&&S&&S({direction:Ze>Xe?"top":"bottom"})}),L=U(I,2),j=L[0],_=L[1],K=i.useState([0,0]),z=U(K,2),A=z[0],V=z[1],X=i.useState([0,0]),H=U(X,2),Q=H[0],Y=H[1],ae=i.useState([0,0]),q=U(ae,2),ne=q[0],ue=q[1],G=i.useState([0,0]),te=U(G,2),ee=te[0],le=te[1],re=Wb(new Map),ge=U(re,2),Ee=ge[0],me=ge[1],ce=zb(o,Ee,Q[0]),fe=Si(A,D),ie=Si(Q,D),se=Si(ne,D),pe=Si(ee,D),Ce=feke?ke:Ze}var Qe=i.useRef(),et=i.useState(),vt=U(et,2),ct=vt[0],ht=vt[1];function Ge(){ht(Date.now())}function _e(){window.clearTimeout(Qe.current)}Hb(F,function(Ze,Xe){function Ne(je,Ie){je(function(De){var Oe=Pe(De+Ie);return Oe})}return Ce?(D?Ne(M,Ze):Ne(_,Xe),_e(),Ge(),!0):!1}),i.useEffect(function(){return _e(),ct&&(Qe.current=window.setTimeout(function(){ht(0)},100)),_e},[ct]);var mt=Ub(ce,Re,D?N:j,ie,se,pe,h(h({},e),{},{tabs:o})),tt=U(mt,2),we=tt[0],We=tt[1],Te=Zf(function(){var Ze=arguments.length>0&&arguments[0]!==void 0?arguments[0]:d,Xe=ce.get(Ze)||{width:0,height:0,left:0,right:0,top:0};if(D){var Ne=N;f?Xe.rightN+Re&&(Ne=Xe.right+Xe.width-Re):Xe.left<-N?Ne=-Xe.left:Xe.left+Xe.width>-N+Re&&(Ne=-(Xe.left+Xe.width-Re)),_(0),M(Pe(Ne))}else{var je=j;Xe.top<-j?je=-Xe.top:Xe.top+Xe.height>-j+Re&&(je=-(Xe.top+Xe.height-Re)),M(0),_(Pe(je))}}),Le={};g==="top"||g==="bottom"?Le[f?"marginRight":"marginLeft"]=y:Le.marginTop=y;var ye=o.map(function(Ze,Xe){var Ne=Ze.key;return i.createElement(Zb,{id:u,prefixCls:a,key:Ne,tab:Ze,style:Xe===0?void 0:Le,closable:Ze.closable,editable:m,active:Ne===d,renderWrapper:b,removeAriaLabel:p==null?void 0:p.removeAriaLabel,onClick:function(Ie){C(Ne,Ie)},onFocus:function(){Te(Ne),Ge(),F.current&&(f||(F.current.scrollLeft=0),F.current.scrollTop=0)}})}),de=function(){return me(function(){var Xe=new Map;return o.forEach(function(Ne){var je,Ie=Ne.key,De=(je=$.current)===null||je===void 0?void 0:je.querySelector('[data-node-key="'.concat(em(Ie),'"]'));De&&Xe.set(Ie,{width:De.offsetWidth,height:De.offsetHeight,left:De.offsetLeft,top:De.offsetTop})}),Xe})};i.useEffect(function(){de()},[o.map(function(Ze){return Ze.key}).join("_")]);var be=Jv(function(){var Ze=ma(P),Xe=ma(E),Ne=ma(w);V([Ze[0]-Xe[0]-Ne[0],Ze[1]-Xe[1]-Ne[1]]);var je=ma(O);ue(je);var Ie=ma(k);le(Ie);var De=ma($);Y([De[0]-je[0],De[1]-je[1]]),de()}),Me=o.slice(0,we),Ye=o.slice(We+1),lt=[].concat(Ke(Me),Ke(Ye)),$e=i.useState(),xe=U($e,2),Je=xe[0],dt=xe[1],ut=ce.get(d),$t=i.useRef();function Dt(){Jr.cancel($t.current)}i.useEffect(function(){var Ze={};return ut&&(D?(f?Ze.right=ut.right:Ze.left=ut.left,Ze.width=ut.width):(Ze.top=ut.top,Ze.height=ut.height)),Dt(),$t.current=Jr(function(){dt(Ze)}),Dt},[ut,D,f]),i.useEffect(function(){Te()},[d,Se,ke,Ec(ut),Ec(ce),D]),i.useEffect(function(){be()},[f]);var Rt=!!lt.length,Ft="".concat(a,"-nav-wrap"),nt,ot,ft,it;return D?f?(ot=N>0,nt=N!==ke):(nt=N<0,ot=N!==Se):(ft=j<0,it=j!==Se),i.createElement(Tr,{onResize:be},i.createElement("div",{ref:Gh(t,P),role:"tablist",className:ve("".concat(a,"-nav"),s),style:l,onKeyDown:function(){Ge()}},i.createElement(kc,{ref:E,position:"left",extra:v,prefixCls:a}),i.createElement("div",{className:ve(Ft,(r={},B(r,"".concat(Ft,"-ping-left"),nt),B(r,"".concat(Ft,"-ping-right"),ot),B(r,"".concat(Ft,"-ping-top"),ft),B(r,"".concat(Ft,"-ping-bottom"),it),r)),ref:F},i.createElement(Tr,{onResize:be},i.createElement("div",{ref:$,className:"".concat(a,"-nav-list"),style:{transform:"translate(".concat(N,"px, ").concat(j,"px)"),transition:ct?"none":void 0}},ye,i.createElement(tm,{ref:O,prefixCls:a,locale:p,editable:m,style:h(h({},ye.length===0?void 0:Le),{},{visibility:Rt?"hidden":null})}),i.createElement("div",{className:ve("".concat(a,"-ink-bar"),B({},"".concat(a,"-ink-bar-animated"),c.inkBar)),style:Je})))),i.createElement(Xb,J({},e,{removeAriaLabel:p==null?void 0:p.removeAriaLabel,ref:k,prefixCls:a,tabs:lt,className:!Rt&&Fe,tabMoving:!!ct})),i.createElement(kc,{ref:w,position:"right",extra:v,prefixCls:a})))}const Rc=i.forwardRef(Qb);var Jb=["renderTabBar"],eC=["label","key"];function tC(e){var t=e.renderTabBar,r=ze(e,Jb),n=i.useContext(ml),a=n.tabs;if(t){var o=h(h({},r),{},{panes:a.map(function(s){var l=s.label,u=s.key,c=ze(s,eC);return i.createElement(Qv,J({tab:l,key:u,tabKey:u},c))})});return t(o,Rc)}return i.createElement(Rc,r)}function nC(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{inkBar:!0,tabPane:!1},t;return e===!1?t={inkBar:!1,tabPane:!1}:e===!0?t={inkBar:!0,tabPane:!1}:t=h({inkBar:!0},He(e)==="object"?e:{}),t.tabPaneMotion&&t.tabPane===void 0&&(t.tabPane=!0),!t.tabPaneMotion&&t.tabPane&&(t.tabPane=!1),t}var rC=["id","prefixCls","className","items","direction","activeKey","defaultActiveKey","editable","animated","tabPosition","tabBarGutter","tabBarStyle","tabBarExtraContent","locale","moreIcon","moreTransitionName","destroyInactiveTabPane","renderTabBar","onChange","onTabClick","onTabScroll","getPopupContainer","popupClassName"],Mc=0;function aC(e,t){var r,n=e.id,a=e.prefixCls,o=a===void 0?"rc-tabs":a,s=e.className,l=e.items,u=e.direction,c=e.activeKey,d=e.defaultActiveKey,f=e.editable,v=e.animated,m=e.tabPosition,p=m===void 0?"top":m,g=e.tabBarGutter,y=e.tabBarStyle,b=e.tabBarExtraContent,C=e.locale,S=e.moreIcon,P=e.moreTransitionName,E=e.destroyInactiveTabPane,w=e.renderTabBar,F=e.onChange,$=e.onTabClick,k=e.onTabScroll,O=e.getPopupContainer,D=e.popupClassName,R=ze(e,rC),T=i.useMemo(function(){return(l||[]).filter(function(re){return re&&He(re)==="object"&&"key"in re})},[l]),N=u==="rtl",M=nC(v),I=i.useState(!1),L=U(I,2),j=L[0],_=L[1];i.useEffect(function(){_(mg())},[]);var K=kt(function(){var re;return(re=T[0])===null||re===void 0?void 0:re.key},{value:c,defaultValue:d}),z=U(K,2),A=z[0],V=z[1],X=i.useState(function(){return T.findIndex(function(re){return re.key===A})}),H=U(X,2),Q=H[0],Y=H[1];i.useEffect(function(){var re=T.findIndex(function(Ee){return Ee.key===A});if(re===-1){var ge;re=Math.max(0,Math.min(Q,T.length-1)),V((ge=T[re])===null||ge===void 0?void 0:ge.key)}Y(re)},[T.map(function(re){return re.key}).join("_"),A,Q]);var ae=kt(null,{value:n}),q=U(ae,2),ne=q[0],ue=q[1];i.useEffect(function(){n||(ue("rc-tabs-".concat(Mc)),Mc+=1)},[]);function G(re,ge){$==null||$(re,ge);var Ee=re!==A;V(re),Ee&&(F==null||F(re))}var te={id:ne,activeKey:A,animated:M,tabPosition:p,rtl:N,mobile:j},ee,le=h(h({},te),{},{editable:f,locale:C,moreIcon:S,moreTransitionName:P,tabBarGutter:g,onTabClick:G,onTabScroll:k,extra:b,style:y,panes:null,getPopupContainer:O,popupClassName:D});return i.createElement(ml.Provider,{value:{tabs:T,prefixCls:o}},i.createElement("div",J({ref:t,id:n,className:ve(o,"".concat(o,"-").concat(p),(r={},B(r,"".concat(o,"-mobile"),j),B(r,"".concat(o,"-editable"),f),B(r,"".concat(o,"-rtl"),N),r),s)},R),ee,i.createElement(tC,J({},le,{renderTabBar:w})),i.createElement(Vb,J({destroyInactiveTabPane:E},te,{animated:M}))))}var oC=i.forwardRef(aC),iC={motionAppear:!1,motionEnter:!0,motionLeave:!0};function lC(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{inkBar:!0,tabPane:!1},r;return t===!1?r={inkBar:!1,tabPane:!1}:t===!0?r={inkBar:!0,tabPane:!0}:r=J({inkBar:!0},He(t)==="object"?t:{}),r.tabPane&&(r.tabPaneMotion=J(J({},iC),{motionName:ir(e,"switch")})),r}var sC=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(e);a=0;c-=1){var d=t.get(c)||new Set;d.forEach(function(f){var v=f.parent,m=f.node;if(!(n(m)||!f.parent||u.has(f.parent.key))){if(n(f.parent.node)){u.add(v.key);return}var p=!0,g=!1;(v.children||[]).filter(function(y){return!n(y.node)}).forEach(function(y){var b=y.key,C=a.has(b);p&&!C&&(p=!1),!g&&(C||o.has(b))&&(g=!0)}),p&&a.add(v.key),g&&o.add(v.key),u.add(v.key)}})}return{checkedKeys:Array.from(a),halfCheckedKeys:Array.from(nm(o,a))}}function hC(e,t,r,n,a){for(var o=new Set(e),s=new Set(t),l=0;l<=n;l+=1){var u=r.get(l)||new Set;u.forEach(function(v){var m=v.key,p=v.node,g=v.children,y=g===void 0?[]:g;!o.has(m)&&!s.has(m)&&!a(p)&&y.filter(function(b){return!a(b.node)}).forEach(function(b){o.delete(b.key)})})}s=new Set;for(var c=new Set,d=n;d>=0;d-=1){var f=r.get(d)||new Set;f.forEach(function(v){var m=v.parent,p=v.node;if(!(a(p)||!v.parent||c.has(v.parent.key))){if(a(v.parent.node)){c.add(m.key);return}var g=!0,y=!1;(m.children||[]).filter(function(b){return!a(b.node)}).forEach(function(b){var C=b.key,S=o.has(C);g&&!S&&(g=!1),!y&&(S||s.has(C))&&(y=!0)}),g||o.delete(m.key),y&&s.add(m.key),c.add(m.key)}})}return{checkedKeys:Array.from(o),halfCheckedKeys:Array.from(nm(s,o))}}function En(e,t,r,n){var a=[],o;n?o=n:o=mC;var s=new Set(e.filter(function(d){var f=!!mn(r,d);return f||a.push(d),f})),l=new Map,u=0;Object.keys(r).forEach(function(d){var f=r[d],v=f.level,m=l.get(v);m||(m=new Set,l.set(v,m)),m.add(f),u=Math.max(u,v)}),on(!a.length,"Tree missing follow keys: ".concat(a.slice(0,100).map(function(d){return"'".concat(d,"'")}).join(", ")));var c;return t===!0?c=pC(s,l,u,o):c=hC(s,t.halfCheckedKeys,l,u,o),c}var Ao=i.createContext(null),Pu="__RC_CASCADER_SPLIT__",rm="SHOW_PARENT",am="SHOW_CHILD";function kr(e){return e.join(Pu)}function ga(e){return e.map(kr)}function gC(e){return e.split(Pu)}function yC(e){var t=e||{},r=t.label,n=t.value,a=t.children,o=n||"value";return{label:r||"label",value:o,key:o,children:a||"children"}}function so(e,t){var r,n;return(r=e.isLeaf)!==null&&r!==void 0?r:!(!((n=e[t.children])===null||n===void 0)&&n.length)}function bC(e){var t=e.parentElement;if(t){var r=e.offsetTop-t.offsetTop;r-t.scrollTop<0?t.scrollTo({top:r}):r+e.offsetHeight-t.scrollTop>t.offsetHeight&&t.scrollTo({top:r+e.offsetHeight-t.offsetHeight})}}function Tc(e,t,r){var n=new Set(e),a=t();return e.filter(function(o){var s=a[o],l=s?s.parent:null,u=s?s.children:null;return r===am?!(u&&u.some(function(c){return c.key&&n.has(c.key)})):!(l&&!l.node.disabled&&n.has(l.key))})}function wo(e,t,r){for(var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=t,o=[],s=function(){var c,d,f,v=e[l],m=(c=a)===null||c===void 0?void 0:c.findIndex(function(g){var y=g[r.value];return n?String(y)===String(v):y===v}),p=m!==-1?(d=a)===null||d===void 0?void 0:d[m]:null;o.push({value:(f=p==null?void 0:p[r.value])!==null&&f!==void 0?f:v,index:m,option:p}),a=p==null?void 0:p[r.children]},l=0;l1&&arguments[1]!==void 0?arguments[1]:null;return d.map(function(v,m){for(var p=om(f?f.pos:"0",m),g=Ko(v[o],p),y,b=0;b1&&arguments[1]!==void 0?arguments[1]:{},r=t.initWrapper,n=t.processEntity,a=t.onProcessFinished,o=t.externalGetKey,s=t.childrenPropName,l=t.fieldNames,u=arguments.length>2?arguments[2]:void 0,c=o||u,d={},f={},v={posEntities:d,keyEntities:f};return r&&(v=r(v)||v),wC(e,function(m){var p=m.node,g=m.index,y=m.pos,b=m.key,C=m.parentPos,S=m.level,P=m.nodes,E={node:p,nodes:P,index:g,key:b,pos:y,level:S},w=Ko(b,y);d[y]=E,f[w]=E,E.parent=d[C],E.parent&&(E.parent.children=E.parent.children||[],E.parent.children.push(E)),n&&n(E,v)},{externalGetKey:c,childrenPropName:s,fieldNames:l}),a&&a(v),v}function po(e,t){var r=t.expandedKeys,n=t.selectedKeys,a=t.loadedKeys,o=t.loadingKeys,s=t.checkedKeys,l=t.halfCheckedKeys,u=t.dragOverNodeKey,c=t.dropPosition,d=t.keyEntities,f=mn(d,e),v={eventKey:e,expanded:r.indexOf(e)!==-1,selected:n.indexOf(e)!==-1,loaded:a.indexOf(e)!==-1,loading:o.indexOf(e)!==-1,checked:s.indexOf(e)!==-1,halfChecked:l.indexOf(e)!==-1,pos:String(f?f.pos:""),dragOver:u===e&&c===0,dragOverGapTop:u===e&&c===-1,dragOverGapBottom:u===e&&c===1};return v}function Yt(e){var t=e.data,r=e.expanded,n=e.selected,a=e.checked,o=e.loaded,s=e.loading,l=e.halfChecked,u=e.dragOver,c=e.dragOverGapTop,d=e.dragOverGapBottom,f=e.pos,v=e.active,m=e.eventKey,p=h(h({},t),{},{expanded:r,selected:n,checked:a,loaded:o,loading:s,halfChecked:l,dragOver:u,dragOverGapTop:c,dragOverGapBottom:d,pos:f,active:v,key:m});return"props"in p||Object.defineProperty(p,"props",{get:function(){return on(!1,"Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`."),e}}),p}const PC=function(e,t){var r=i.useRef({options:null,info:null}),n=i.useCallback(function(){return r.current.options!==e&&(r.current.options=e,r.current.info=Vo(e,{fieldNames:t,initWrapper:function(o){return h(h({},o),{},{pathKeyEntities:{}})},processEntity:function(o,s){var l=o.nodes.map(function(u){return u[t.value]}).join(Pu);s.pathKeyEntities[l]=o,o.key=l}})),r.current.info.pathKeyEntities},[t,e]);return n},EC=function(e,t){return i.useCallback(function(r){var n=[],a=[];return r.forEach(function(o){var s=wo(o,e,t);s.every(function(l){return l.option})?a.push(o):n.push(o)}),[a,n]},[e,t])};function Fc(e){var t=i.useRef();t.current=e;var r=i.useCallback(function(){return t.current.apply(t,arguments)},[]);return r}function kC(e){return i.useMemo(function(){if(!e)return[!1,{}];var t={matchInputWidth:!0,limit:50};return e&&He(e)==="object"&&(t=h(h({},t),e)),t.limit<=0&&delete t.limit,[!0,t]},[e])}var ho="__rc_cascader_search_mark__",RC=function(t,r,n){var a=n.label;return r.some(function(o){return String(o[a]).toLowerCase().includes(t.toLowerCase())})},MC=function(t,r,n,a){return r.map(function(o){return o[a.label]}).join(" / ")};const TC=function(e,t,r,n,a,o){var s=a.filter,l=s===void 0?RC:s,u=a.render,c=u===void 0?MC:u,d=a.limit,f=d===void 0?50:d,v=a.sort;return i.useMemo(function(){var m=[];if(!e)return[];function p(g,y){g.forEach(function(b){if(!(!v&&f>0&&m.length>=f)){var C=[].concat(Ke(y),[b]),S=b[r.children];if((!S||S.length===0||o)&&l(e,C,{label:r.label})){var P;m.push(h(h({},b),{},(P={},B(P,r.label,c(e,C,n,r)),B(P,ho,C),B(P,r.children,void 0),P)))}S&&p(b[r.children],C)}})}return p(t,[]),v&&m.sort(function(g,y){return v(g[ho],y[ho],e,r)}),f>0?m.slice(0,f):m},[e,t,r,n,c,o,l,v,f])};function FC(e){var t,r=e.prefixCls,n=e.checked,a=e.halfChecked,o=e.disabled,s=e.onClick,l=i.useContext(Ao),u=l.checkable,c=typeof u!="boolean"?u:null;return i.createElement("span",{className:ve("".concat(r),(t={},B(t,"".concat(r,"-checked"),n),B(t,"".concat(r,"-indeterminate"),!n&&a),B(t,"".concat(r,"-disabled"),o),t)),onClick:s},c)}var lm="__cascader_fix_label__";function NC(e){var t=e.prefixCls,r=e.multiple,n=e.options,a=e.activeValue,o=e.prevValuePath,s=e.onToggleOpen,l=e.onSelect,u=e.onActive,c=e.checkedSet,d=e.halfCheckedSet,f=e.loadingKeys,v=e.isSelectable,m="".concat(t,"-menu"),p="".concat(t,"-menu-item"),g=i.useContext(Ao),y=g.fieldNames,b=g.changeOnSelect,C=g.expandTrigger,S=g.expandIcon,P=g.loadingIcon,E=g.dropdownMenuColumnStyle,w=C==="hover",F=i.useMemo(function(){return n.map(function($){var k,O=$.disabled,D=$[ho],R=(k=$[lm])!==null&&k!==void 0?k:$[y.label],T=$[y.value],N=so($,y),M=D?D.map(function(K){return K[y.value]}):[].concat(Ke(o),[T]),I=kr(M),L=f.includes(I),j=c.has(I),_=d.has(I);return{disabled:O,label:R,value:T,isLeaf:N,isLoading:L,checked:j,halfChecked:_,option:$,fullPath:M,fullPathKey:I}})},[n,c,y,d,f,o]);return i.createElement("ul",{className:m,role:"menu"},F.map(function($){var k,O=$.disabled,D=$.label,R=$.value,T=$.isLeaf,N=$.isLoading,M=$.checked,I=$.halfChecked,L=$.option,j=$.fullPath,_=$.fullPathKey,K=function(){if(!O){var X=Ke(j);w&&T&&X.pop(),u(X)}},z=function(){v(L)&&l(j,T)},A;return typeof L.title=="string"?A=L.title:typeof D=="string"&&(A=D),i.createElement("li",{key:_,className:ve(p,(k={},B(k,"".concat(p,"-expand"),!T),B(k,"".concat(p,"-active"),a===R),B(k,"".concat(p,"-disabled"),O),B(k,"".concat(p,"-loading"),N),k)),style:E,role:"menuitemcheckbox",title:A,"aria-checked":M,"data-path-key":_,onClick:function(){K(),(!r||T)&&z()},onDoubleClick:function(){b&&s(!1)},onMouseEnter:function(){w&&K()},onMouseDown:function(X){X.preventDefault()}},r&&i.createElement(FC,{prefixCls:"".concat(t,"-checkbox"),checked:M,halfChecked:I,disabled:O,onClick:function(X){X.stopPropagation(),z()}}),i.createElement("div",{className:"".concat(p,"-content")},D),!N&&S&&!T&&i.createElement("div",{className:"".concat(p,"-expand-icon")},S),N&&P&&i.createElement("div",{className:"".concat(p,"-loading-icon")},P))}))}const $C=function(){var e=fl(),t=e.multiple,r=e.open,n=i.useContext(Ao),a=n.values,o=i.useState([]),s=U(o,2),l=s[0],u=s[1];return i.useEffect(function(){if(r&&!t){var c=a[0];u(c||[])}},[r]),[l,u]},DC=function(e,t,r,n,a,o){var s=fl(),l=s.direction,u=s.searchValue,c=s.toggleOpen,d=s.open,f=l==="rtl",v=i.useMemo(function(){for(var E=-1,w=t,F=[],$=[],k=n.length,O=function(I){var L=w.findIndex(function(j){return j[r.value]===n[I]});if(L===-1)return"break";E=L,F.push(E),$.push(n[I]),w=w[E][r.children]},D=0;D1){var w=p.slice(0,-1);b(w)}else c(!1)},P=function(){var w,F=((w=y[g])===null||w===void 0?void 0:w[r.children])||[],$=F.find(function(O){return!O.disabled});if($){var k=[].concat(Ke(p),[$[r.value]]);b(k)}};i.useImperativeHandle(e,function(){return{onKeyDown:function(w){var F=w.which;switch(F){case Be.UP:case Be.DOWN:{var $=0;F===Be.UP?$=-1:F===Be.DOWN&&($=1),$!==0&&C($);break}case Be.LEFT:{if(u)break;f?P():S();break}case Be.RIGHT:{if(u)break;f?S():P();break}case Be.BACKSPACE:{u||S();break}case Be.ENTER:{if(p.length){var k=y[g],O=(k==null?void 0:k[ho])||[];O.length?o(O.map(function(D){return D[r.value]}),O[O.length-1]):o(p,y[g])}break}case Be.ESC:c(!1),d&&w.stopPropagation()}},onKeyUp:function(){}}})};var OC=i.forwardRef(function(e,t){var r,n,a,o,s=fl(),l=s.prefixCls,u=s.multiple,c=s.searchValue,d=s.toggleOpen,f=s.notFoundContent,v=s.direction,m=i.useRef(),p=v==="rtl",g=i.useContext(Ao),y=g.options,b=g.values,C=g.halfValues,S=g.fieldNames,P=g.changeOnSelect,E=g.onSelect,w=g.searchOptions,F=g.dropdownPrefixCls,$=g.loadData,k=g.expandTrigger,O=F||l,D=i.useState([]),R=U(D,2),T=R[0],N=R[1],M=function(ee){if(!(!$||c)){var le=wo(ee,y,S),re=le.map(function(me){var ce=me.option;return ce}),ge=re[re.length-1];if(ge&&!so(ge,S)){var Ee=kr(ee);N(function(me){return[].concat(Ke(me),[Ee])}),$(re)}}};i.useEffect(function(){T.length&&T.forEach(function(te){var ee=gC(te),le=wo(ee,y,S,!0).map(function(ge){var Ee=ge.option;return Ee}),re=le[le.length-1];(!re||re[S.children]||so(re,S))&&N(function(ge){return ge.filter(function(Ee){return Ee!==te})})})},[y,T,S]);var I=i.useMemo(function(){return new Set(ga(b))},[b]),L=i.useMemo(function(){return new Set(ga(C))},[C]),j=$C(),_=U(j,2),K=_[0],z=_[1],A=function(ee){z(ee),M(ee)},V=function(ee){var le=ee.disabled,re=so(ee,S);return!le&&(re||P||u)},X=function(ee,le){var re=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;E(ee),!u&&(le||P&&(k==="hover"||re))&&d(!1)},H=i.useMemo(function(){return c?w:y},[c,w,y]),Q=i.useMemo(function(){for(var te=[{options:H}],ee=H,le=function(){var me=K[re],ce=ee.find(function(ie){return ie[S.value]===me}),fe=ce==null?void 0:ce[S.children];if(!(fe!=null&&fe.length))return"break";ee=fe,te.push({options:fe})},re=0;re":R,N=e.loadingIcon,M=e.children,I=e.dropdownMatchSelectWidth,L=I===void 0?!1:I,j=e.showCheckedStrategy,_=j===void 0?rm:j,K=ze(e,IC),z=wv(r),A=!!f,V=kt(s,{value:l,postState:Nc}),X=U(V,2),H=X[0],Q=X[1],Y=i.useMemo(function(){return yC(o)},[JSON.stringify(o)]),ae=i.useMemo(function(){return y||[]},[y]),q=PC(ae,Y),ne=i.useCallback(function(tt){var we=q();return tt.map(function(We){var Te=we[We].nodes;return Te.map(function(Le){return Le[Y.value]})})},[q,Y]),ue=kt("",{value:v,postState:function(we){return we||""}}),G=U(ue,2),te=G[0],ee=G[1],le=function(we,We){ee(we),We.source!=="blur"&&m&&m(we)},re=kC(p),ge=U(re,2),Ee=ge[0],me=ge[1],ce=TC(te,ae,Y,b||a,me,u),fe=EC(ae,Y),ie=i.useMemo(function(){var tt=fe(H),we=U(tt,2),We=we[0],Te=we[1];if(!A||!H.length)return[We,[],Te];var Le=ga(We),ye=q(),de=En(Le,!0,ye),be=de.checkedKeys,Me=de.halfCheckedKeys;return[ne(be),ne(Me),Te]},[A,H,q,ne,fe]),se=U(ie,3),pe=se[0],Ce=se[1],Re=se[2],Fe=i.useMemo(function(){var tt=ga(pe),we=Tc(tt,q,_);return[].concat(Ke(Re),Ke(ne(we)))},[pe,q,ne,Re,_]),Se=CC(Fe,ae,Y,A,d),ke=Fc(function(tt){if(Q(tt),c){var we=Nc(tt),We=we.map(function(ye){return wo(ye,ae,Y).map(function(de){return de.option})}),Te=A?we:we[0],Le=A?We:We[0];c(Te,Le)}}),Pe=Fc(function(tt){if(ee(""),!A)ke(tt);else{var we=kr(tt),We=ga(pe),Te=ga(Ce),Le=We.includes(we),ye=Re.some(function(dt){return kr(dt)===we}),de=pe,be=Re;if(ye&&!Le)be=Re.filter(function(dt){return kr(dt)!==we});else{var Me=Le?We.filter(function(dt){return dt!==we}):[].concat(Ke(We),[we]),Ye=q(),lt;if(Le){var $e=En(Me,{checked:!1,halfCheckedKeys:Te},Ye);lt=$e.checkedKeys}else{var xe=En(Me,!0,Ye);lt=xe.checkedKeys}var Je=Tc(lt,q,_);de=ne(Je)}ke([].concat(Ke(be),Ke(de)))}}),Qe=function(we,We){if(We.type==="clear"){ke([]);return}var Te=We.values[0].valueCells;Pe(Te)},et=P!==void 0?P:S,vt=w||E,ct=k||$,ht=function(we){O==null||O(we),D==null||D(we)},Ge=i.useMemo(function(){return{options:ae,fieldNames:Y,values:pe,halfValues:Ce,changeOnSelect:u,onSelect:Pe,checkable:f,searchOptions:ce,dropdownPrefixCls:b,loadData:C,expandTrigger:g,expandIcon:T,loadingIcon:N,dropdownMenuColumnStyle:F}},[ae,Y,pe,Ce,u,Pe,f,ce,b,C,g,T,N,F]),_e=!(te?ce:ae).length,mt=te&&me.matchInputWidth||_e?{}:{minWidth:"auto"};return i.createElement(Ao.Provider,{value:Ge},i.createElement(Pv,J({},K,{ref:t,id:z,prefixCls:a,dropdownMatchSelectWidth:L,dropdownStyle:mt,displayValues:Se,onDisplayValuesChange:Qe,mode:A?"multiple":void 0,searchValue:te,onSearch:le,showSearch:Ee,OptionList:OC,emptyOptions:_e,open:et,dropdownClassName:vt,placement:ct,onDropdownVisibleChange:ht,getRawInputElement:function(){return M}})))});zo.SHOW_PARENT=rm;zo.SHOW_CHILD=am;var LC=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(e);a2&&arguments[2]!==void 0?arguments[2]:!0,ne=function(){F(function(G){var te=new Map(G),ee=te.delete(Y);return ee?te:G})};return F(function(ue){return new Map(ue).set(Y,{url:ae,canPreview:q})}),ne},H=function(Y){Y.stopPropagation(),M(!1),_(null)};return i.useEffect(function(){D(A)},[A]),i.useEffect(function(){!N&&K&&D(A)},[A,K,N]),i.createElement(rx,{value:{isPreviewGroup:!0,previewUrls:V,setPreviewUrls:F,current:O,setCurrent:D,setShowPreview:M,setMousePosition:_,registerImage:X}},a,i.createElement(dm,J({"aria-hidden":!N,visible:N,prefixCls:n,onClose:H,mousePosition:j,src:V.get(O),icons:s,getContainer:p,countRender:C},S)))},Ni=1,$i=50,ro=1,ox=.2,ix=function(t){var r,n=t.visible,a=t.maskTransitionName,o=t.getContainer,s=t.prefixCls,l=t.rootClassName,u=t.icons,c=t.countRender,d=t.showSwitch,f=t.showProgress,v=t.current,m=t.count,p=t.scale,g=t.onSwitchLeft,y=t.onSwitchRight,b=t.onClose,C=t.onZoomIn,S=t.onZoomOut,P=t.onRotateRight,E=t.onRotateLeft,w=u.rotateLeft,F=u.rotateRight,$=u.zoomIn,k=u.zoomOut,O=u.close,D=u.left,R=u.right,T="".concat(s,"-operations-operation"),N="".concat(s,"-operations-icon"),M=[{icon:O,onClick:b,type:"close"},{icon:$,onClick:C,type:"zoomIn",disabled:p===$i},{icon:k,onClick:S,type:"zoomOut",disabled:p===Ni},{icon:F,onClick:P,type:"rotateRight"},{icon:w,onClick:E,type:"rotateLeft"}],I=i.createElement(i.Fragment,null,d&&i.createElement(i.Fragment,null,i.createElement("div",{className:ve("".concat(s,"-switch-left"),B({},"".concat(s,"-switch-left-disabled"),v===0)),onClick:g},D),i.createElement("div",{className:ve("".concat(s,"-switch-right"),B({},"".concat(s,"-switch-right-disabled"),v===m-1)),onClick:y},R)),i.createElement("ul",{className:"".concat(s,"-operations")},f&&i.createElement("li",{className:"".concat(s,"-operations-progress")},(r=c==null?void 0:c(v+1,m))!==null&&r!==void 0?r:"".concat(v+1," / ").concat(m)),M.map(function(L){var j,_=L.icon,K=L.onClick,z=L.type,A=L.disabled;return i.createElement("li",{className:ve(T,(j={},B(j,"".concat(s,"-operations-operation-").concat(z),!0),B(j,"".concat(s,"-operations-operation-disabled"),!!A),j)),onClick:K,key:z},i.isValidElement(_)?i.cloneElement(_,{className:N}):_)})));return i.createElement(rl,{visible:n,motionName:a},function(L){var j=L.className,_=L.style;return i.createElement(pg,{open:!0,getContainer:o??document.body},i.createElement("div",{className:ve("".concat(s,"-operations-wrapper"),j,l),style:_},I))})},$c={x:0,y:0,rotate:0,scale:1};function lx(e){var t=i.useRef(null),r=i.useRef([]),n=i.useState($c),a=U(n,2),o=a[0],s=a[1],l=function(){s($c)},u=function(f){t.current===null&&(r.current=[],t.current=Jr(function(){s(function(v){var m=v;return r.current.forEach(function(p){m=h(h({},m),p)}),t.current=null,m})})),r.current.push(h(h({},o),f))},c=function(f,v,m){var p=e.current,g=p.width,y=p.height,b=p.offsetWidth,C=p.offsetHeight,S=p.offsetLeft,P=p.offsetTop,E=f,w=o.scale*f;w>$i?(E=$i/o.scale,w=$i):wn){if(t>0)return B({},e,o);if(t<0&&an)return B({},e,t<0?o:-o);return{}}function sx(e,t,r,n){var a=cm(),o=a.width,s=a.height,l=null;return e<=o&&t<=s?l={x:0,y:0}:(e>o||t>s)&&(l=h(h({},Dc("x",r,e,o)),Dc("y",n,t,s))),l}var ux=["prefixCls","src","alt","onClose","afterClose","visible","icons","rootClassName","getContainer","countRender","scaleStep","transitionName","maskTransitionName"],dm=function(t){var r=t.prefixCls,n=t.src,a=t.alt,o=t.onClose;t.afterClose;var s=t.visible,l=t.icons,u=l===void 0?{}:l,c=t.rootClassName,d=t.getContainer,f=t.countRender,v=t.scaleStep,m=v===void 0?.5:v,p=t.transitionName,g=p===void 0?"zoom":p,y=t.maskTransitionName,b=y===void 0?"fade":y,C=ze(t,ux),S=i.useRef(),P=i.useRef({deltaX:0,deltaY:0,transformX:0,transformY:0}),E=i.useState(!1),w=U(E,2),F=w[0],$=w[1],k=i.useContext(ku),O=k.previewUrls,D=k.current,R=k.isPreviewGroup,T=k.setCurrent,N=O.size,M=Array.from(O.keys()),I=M.indexOf(D),L=R?O.get(D):n,j=R&&N>1,_=R&&N>=1,K=lx(S),z=K.transform,A=K.resetTransform,V=K.updateTransform,X=K.dispatchZoonChange,H=z.rotate,Q=z.scale,Y=ve(B({},"".concat(r,"-moving"),F)),ae=function(){A()},q=function(){X(ro+m)},ne=function(){X(ro-m)},ue=function(){V({rotate:H+90})},G=function(){V({rotate:H-90})},te=function(ie){ie.preventDefault(),ie.stopPropagation(),I>0&&T(M[I-1])},ee=function(ie){ie.preventDefault(),ie.stopPropagation(),I0&&(Ce=ro/Ce),X(Ce,ie.clientX,ie.clientY)}},me=i.useCallback(function(fe){!s||!j||(fe.keyCode===Be.LEFT?I>0&&T(M[I-1]):fe.keyCode===Be.RIGHT&&I=0||l.relatedTarget.className.indexOf("".concat(f,"-item"))>=0))&&d(n.getValidValue()))},n.go=function(l){var u=n.state.goInputText;u!==""&&(l.keyCode===Ur.ENTER||l.type==="click")&&(n.setState({goInputText:""}),n.props.quickGo(n.getValidValue()))},n}return xn(r,[{key:"getValidValue",value:function(){var a=this.state.goInputText;return!a||isNaN(a)?void 0:Number(a)}},{key:"getPageSizeOptions",value:function(){var a=this.props,o=a.pageSize,s=a.pageSizeOptions;return s.some(function(l){return l.toString()===o.toString()})?s:s.concat([o.toString()]).sort(function(l,u){var c=isNaN(Number(l))?0:Number(l),d=isNaN(Number(u))?0:Number(u);return c-d})}},{key:"render",value:function(){var a=this,o=this.props,s=o.pageSize,l=o.locale,u=o.rootPrefixCls,c=o.changeSize,d=o.quickGo,f=o.goButton,v=o.selectComponentClass,m=o.buildOptionText,p=o.selectPrefixCls,g=o.disabled,y=this.state.goInputText,b="".concat(u,"-options"),C=v,S=null,P=null,E=null;if(!c&&!d)return null;var w=this.getPageSizeOptions();if(c&&C){var F=w.map(function($,k){return Z.createElement(C.Option,{key:k,value:$.toString()},(m||a.buildOptionText)($))});S=Z.createElement(C,{disabled:g,prefixCls:p,showSearch:!1,className:"".concat(b,"-size-changer"),optionLabelProp:"children",dropdownMatchSelectWidth:!1,value:(s||w[0]).toString(),onChange:this.changeSize,getPopupContainer:function(k){return k.parentNode},"aria-label":l.page_size,defaultOpen:!1},F)}return d&&(f&&(E=typeof f=="boolean"?Z.createElement("button",{type:"button",onClick:this.go,onKeyUp:this.go,disabled:g,className:"".concat(b,"-quick-jumper-button")},l.jump_to_confirm):Z.createElement("span",{onClick:this.go,onKeyUp:this.go},f)),P=Z.createElement("div",{className:"".concat(b,"-quick-jumper")},l.jump_to,Z.createElement("input",{disabled:g,type:"text",value:y,onChange:this.handleChange,onKeyUp:this.go,onBlur:this.handleBlur,"aria-label":l.page}),l.page,E)),Z.createElement("li",{className:"".concat(b)},S,P)}}]),r}(Z.Component);mm.defaultProps={pageSizeOptions:["10","20","50","100"]};const pm={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"};function Es(){}function _c(e){var t=Number(e);return typeof t=="number"&&!isNaN(t)&&isFinite(t)&&Math.floor(t)===t}function hx(e,t,r){return r}function Cr(e,t,r){var n=typeof e>"u"?t.pageSize:e;return Math.floor((r.total-1)/n)+1}var hm=function(e){yn(r,e);var t=bn(r);function r(n){var a;Cn(this,r),a=t.call(this,n),a.getJumpPrevPage=function(){return Math.max(1,a.state.current-(a.props.showLessItems?3:5))},a.getJumpNextPage=function(){return Math.min(Cr(void 0,a.state,a.props),a.state.current+(a.props.showLessItems?3:5))},a.getItemIcon=function(c,d){var f=a.props.prefixCls,v=c||Z.createElement("button",{type:"button","aria-label":d,className:"".concat(f,"-item-link")});return typeof c=="function"&&(v=Z.createElement(c,h({},a.props))),v},a.savePaginationNode=function(c){a.paginationNode=c},a.isValid=function(c){var d=a.props.total;return _c(c)&&c!==a.state.current&&_c(d)&&d>0},a.shouldDisplayQuickJumper=function(){var c=a.props,d=c.showQuickJumper,f=c.total,v=a.state.pageSize;return f<=v?!1:d},a.handleKeyDown=function(c){(c.keyCode===Ur.ARROW_UP||c.keyCode===Ur.ARROW_DOWN)&&c.preventDefault()},a.handleKeyUp=function(c){var d=a.getValidValue(c),f=a.state.currentInputValue;d!==f&&a.setState({currentInputValue:d}),c.keyCode===Ur.ENTER?a.handleChange(d):c.keyCode===Ur.ARROW_UP?a.handleChange(d-1):c.keyCode===Ur.ARROW_DOWN&&a.handleChange(d+1)},a.handleBlur=function(c){var d=a.getValidValue(c);a.handleChange(d)},a.changePageSize=function(c){var d=a.state.current,f=Cr(c,a.state,a.props);d=d>f?f:d,f===0&&(d=a.state.current),typeof c=="number"&&("pageSize"in a.props||a.setState({pageSize:c}),"current"in a.props||a.setState({current:d,currentInputValue:d})),a.props.onShowSizeChange(d,c),"onChange"in a.props&&a.props.onChange&&a.props.onChange(d,c)},a.handleChange=function(c){var d=a.props,f=d.disabled,v=d.onChange,m=a.state,p=m.pageSize,g=m.current,y=m.currentInputValue;if(a.isValid(c)&&!f){var b=Cr(void 0,a.state,a.props),C=c;return c>b?C=b:c<1&&(C=1),"current"in a.props||a.setState({current:C}),C!==y&&a.setState({currentInputValue:C}),v(C,p),C}return g},a.prev=function(){a.hasPrev()&&a.handleChange(a.state.current-1)},a.next=function(){a.hasNext()&&a.handleChange(a.state.current+1)},a.jumpPrev=function(){a.handleChange(a.getJumpPrevPage())},a.jumpNext=function(){a.handleChange(a.getJumpNextPage())},a.hasPrev=function(){return a.state.current>1},a.hasNext=function(){return a.state.current2?f-2:0),m=2;m=s?u=s:u=Number(o),u}},{key:"getShowSizeChanger",value:function(){var a=this.props,o=a.showSizeChanger,s=a.total,l=a.totalBoundaryShowSizeChanger;return typeof o<"u"?o:s>l}},{key:"renderPrev",value:function(a){var o=this.props,s=o.prevIcon,l=o.itemRender,u=l(a,"prev",this.getItemIcon(s,"prev page")),c=!this.hasPrev();return i.isValidElement(u)?i.cloneElement(u,{disabled:c}):u}},{key:"renderNext",value:function(a){var o=this.props,s=o.nextIcon,l=o.itemRender,u=l(a,"next",this.getItemIcon(s,"next page")),c=!this.hasNext();return i.isValidElement(u)?i.cloneElement(u,{disabled:c}):u}},{key:"render",value:function(){var a=this,o=this.props,s=o.prefixCls,l=o.className,u=o.style,c=o.disabled,d=o.hideOnSinglePage,f=o.total,v=o.locale,m=o.showQuickJumper,p=o.showLessItems,g=o.showTitle,y=o.showTotal,b=o.simple,C=o.itemRender,S=o.showPrevNextJumpers,P=o.jumpPrevIcon,E=o.jumpNextIcon,w=o.selectComponentClass,F=o.selectPrefixCls,$=o.pageSizeOptions,k=this.state,O=k.current,D=k.pageSize,R=k.currentInputValue;if(d===!0&&f<=D)return null;var T=Cr(void 0,this.state,this.props),N=[],M=null,I=null,L=null,j=null,_=null,K=m&&m.goButton,z=p?1:2,A=O-1>0?O-1:0,V=O+1f?f:O*D]));if(b)return K&&(typeof K=="boolean"?_=Z.createElement("button",{type:"button",onClick:this.handleGoTO,onKeyUp:this.handleGoTO},v.jump_to_confirm):_=Z.createElement("span",{onClick:this.handleGoTO,onKeyUp:this.handleGoTO},K),_=Z.createElement("li",{title:g?"".concat(v.jump_to).concat(O,"/").concat(T):null,className:"".concat(s,"-simple-pager")},_)),Z.createElement("ul",J({className:ve(s,"".concat(s,"-simple"),B({},"".concat(s,"-disabled"),c),l),style:u,ref:this.savePaginationNode},X),H,Z.createElement("li",{title:g?v.prev_page:null,onClick:this.prev,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterPrev,className:ve("".concat(s,"-prev"),B({},"".concat(s,"-disabled"),!this.hasPrev())),"aria-disabled":!this.hasPrev()},this.renderPrev(A)),Z.createElement("li",{title:g?"".concat(O,"/").concat(T):null,className:"".concat(s,"-simple-pager")},Z.createElement("input",{type:"text",value:R,disabled:c,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onChange:this.handleKeyUp,onBlur:this.handleBlur,size:"3"}),Z.createElement("span",{className:"".concat(s,"-slash")},"/"),T),Z.createElement("li",{title:g?v.next_page:null,onClick:this.next,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterNext,className:ve("".concat(s,"-next"),B({},"".concat(s,"-disabled"),!this.hasNext())),"aria-disabled":!this.hasNext()},this.renderNext(V)),_);if(T<=3+z*2){var Q={locale:v,rootPrefixCls:s,onClick:this.handleChange,onKeyPress:this.runIfEnter,showTitle:g,itemRender:C};T||N.push(Z.createElement(ao,J({},Q,{key:"noPager",page:1,className:"".concat(s,"-item-disabled")})));for(var Y=1;Y<=T;Y+=1){var ae=O===Y;N.push(Z.createElement(ao,J({},Q,{key:Y,page:Y,active:ae})))}}else{var q=p?v.prev_3:v.prev_5,ne=p?v.next_3:v.next_5;S&&(M=Z.createElement("li",{title:g?q:null,key:"prev",onClick:this.jumpPrev,tabIndex:"0",onKeyPress:this.runIfEnterJumpPrev,className:ve("".concat(s,"-jump-prev"),B({},"".concat(s,"-jump-prev-custom-icon"),!!P))},C(this.getJumpPrevPage(),"jump-prev",this.getItemIcon(P,"prev page"))),I=Z.createElement("li",{title:g?ne:null,key:"next",tabIndex:"0",onClick:this.jumpNext,onKeyPress:this.runIfEnterJumpNext,className:ve("".concat(s,"-jump-next"),B({},"".concat(s,"-jump-next-custom-icon"),!!E))},C(this.getJumpNextPage(),"jump-next",this.getItemIcon(E,"next page")))),j=Z.createElement(ao,{locale:v,last:!0,rootPrefixCls:s,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:T,page:T,active:!1,showTitle:g,itemRender:C}),L=Z.createElement(ao,{locale:v,rootPrefixCls:s,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:1,page:1,active:!1,showTitle:g,itemRender:C});var ue=Math.max(1,O-z),G=Math.min(O+z,T);O-1<=z&&(G=1+z*2),T-O<=z&&(ue=T-z*2);for(var te=ue;te<=G;te+=1){var ee=O===te;N.push(Z.createElement(ao,{locale:v,rootPrefixCls:s,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:te,page:te,active:ee,showTitle:g,itemRender:C}))}O-1>=z*2&&O!==1+2&&(N[0]=i.cloneElement(N[0],{className:"".concat(s,"-item-after-jump-prev")}),N.unshift(M)),T-O>=z*2&&O!==T-2&&(N[N.length-1]=i.cloneElement(N[N.length-1],{className:"".concat(s,"-item-before-jump-next")}),N.push(I)),ue!==1&&N.unshift(L),G!==T&&N.push(j)}var le=!this.hasPrev()||!T,re=!this.hasNext()||!T;return Z.createElement("ul",J({className:ve(s,l,B({},"".concat(s,"-disabled"),c)),style:u,ref:this.savePaginationNode},X),H,Z.createElement("li",{title:g?v.prev_page:null,onClick:this.prev,tabIndex:le?null:0,onKeyPress:this.runIfEnterPrev,className:ve("".concat(s,"-prev"),B({},"".concat(s,"-disabled"),le)),"aria-disabled":le},this.renderPrev(A)),N,Z.createElement("li",{title:g?v.next_page:null,onClick:this.next,tabIndex:re?null:0,onKeyPress:this.runIfEnterNext,className:ve("".concat(s,"-next"),B({},"".concat(s,"-disabled"),re)),"aria-disabled":re},this.renderNext(V)),Z.createElement(mm,{disabled:c,locale:v,rootPrefixCls:s,selectComponentClass:w,selectPrefixCls:F,changeSize:this.getShowSizeChanger()?this.changePageSize:null,current:O,pageSize:D,pageSizeOptions:$,quickGo:this.shouldDisplayQuickJumper()?this.handleChange:null,goButton:K}))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var s={};if("current"in a&&(s.current=a.current,a.current!==o.current&&(s.currentInputValue=s.current)),"pageSize"in a&&a.pageSize!==o.pageSize){var l=o.current,u=Cr(a.pageSize,o,a);l=l>u?u:l,"current"in a||(s.current=l,s.currentInputValue=l),s.pageSize=a.pageSize}return s}}]),r}(Z.Component);hm.defaultProps={defaultCurrent:1,total:0,defaultPageSize:10,onChange:Es,className:"",selectPrefixCls:"rc-select",prefixCls:"rc-pagination",selectComponentClass:null,hideOnSinglePage:!1,showPrevNextJumpers:!0,showQuickJumper:!1,showLessItems:!1,showTitle:!0,onShowSizeChange:Es,locale:pm,style:{},itemRender:hx,totalBoundaryShowSizeChanger:50};var gm=function(t){return i.createElement($r,J({},t,{size:"small"}))},ym=function(t){return i.createElement($r,J({},t,{size:"middle"}))};gm.Option=$r.Option;ym.Option=$r.Option;var gx=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(e);a=d&&lv?"true":"false","aria-posinset":v+1,"aria-setsize":m,tabIndex:u?-1:0},Z.createElement("div",{className:"".concat(c,"-first")},g),Z.createElement("div",{className:"".concat(c,"-second")},g)));return f&&(y=f(y,this.props)),y}}]),r}(Z.Component);function jc(){}var bm=function(e){yn(r,e);var t=bn(r);function r(n){var a;Cn(this,r),a=t.call(this,n),a.stars=void 0,a.rate=void 0,a.onHover=function(s,l){var u=a.props.onHoverChange,c=a.getStarValue(l,s.pageX),d=a.state.cleanedValue;c!==d&&a.setState({hoverValue:c,cleanedValue:null}),u(c)},a.onMouseLeave=function(){var s=a.props.onHoverChange;a.setState({hoverValue:void 0,cleanedValue:null}),s(void 0)},a.onClick=function(s,l){var u=a.props.allowClear,c=a.state.value,d=a.getStarValue(l,s.pageX),f=!1;u&&(f=d===c),a.onMouseLeave(),a.changeValue(f?0:d),a.setState({cleanedValue:f?d:null})},a.onFocus=function(){var s=a.props.onFocus;a.setState({focused:!0}),s&&s()},a.onBlur=function(){var s=a.props.onBlur;a.setState({focused:!1}),s&&s()},a.onKeyDown=function(s){var l=s.keyCode,u=a.props,c=u.count,d=u.allowHalf,f=u.onKeyDown,v=u.direction,m=v==="rtl",p=a.state.value;l===Be.RIGHT&&p0&&!m||l===Be.RIGHT&&p>0&&m?(d?p-=.5:p-=1,a.changeValue(p),s.preventDefault()):l===Be.LEFT&&pm/2||!c&&o-v=r}function Qx(e){return e&&He(e)==="object"&&!Array.isArray(e)&&!i.isValidElement(e)}function Jx(e){return typeof e=="string"?!0:eg(e)}var e2=function(t){var r=t.ellipsis,n=t.rowType,a=t.children,o,s=r===!0?{showTitle:!0}:r;return s&&(s.showTitle||n==="header")&&(typeof a=="string"||typeof a=="number"?o=a.toString():i.isValidElement(a)&&typeof a.props.children=="string"&&(o=a.props.children)),o};function t2(e,t){var r,n,a,o=e.prefixCls,s=e.className,l=e.record,u=e.index,c=e.renderIndex,d=e.dataIndex,f=e.render,v=e.children,m=e.component,p=m===void 0?"td":m,g=e.colSpan,y=e.rowSpan,b=e.fixLeft,C=e.fixRight,S=e.firstFixLeft,P=e.lastFixLeft,E=e.firstFixRight,w=e.lastFixRight,F=e.appendNode,$=e.additionalProps,k=$===void 0?{}:$,O=e.ellipsis,D=e.align,R=e.rowType,T=e.isSticky,N=e.hovering,M=e.onHover,I="".concat(o,"-cell"),L=i.useContext(km),j=i.useContext(Pm),_=i.useContext(bl),K=_.allColumnsFixedLeft,z=i.useMemo(function(){if(ks(v))return[v];var ie=wm(l,d),se=ie,pe=void 0;if(f){var Ce=f(ie,l,c);Qx(Ce)?(se=Ce.children,pe=Ce.props,L.renderWithProps=!0):se=Ce}return[se,pe]},[L.renderWithProps?Math.random():0,v,d,L,l,f,c]),A=U(z,2),V=A[0],X=A[1],H=V;He(H)==="object"&&!Array.isArray(H)&&!i.isValidElement(H)&&(H=null),O&&(P||E)&&(H=i.createElement("span",{className:"".concat(I,"-content")},H));var Q=X||{},Y=Q.colSpan,ae=Q.rowSpan,q=Q.style,ne=Q.className,ue=ze(Q,Xx),G=(r=Y!==void 0?Y:g)!==null&&r!==void 0?r:1,te=(n=ae!==void 0?ae:y)!==null&&n!==void 0?n:1;if(G===0||te===0)return null;var ee={},le=typeof b=="number"&&j,re=typeof C=="number"&&j;le&&(ee.position="sticky",ee.left=b),re&&(ee.position="sticky",ee.right=C);var ge={};D&&(ge.textAlign=D);var Ee=function(se){var pe;l&&M(u,u+te-1),k==null||(pe=k.onMouseEnter)===null||pe===void 0||pe.call(k,se)},me=function(se){var pe;l&&M(-1,-1),k==null||(pe=k.onMouseLeave)===null||pe===void 0||pe.call(k,se)},ce=e2({rowType:R,ellipsis:O,children:V}),fe=h(h(h({title:ce},ue),k),{},{colSpan:G!==1?G:null,rowSpan:te!==1?te:null,className:ve(I,s,(a={},B(a,"".concat(I,"-fix-left"),le&&j),B(a,"".concat(I,"-fix-left-first"),S&&j),B(a,"".concat(I,"-fix-left-last"),P&&j),B(a,"".concat(I,"-fix-left-all"),P&&K&&j),B(a,"".concat(I,"-fix-right"),re&&j),B(a,"".concat(I,"-fix-right-first"),E&&j),B(a,"".concat(I,"-fix-right-last"),w&&j),B(a,"".concat(I,"-ellipsis"),O),B(a,"".concat(I,"-with-append"),F),B(a,"".concat(I,"-fix-sticky"),(le||re)&&T&&j),B(a,"".concat(I,"-row-hover"),!X&&N),a),k.className,ne),style:h(h(h(h({},k.style),ge),ee),q),onMouseEnter:Ee,onMouseLeave:me,ref:Jx(p)?t:null});return i.createElement(p,fe,F,H)}var Rm=i.forwardRef(t2);Rm.displayName="Cell";var n2=["expanded","className","hovering"],r2=i.memo(Rm,function(e,t){return t.shouldCellUpdate?n2.every(function(r){return e[r]===t[r]})&&!t.shouldCellUpdate(t.record,e.record):yu(e,t)}),Ho=i.forwardRef(function(e,t){var r=e.index,n=e.additionalProps,a=n===void 0?{}:n,o=e.colSpan,s=e.rowSpan,l=a.colSpan,u=a.rowSpan,c=o??l,d=s??u,f=qx(Em,function(p){var g=Zx(r,d||1,p==null?void 0:p.startRow,p==null?void 0:p.endRow);return{onHover:p==null?void 0:p.onHover,hovering:g}}),v=f.onHover,m=f.hovering;return i.createElement(r2,J({},e,{colSpan:c,rowSpan:d,hovering:m,ref:t,onHover:v}))});Ho.displayName="WrappedCell";var Gn=i.createContext(null);function Ru(e,t,r,n,a){var o=r[e]||{},s=r[t]||{},l,u;o.fixed==="left"?l=n.left[e]:s.fixed==="right"&&(u=n.right[t]);var c=!1,d=!1,f=!1,v=!1,m=r[t+1],p=r[e-1];if(a==="rtl"){if(l!==void 0){var g=p&&p.fixed==="left";v=!g}else if(u!==void 0){var y=m&&m.fixed==="right";f=!y}}else if(l!==void 0){var b=m&&m.fixed==="left";c=!b}else if(u!==void 0){var C=p&&p.fixed==="right";d=!C}return{fixLeft:l,fixRight:u,lastFixLeft:c,firstFixRight:d,lastFixRight:f,firstFixLeft:v,isSticky:n.isSticky}}function Mm(e){var t=e.cells,r=e.stickyOffsets,n=e.flattenColumns,a=e.rowComponent,o=e.cellComponent,s=e.onHeaderRow,l=e.index,u=i.useContext(Gn),c=u.prefixCls,d=u.direction,f;s&&(f=s(t.map(function(m){return m.column}),l));var v=yl(t.map(function(m){return m.column}));return i.createElement(a,f,t.map(function(m,p){var g=m.column,y=Ru(m.colStart,m.colEnd,n,r,d),b;return g&&g.onHeaderCell&&(b=m.column.onHeaderCell(g)),i.createElement(Ho,J({},m,{ellipsis:g.ellipsis,align:g.align,component:o,prefixCls:c,key:v[p]},y,{additionalProps:b,rowType:"header"}))}))}Mm.displayName="HeaderRow";function a2(e){var t=[];function r(s,l){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;t[u]=t[u]||[];var c=l,d=s.filter(Boolean).map(function(f){var v={key:f.key,className:f.className||"",children:f.title,column:f,colStart:c},m=1,p=f.children;return p&&p.length>0&&(m=r(p,c,u+1).reduce(function(g,y){return g+y},0),v.hasSubColumns=!0),"colSpan"in f&&(m=f.colSpan),"rowSpan"in f&&(v.rowSpan=f.rowSpan),v.colSpan=m,v.colEnd=v.colStart+m-1,t[u].push(v),c+=m,m});return d}r(e,0);for(var n=t.length,a=function(l){t[l].forEach(function(u){!("rowSpan"in u)&&!u.hasSubColumns&&(u.rowSpan=n-l)})},o=0;o1?le-1:0),ge=1;ge0?[].concat(Ke(t),Ke(Rs(o).map(function(s){return h({fixed:a},s)}))):[].concat(Ke(t),[h(h({},r),{},{fixed:a})])},[])}function v2(e){return e.map(function(t){var r=t.fixed,n=ze(t,f2),a=r;return r==="left"?a="right":r==="right"&&(a="left"),h({fixed:a},n)})}function m2(e,t){var r=e.prefixCls,n=e.columns,a=e.children,o=e.expandable,s=e.expandedKeys,l=e.columnTitle,u=e.getRowKey,c=e.onTriggerExpand,d=e.expandIcon,f=e.rowExpandable,v=e.expandIconColumnIndex,m=e.direction,p=e.expandRowByClick,g=e.columnWidth,y=e.fixed,b=i.useMemo(function(){return n||Mu(a)},[n,a]),C=i.useMemo(function(){if(o){var E,w=b.slice();if(!w.includes(Yr)){var F=v||0;F>=0&&w.splice(F,0,Yr)}var $=w.indexOf(Yr);w=w.filter(function(R,T){return R!==Yr||T===$});var k=b[$],O;(y==="left"||y)&&!v?O="left":(y==="right"||y)&&v===b.length?O="right":O=k?k.fixed:null;var D=(E={},B(E,go,{className:"".concat(r,"-expand-icon-col"),columnType:"EXPAND_COLUMN"}),B(E,"title",l),B(E,"fixed",O),B(E,"className","".concat(r,"-row-expand-icon-cell")),B(E,"width",g),B(E,"render",function(T,N,M){var I=u(N,M),L=s.has(I),j=f?f(N):!0,_=d({prefixCls:r,expanded:L,expandable:j,record:N,onExpand:c});return p?i.createElement("span",{onClick:function(z){return z.stopPropagation()}},_):_}),E);return w.map(function(R){return R===Yr?D:R})}return b.filter(function(R){return R!==Yr})},[o,b,u,s,d,m]),S=i.useMemo(function(){var E=C;return t&&(E=t(E)),E.length||(E=[{render:function(){return null}}]),E},[t,C,m]),P=i.useMemo(function(){return m==="rtl"?v2(Rs(S)):Rs(S)},[S,m]);return[S,P]}function Im(e){var t=i.useRef(e),r=i.useState({}),n=U(r,2),a=n[1],o=i.useRef(null),s=i.useRef([]);function l(u){s.current.push(u);var c=Promise.resolve();o.current=c,c.then(function(){if(o.current===c){var d=s.current,f=t.current;s.current=[],d.forEach(function(v){t.current=v(t.current)}),o.current=null,f!==t.current&&a({})}})}return i.useEffect(function(){return function(){o.current=null}},[]),[t.current,l]}function p2(e){var t=i.useRef(e||null),r=i.useRef();function n(){window.clearTimeout(r.current)}function a(s){t.current=s,n(),r.current=window.setTimeout(function(){t.current=null,r.current=void 0},100)}function o(){return t.current}return i.useEffect(function(){return n},[]),[a,o]}function h2(e,t,r){var n=i.useMemo(function(){for(var a=[],o=[],s=0,l=0,u=0;u=0;l-=1){var u=t[l],c=r&&r[l],d=c&&c[go];if(u||d||s){var f=d||{};f.columnType;var v=ze(f,g2);a.unshift(i.createElement("col",J({key:l,style:{width:u}},v))),s=!0}}return i.createElement("colgroup",null,a)}function Bc(e){var t=e.className,r=e.children;return i.createElement("div",{className:t},r)}var Lm=i.createContext({});function y2(e){var t=e.className,r=e.index,n=e.children,a=e.colSpan,o=a===void 0?1:a,s=e.rowSpan,l=e.align,u=i.useContext(Gn),c=u.prefixCls,d=u.direction,f=i.useContext(Lm),v=f.scrollColumnIndex,m=f.stickyOffsets,p=f.flattenColumns,g=r+o-1,y=g+1===v?o+1:o,b=Ru(r,r+y-1,p,m,d);return i.createElement(Ho,J({className:t,index:r,component:"td",prefixCls:c,record:null,dataIndex:null,align:l,colSpan:y,rowSpan:s,render:function(){return n}},b))}var b2=["children"];function C2(e){var t=e.children,r=ze(e,b2);return i.createElement("tr",r,t)}function Cl(e){var t=e.children;return t}Cl.Row=C2;Cl.Cell=y2;function wi(e){var t=e.children,r=e.stickyOffsets,n=e.flattenColumns,a=i.useContext(Gn),o=a.prefixCls,s=n.length-1,l=n[s],u=i.useMemo(function(){return{stickyOffsets:r,flattenColumns:n,scrollColumnIndex:l!=null&&l.scrollbar?s:null}},[l,n,s,r]);return i.createElement(Lm.Provider,{value:u},i.createElement("tfoot",{className:"".concat(o,"-summary")},t))}var jm=Cl;function x2(e){var t,r=e.prefixCls,n=e.record,a=e.onExpand,o=e.expanded,s=e.expandable,l="".concat(r,"-row-expand-icon");if(!s)return i.createElement("span",{className:ve(l,"".concat(r,"-row-spaced"))});var u=function(d){a(n,d),d.stopPropagation()};return i.createElement("span",{className:ve(l,(t={},B(t,"".concat(r,"-row-expanded"),o),B(t,"".concat(r,"-row-collapsed"),!o),t)),onClick:u})}function S2(e,t,r){var n=[];function a(o){(o||[]).forEach(function(s,l){n.push(t(s,l)),a(s[r])})}return a(e),n}var w2=function(t,r){var n,a,o=t.scrollBodyRef,s=t.onScroll,l=t.offsetScroll,u=t.container,c=i.useContext(Gn),d=c.prefixCls,f=((n=o.current)===null||n===void 0?void 0:n.scrollWidth)||0,v=((a=o.current)===null||a===void 0?void 0:a.clientWidth)||0,m=f&&v*(v/f),p=i.useRef(),g=Im({scrollLeft:0,isHiddenScrollBar:!1}),y=U(g,2),b=y[0],C=y[1],S=i.useRef({delta:0,x:0}),P=i.useState(!1),E=U(P,2),w=E[0],F=E[1],$=function(){F(!1)},k=function(N){N.persist(),S.current.delta=N.pageX-b.scrollLeft,S.current.x=0,F(!0),N.preventDefault()},O=function(N){var M,I=N||((M=window)===null||M===void 0?void 0:M.event),L=I.buttons;if(!w||L===0){w&&F(!1);return}var j=S.current.x+N.pageX-S.current.x-S.current.delta;j<=0&&(j=0),j+m>=v&&(j=v-m),s({scrollLeft:j/v*(f+2)}),S.current.x=N.pageX},D=function(){if(o.current){var N=Ps(o.current).top,M=N+o.current.offsetHeight,I=u===window?document.documentElement.scrollTop+window.innerHeight:Ps(u).top+u.clientHeight;M-cc()<=I||N>=I-l?C(function(L){return h(h({},L),{},{isHiddenScrollBar:!0})}):C(function(L){return h(h({},L),{},{isHiddenScrollBar:!1})})}},R=function(N){C(function(M){return h(h({},M),{},{scrollLeft:N/f*v||0})})};return i.useImperativeHandle(r,function(){return{setScrollLeft:R}}),i.useEffect(function(){var T=rr(document.body,"mouseup",$,!1),N=rr(document.body,"mousemove",O,!1);return D(),function(){T.remove(),N.remove()}},[m,w]),i.useEffect(function(){var T=rr(u,"scroll",D,!1),N=rr(window,"resize",D,!1);return function(){T.remove(),N.remove()}},[u]),i.useEffect(function(){b.isHiddenScrollBar||C(function(T){var N=o.current;return N?h(h({},T),{},{scrollLeft:N.scrollLeft/N.scrollWidth*N.clientWidth}):T})},[b.isHiddenScrollBar]),f<=v||!m||b.isHiddenScrollBar?null:i.createElement("div",{style:{height:cc(),width:v,bottom:l},className:"".concat(d,"-sticky-scroll")},i.createElement("div",{onMouseDown:k,ref:p,className:ve("".concat(d,"-sticky-scroll-bar"),B({},"".concat(d,"-sticky-scroll-bar-active"),w)),style:{width:"".concat(m,"px"),transform:"translate3d(".concat(b.scrollLeft,"px, 0, 0)")}}))};const P2=i.forwardRef(w2);var Hc=Xf()?window:null;function E2(e,t){var r=He(e)==="object"?e:{},n=r.offsetHeader,a=n===void 0?0:n,o=r.offsetSummary,s=o===void 0?0:o,l=r.offsetScroll,u=l===void 0?0:l,c=r.getContainer,d=c===void 0?function(){return Hc}:c,f=d()||Hc;return i.useMemo(function(){var v=!!e;return{isSticky:v,stickyClassName:v?"".concat(t,"-sticky-holder"):"",offsetHeader:a,offsetSummary:s,offsetScroll:u,container:f}},[u,a,s,t,f])}var k2=["className","noData","columns","flattenColumns","colWidths","columCount","stickyOffsets","direction","fixHeader","stickyTopOffset","stickyBottomOffset","stickyClassName","onScroll","maxContentScroll","children"];function R2(e,t){return i.useMemo(function(){for(var r=[],n=0;n=0})},[o]),O=o[o.length-1],D={fixed:O?O.fixed:null,scrollbar:!0,onHeaderCell:function(){return{className:"".concat(S,"-cell-scrollbar")}}},R=i.useMemo(function(){return w?[].concat(Ke(a),[D]):a},[w,a]),T=i.useMemo(function(){return w?[].concat(Ke(o),[D]):o},[w,o]),N=i.useMemo(function(){var I=u.right,L=u.left;return h(h({},u),{},{left:c==="rtl"?[].concat(Ke(L.map(function(j){return j+w})),[0]):L,right:c==="rtl"?I:[].concat(Ke(I.map(function(j){return j+w})),[0]),isSticky:E})},[w,u,E]),M=R2(s,l);return i.createElement("div",{style:h({overflow:"hidden"},E?{top:f,bottom:v}:{}),ref:$,className:ve(r,B({},m,!!m))},i.createElement("table",{style:{tableLayout:"fixed",visibility:n||M?null:"hidden"}},(!n||!g||k)&&i.createElement(_m,{colWidths:M?[].concat(Ke(M),[w]):[],columCount:l+1,columns:T}),y(h(h({},b),{},{stickyOffsets:N,columns:R,flattenColumns:T}))))});Ms.displayName="FixedHolder";var M2=[],T2={},Di="rc-table-internal-hook",F2=i.memo(function(e){var t=e.children;return t},function(e,t){return yu(e.props,t.props)?e.pingLeft!==t.pingLeft||e.pingRight!==t.pingRight:!1});function la(e){var t,r=e.prefixCls,n=e.className,a=e.rowClassName,o=e.style,s=e.data,l=e.rowKey,u=e.scroll,c=e.tableLayout,d=e.direction,f=e.title,v=e.footer,m=e.summary,p=e.id,g=e.showHeader,y=e.components,b=e.emptyText,C=e.onRow,S=e.onHeaderRow,P=e.internalHooks,E=e.transformColumns,w=e.internalRefs,F=e.sticky,$=s||M2,k=!!$.length,O=i.useCallback(function(yt,Ct){return wm(y||{},yt)||Ct},[y]),D=i.useMemo(function(){return typeof l=="function"?l:function(yt){var Ct=yt&&yt[l];return Ct}},[l]),R=c2(e),T=R.expandIcon,N=R.expandedRowKeys,M=R.defaultExpandedRowKeys,I=R.defaultExpandAllRows,L=R.expandedRowRender,j=R.columnTitle,_=R.onExpand,K=R.onExpandedRowsChange,z=R.expandRowByClick,A=R.rowExpandable,V=R.expandIconColumnIndex,X=R.expandedRowClassName,H=R.childrenColumnName,Q=R.indentSize,Y=T||x2,ae=H||"children",q=i.useMemo(function(){return L?"row":e.expandable&&P===Di&&e.expandable.__PARENT_RENDER_ICON__||$.some(function(yt){return yt&&He(yt)==="object"&&yt[ae]})?"nest":!1},[!!L,$]),ne=i.useState(function(){return M||(I?S2($,D,ae):[])}),ue=U(ne,2),G=ue[0],te=ue[1],ee=i.useMemo(function(){return new Set(N||G||[])},[N,G]),le=i.useCallback(function(yt){var Ct=D(yt,$.indexOf(yt)),_t,Qt=ee.has(Ct);Qt?(ee.delete(Ct),_t=Ke(ee)):_t=[].concat(Ke(ee),[Ct]),te(_t),_&&_(!Qt,yt),K&&K(_t)},[D,ee,$,_,K]),re=i.useState(0),ge=U(re,2),Ee=ge[0],me=ge[1],ce=m2(h(h(h({},e),R),{},{expandable:!!L,columnTitle:j,expandedKeys:ee,getRowKey:D,onTriggerExpand:le,expandIcon:Y,expandIconColumnIndex:V,direction:d}),P===Di?E:null),fe=U(ce,2),ie=fe[0],se=fe[1],pe=i.useMemo(function(){return{columns:ie,flattenColumns:se}},[ie,se]),Ce=i.useRef(),Re=i.useRef(),Fe=i.useRef(),Se=i.useRef(),ke=i.useRef(),Pe=i.useState(!1),Qe=U(Pe,2),et=Qe[0],vt=Qe[1],ct=i.useState(!1),ht=U(ct,2),Ge=ht[0],_e=ht[1],mt=Im(new Map),tt=U(mt,2),we=tt[0],We=tt[1],Te=yl(se),Le=Te.map(function(yt){return we.get(yt)}),ye=i.useMemo(function(){return Le},[Le.join("_")]),de=h2(ye,se.length,d),be=u&&ks(u.y),Me=u&&ks(u.x)||!!R.fixed,Ye=Me&&se.some(function(yt){var Ct=yt.fixed;return Ct}),lt=i.useRef(),$e=E2(F,r),xe=$e.isSticky,Je=$e.offsetHeader,dt=$e.offsetSummary,ut=$e.offsetScroll,$t=$e.stickyClassName,Dt=$e.container,Rt=m==null?void 0:m($),Ft=(be||xe)&&i.isValidElement(Rt)&&Rt.type===Cl&&Rt.props.fixed,nt,ot,ft;be&&(ot={overflowY:"scroll",maxHeight:u.y}),Me&&(nt={overflowX:"auto"},be||(ot={overflowY:"hidden"}),ft={width:(u==null?void 0:u.x)===!0?"auto":u==null?void 0:u.x,minWidth:"100%"});var it=i.useCallback(function(yt,Ct){hv(Ce.current)&&We(function(_t){if(_t.get(yt)!==Ct){var Qt=new Map(_t);return Qt.set(yt,Ct),Qt}return _t})},[]),Ze=p2(null),Xe=U(Ze,2),Ne=Xe[0],je=Xe[1];function Ie(yt,Ct){Ct&&(typeof Ct=="function"?Ct(yt):Ct.scrollLeft!==yt&&(Ct.scrollLeft=yt))}var De=function(Ct){var _t=Ct.currentTarget,Qt=Ct.scrollLeft,Za=d==="rtl",cn=typeof Qt=="number"?Qt:_t.scrollLeft,pr=_t||T2;if(!je()||je()===pr){var hr;Ne(pr),Ie(cn,Re.current),Ie(cn,Fe.current),Ie(cn,ke.current),Ie(cn,(hr=lt.current)===null||hr===void 0?void 0:hr.setScrollLeft)}if(_t){var Vr=_t.scrollWidth,gr=_t.clientWidth;if(Vr===gr){vt(!1),_e(!1);return}Za?(vt(-cn0)):(vt(cn>0),_e(cnl))return!1;var c=o.get(e),d=o.get(t);if(c&&d)return c==t&&d==e;var f=-1,v=!0,m=r&bS?new pS:void 0;for(o.set(e,t),o.set(t,e);++f0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=e.length,n=t.length;if(Math.abs(r-n)!==1)return{add:!1,key:null};function a(o,s){var l=new Map;o.forEach(function(c){l.set(c,!0)});var u=s.filter(function(c){return!l.has(c)});return u.length===1?u[0]:null}return r ").concat(t);return t}var Zm=i.forwardRef(function(e,t){var r=e.prefixCls,n=e.data;e.selectable,e.checkable;var a=e.expandedKeys,o=e.selectedKeys,s=e.checkedKeys,l=e.loadedKeys,u=e.loadingKeys,c=e.halfCheckedKeys,d=e.keyEntities,f=e.disabled,v=e.dragging,m=e.dragOverNodeKey,p=e.dropPosition,g=e.motion,y=e.height,b=e.itemHeight,C=e.virtual,S=e.focusable,P=e.activeItem,E=e.focused,w=e.tabIndex,F=e.onKeyDown,$=e.onFocus,k=e.onBlur,O=e.onActiveChange,D=e.onListChangeStart,R=e.onListChangeEnd,T=ze(e,vw),N=i.useRef(null),M=i.useRef(null);i.useImperativeHandle(t,function(){return{scrollTo:function(fe){N.current.scrollTo(fe)},getIndentWidth:function(){return M.current.offsetWidth}}});var I=i.useState(a),L=U(I,2),j=L[0],_=L[1],K=i.useState(n),z=U(K,2),A=z[0],V=z[1],X=i.useState(n),H=U(X,2),Q=H[0],Y=H[1],ae=i.useState([]),q=U(ae,2),ne=q[0],ue=q[1],G=i.useState(null),te=U(G,2),ee=te[0],le=te[1],re=i.useRef(n);re.current=n;function ge(){var ce=re.current;V(ce),Y(ce),ue([]),le(null),R()}Er(function(){_(a);var ce=fw(j,a);if(ce.key!==null)if(ce.add){var fe=A.findIndex(function(Fe){var Se=Fe.key;return Se===ce.key}),ie=hd(vd(A,n,ce.key),C,y,b),se=A.slice();se.splice(fe+1,0,pd),Y(se),ue(ie),le("show")}else{var pe=n.findIndex(function(Fe){var Se=Fe.key;return Se===ce.key}),Ce=hd(vd(n,A,ce.key),C,y,b),Re=n.slice();Re.splice(pe+1,0,pd),Y(Re),ue(Ce),le("hide")}else A!==n&&(V(n),Y(n))},[a,n]),i.useEffect(function(){v||ge()},[v]);var Ee=g?Q:n,me={expandedKeys:a,selectedKeys:o,loadedKeys:l,loadingKeys:u,checkedKeys:s,halfCheckedKeys:c,dragOverNodeKey:m,dropPosition:p,keyEntities:d};return i.createElement(i.Fragment,null,E&&P&&i.createElement("span",{style:md,"aria-live":"assertive"},pw(P)),i.createElement("div",null,i.createElement("input",{style:md,disabled:S===!1||f,tabIndex:S!==!1?w:null,onKeyDown:F,onFocus:$,onBlur:k,value:"",onChange:mw,"aria-label":"for screen reader"})),i.createElement("div",{className:"".concat(r,"-treenode"),"aria-hidden":!0,style:{position:"absolute",pointerEvents:"none",visibility:"hidden",height:0,overflow:"hidden",border:0,padding:0}},i.createElement("div",{className:"".concat(r,"-indent")},i.createElement("div",{ref:M,className:"".concat(r,"-indent-unit")}))),i.createElement(kg,J({},T,{data:Ee,itemKey:gd,height:y,fullHeight:!1,virtual:C,itemHeight:b,prefixCls:"".concat(r,"-list"),ref:N,onVisibleChange:function(fe,ie){var se=new Set(fe),pe=ie.filter(function(Ce){return!se.has(Ce)});pe.some(function(Ce){return gd(Ce)===ra})&&ge()}}),function(ce){var fe=ce.pos,ie=J({},(Gm(ce.data),ce.data)),se=ce.title,pe=ce.key,Ce=ce.isStart,Re=ce.isEnd,Fe=Ko(pe,fe);delete ie.key,delete ie.children;var Se=po(Fe,me);return i.createElement(dw,J({},ie,Se,{title:se,active:!!P&&pe===P.key,pos:fe,data:ce.data,isStart:Ce,isEnd:Re,motion:g,motionNodes:pe===ra?ne:null,motionType:ee,onMotionStart:D,onMotionEnd:ge,treeNodeRequiredProps:me,onMouseMove:function(){O(null)}}))}))});Zm.displayName="NodeList";function Vn(e,t){if(!e)return[];var r=e.slice(),n=r.indexOf(t);return n>=0&&r.splice(n,1),r}function tr(e,t){var r=(e||[]).slice();return r.indexOf(t)===-1&&r.push(t),r}function _u(e){return e.split("-")}function hw(e,t){var r=[],n=mn(t,e);function a(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];o.forEach(function(s){var l=s.key,u=s.children;r.push(l),a(u)})}return a(n.children),r}function gw(e){if(e.parent){var t=_u(e.pos);return Number(t[t.length-1])===e.parent.children.length-1}return!1}function yw(e){var t=_u(e.pos);return Number(t[t.length-1])===0}function yd(e,t,r,n,a,o,s,l,u,c){var d,f=e.clientX,v=e.clientY,m=e.target.getBoundingClientRect(),p=m.top,g=m.height,y=(c==="rtl"?-1:1)*(((a==null?void 0:a.x)||0)-f),b=(y-12)/n,C=mn(l,r.props.eventKey);if(v-1.5?o({dragNode:R,dropNode:T,dropPosition:1})?k=1:N=!1:o({dragNode:R,dropNode:T,dropPosition:0})?k=0:o({dragNode:R,dropNode:T,dropPosition:1})?k=1:N=!1:o({dragNode:R,dropNode:T,dropPosition:1})?k=1:N=!1,{dropPosition:k,dropLevelOffset:O,dropTargetKey:C.key,dropTargetPos:C.pos,dragOverNodeKey:$,dropContainerKey:k===0?null:((d=C.parent)===null||d===void 0?void 0:d.key)||null,dropAllowed:N}}function bd(e,t){if(e){var r=t.multiple;return r?e.slice():e.length?[e[0]]:e}}function Gl(e){if(!e)return null;var t;if(Array.isArray(e))t={checkedKeys:e,halfCheckedKeys:void 0};else if(He(e)==="object")t={checkedKeys:e.checked||void 0,halfCheckedKeys:e.halfChecked||void 0};else return on(!1,"`checkedKeys` is not an array or an object"),null;return t}function Is(e,t){var r=new Set;function n(a){if(!r.has(a)){var o=mn(t,a);if(o){r.add(a);var s=o.parent,l=o.node;l.disabled||s&&n(s.key)}}}return(e||[]).forEach(function(a){n(a)}),Ke(r)}var bw=10,kl=function(e){yn(r,e);var t=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),s=0;s2&&arguments[2]!==void 0?arguments[2]:!1,f=n.state,v=f.dragChildrenKeys,m=f.dropPosition,p=f.dropTargetKey,g=f.dropTargetPos,y=f.dropAllowed;if(y){var b=n.props.onDrop;if(n.setState({dragOverNodeKey:null}),n.cleanDragState(),p!==null){var C=h(h({},po(p,n.getTreeNodeRequiredProps())),{},{active:((c=n.getActiveItem())===null||c===void 0?void 0:c.key)===p,data:mn(n.state.keyEntities,p).node}),S=v.indexOf(p)!==-1;on(!S,"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");var P=_u(g),E={event:l,node:Yt(C),dragNode:n.dragNode?Yt(n.dragNode.props):null,dragNodesKeys:[n.dragNode.props.eventKey].concat(v),dropToGap:m!==0,dropPosition:m+Number(P[P.length-1])};d||b==null||b(E),n.dragNode=null}}},n.cleanDragState=function(){var l=n.state.draggingNodeKey;l!==null&&n.setState({draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),n.dragStartMousePosition=null,n.currentMouseOverDroppableNodeKey=null},n.triggerExpandActionExpand=function(l,u){var c=n.state,d=c.expandedKeys,f=c.flattenNodes,v=u.expanded,m=u.key,p=u.isLeaf;if(!(p||l.shiftKey||l.metaKey||l.ctrlKey)){var g=f.filter(function(b){return b.key===m})[0],y=Yt(h(h({},po(m,n.getTreeNodeRequiredProps())),{},{data:g.data}));n.setExpandedKeys(v?Vn(d,m):tr(d,m)),n.onNodeExpand(l,y)}},n.onNodeClick=function(l,u){var c=n.props,d=c.onClick,f=c.expandAction;f==="click"&&n.triggerExpandActionExpand(l,u),d==null||d(l,u)},n.onNodeDoubleClick=function(l,u){var c=n.props,d=c.onDoubleClick,f=c.expandAction;f==="doubleClick"&&n.triggerExpandActionExpand(l,u),d==null||d(l,u)},n.onNodeSelect=function(l,u){var c=n.state.selectedKeys,d=n.state,f=d.keyEntities,v=d.fieldNames,m=n.props,p=m.onSelect,g=m.multiple,y=u.selected,b=u[v.key],C=!y;C?g?c=tr(c,b):c=[b]:c=Vn(c,b);var S=c.map(function(P){var E=mn(f,P);return E?E.node:null}).filter(function(P){return P});n.setUncontrolledState({selectedKeys:c}),p==null||p(c,{event:"select",selected:C,node:u,selectedNodes:S,nativeEvent:l.nativeEvent})},n.onNodeCheck=function(l,u,c){var d=n.state,f=d.keyEntities,v=d.checkedKeys,m=d.halfCheckedKeys,p=n.props,g=p.checkStrictly,y=p.onCheck,b=u.key,C,S={event:"check",node:u,checked:c,nativeEvent:l.nativeEvent};if(g){var P=c?tr(v,b):Vn(v,b),E=Vn(m,b);C={checked:P,halfChecked:E},S.checkedNodes=P.map(function(D){return mn(f,D)}).filter(function(D){return D}).map(function(D){return D.node}),n.setUncontrolledState({checkedKeys:P})}else{var w=En([].concat(Ke(v),[b]),!0,f),F=w.checkedKeys,$=w.halfCheckedKeys;if(!c){var k=new Set(F);k.delete(b);var O=En(Array.from(k),{checked:!1,halfCheckedKeys:$},f);F=O.checkedKeys,$=O.halfCheckedKeys}C=F,S.checkedNodes=[],S.checkedNodesPositions=[],S.halfCheckedKeys=$,F.forEach(function(D){var R=mn(f,D);if(R){var T=R.node,N=R.pos;S.checkedNodes.push(T),S.checkedNodesPositions.push({node:T,pos:N})}}),n.setUncontrolledState({checkedKeys:F},!1,{halfCheckedKeys:$})}y==null||y(C,S)},n.onNodeLoad=function(l){var u=l.key,c=new Promise(function(d,f){n.setState(function(v){var m=v.loadedKeys,p=m===void 0?[]:m,g=v.loadingKeys,y=g===void 0?[]:g,b=n.props,C=b.loadData,S=b.onLoad;if(!C||p.indexOf(u)!==-1||y.indexOf(u)!==-1)return null;var P=C(l);return P.then(function(){var E=n.state.loadedKeys,w=tr(E,u);S==null||S(w,{event:"load",node:l}),n.setUncontrolledState({loadedKeys:w}),n.setState(function(F){return{loadingKeys:Vn(F.loadingKeys,u)}}),d()}).catch(function(E){if(n.setState(function(F){return{loadingKeys:Vn(F.loadingKeys,u)}}),n.loadingRetryTimes[u]=(n.loadingRetryTimes[u]||0)+1,n.loadingRetryTimes[u]>=bw){var w=n.state.loadedKeys;on(!1,"Retry for `loadData` many times but still failed. No more retry."),n.setUncontrolledState({loadedKeys:tr(w,u)}),d()}f(E)}),{loadingKeys:tr(y,u)}})});return c.catch(function(){}),c},n.onNodeMouseEnter=function(l,u){var c=n.props.onMouseEnter;c==null||c({event:l,node:u})},n.onNodeMouseLeave=function(l,u){var c=n.props.onMouseLeave;c==null||c({event:l,node:u})},n.onNodeContextMenu=function(l,u){var c=n.props.onRightClick;c&&(l.preventDefault(),c({event:l,node:u}))},n.onFocus=function(){var l=n.props.onFocus;n.setState({focused:!0});for(var u=arguments.length,c=new Array(u),d=0;d1&&arguments[1]!==void 0?arguments[1]:!1,c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;if(!n.destroyed){var d=!1,f=!0,v={};Object.keys(l).forEach(function(m){if(m in n.props){f=!1;return}d=!0,v[m]=l[m]}),d&&(!u||f)&&n.setState(h(h({},v),c))}},n.scrollTo=function(l){n.listRef.current.scrollTo(l)},n}return xn(r,[{key:"componentDidMount",value:function(){this.destroyed=!1,this.onUpdated()}},{key:"componentDidUpdate",value:function(){this.onUpdated()}},{key:"onUpdated",value:function(){var a=this.props.activeKey;a!==void 0&&a!==this.state.activeKey&&(this.setState({activeKey:a}),a!==null&&this.scrollTo({key:a}))}},{key:"componentWillUnmount",value:function(){window.removeEventListener("dragend",this.onWindowDragEnd),this.destroyed=!0}},{key:"resetDragState",value:function(){this.setState({dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})}},{key:"render",value:function(){var a,o=this.state,s=o.focused,l=o.flattenNodes,u=o.keyEntities,c=o.draggingNodeKey,d=o.activeKey,f=o.dropLevelOffset,v=o.dropContainerKey,m=o.dropTargetKey,p=o.dropPosition,g=o.dragOverNodeKey,y=o.indent,b=this.props,C=b.prefixCls,S=b.className,P=b.style,E=b.showLine,w=b.focusable,F=b.tabIndex,$=F===void 0?0:F,k=b.selectable,O=b.showIcon,D=b.icon,R=b.switcherIcon,T=b.draggable,N=b.checkable,M=b.checkStrictly,I=b.disabled,L=b.motion,j=b.loadData,_=b.filterTreeNode,K=b.height,z=b.itemHeight,A=b.virtual,V=b.titleRender,X=b.dropIndicatorRender,H=b.onContextMenu,Q=b.onScroll,Y=b.direction,ae=b.rootClassName,q=b.rootStyle,ne=gu(this.props,{aria:!0,data:!0}),ue;return T&&(He(T)==="object"?ue=T:typeof T=="function"?ue={nodeDraggable:T}:ue={}),i.createElement(Iu.Provider,{value:{prefixCls:C,selectable:k,showIcon:O,icon:D,switcherIcon:R,draggable:ue,draggingNodeKey:c,checkable:N,checkStrictly:M,disabled:I,keyEntities:u,dropLevelOffset:f,dropContainerKey:v,dropTargetKey:m,dropPosition:p,dragOverNodeKey:g,indent:y,direction:Y,dropIndicatorRender:X,loadData:j,filterTreeNode:_,titleRender:V,onNodeClick:this.onNodeClick,onNodeDoubleClick:this.onNodeDoubleClick,onNodeExpand:this.onNodeExpand,onNodeSelect:this.onNodeSelect,onNodeCheck:this.onNodeCheck,onNodeLoad:this.onNodeLoad,onNodeMouseEnter:this.onNodeMouseEnter,onNodeMouseLeave:this.onNodeMouseLeave,onNodeContextMenu:this.onNodeContextMenu,onNodeDragStart:this.onNodeDragStart,onNodeDragEnter:this.onNodeDragEnter,onNodeDragOver:this.onNodeDragOver,onNodeDragLeave:this.onNodeDragLeave,onNodeDragEnd:this.onNodeDragEnd,onNodeDrop:this.onNodeDrop}},i.createElement("div",{role:"tree",className:ve(C,S,ae,(a={},B(a,"".concat(C,"-show-line"),E),B(a,"".concat(C,"-focused"),s),B(a,"".concat(C,"-active-focused"),d!==null),a)),style:q},i.createElement(Zm,J({ref:this.listRef,prefixCls:C,style:P,data:l,disabled:I,selectable:k,checkable:!!N,motion:L,dragging:c!==null,height:K,itemHeight:z,virtual:A,focusable:w,focused:s,tabIndex:$,activeItem:this.getActiveItem(),onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,onActiveChange:this.onActiveChange,onListChangeStart:this.onListChangeStart,onListChangeEnd:this.onListChangeEnd,onContextMenu:H,onScroll:Q},this.getTreeNodeRequiredProps(),ne))))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var s=o.prevProps,l={prevProps:a};function u(w){return!s&&w in a||s&&s[w]!==a[w]}var c,d=o.fieldNames;if(u("fieldNames")&&(d=Ai(a.fieldNames),l.fieldNames=d),u("treeData")?c=a.treeData:u("children")&&(on(!1,"`children` of Tree is deprecated. Please use `treeData` instead."),c=im(a.children)),c){l.treeData=c;var f=Vo(c,{fieldNames:d});l.keyEntities=h(B({},ra,Xm),f.keyEntities)}var v=l.keyEntities||o.keyEntities;if(u("expandedKeys")||s&&u("autoExpandParent"))l.expandedKeys=a.autoExpandParent||!s&&a.defaultExpandParent?Is(a.expandedKeys,v):a.expandedKeys;else if(!s&&a.defaultExpandAll){var m=h({},v);delete m[ra],l.expandedKeys=Object.keys(m).map(function(w){return m[w].key})}else!s&&a.defaultExpandedKeys&&(l.expandedKeys=a.autoExpandParent||a.defaultExpandParent?Is(a.defaultExpandedKeys,v):a.defaultExpandedKeys);if(l.expandedKeys||delete l.expandedKeys,c||l.expandedKeys){var p=Wl(c||o.treeData,l.expandedKeys||o.expandedKeys,d);l.flattenNodes=p}if(a.selectable&&(u("selectedKeys")?l.selectedKeys=bd(a.selectedKeys,a):!s&&a.defaultSelectedKeys&&(l.selectedKeys=bd(a.defaultSelectedKeys,a))),a.checkable){var g;if(u("checkedKeys")?g=Gl(a.checkedKeys)||{}:!s&&a.defaultCheckedKeys?g=Gl(a.defaultCheckedKeys)||{}:c&&(g=Gl(a.checkedKeys)||{checkedKeys:o.checkedKeys,halfCheckedKeys:o.halfCheckedKeys}),g){var y=g,b=y.checkedKeys,C=b===void 0?[]:b,S=y.halfCheckedKeys,P=S===void 0?[]:S;if(!a.checkStrictly){var E=En(C,!0,v);C=E.checkedKeys,P=E.halfCheckedKeys}l.checkedKeys=C,l.halfCheckedKeys=P}}return u("loadedKeys")&&(l.loadedKeys=a.loadedKeys),l}}]),r}(i.Component);kl.defaultProps={prefixCls:"rc-tree",showLine:!1,showIcon:!0,selectable:!0,multiple:!1,checkable:!1,disabled:!1,checkStrictly:!1,draggable:!1,defaultExpandParent:!0,autoExpandParent:!1,defaultExpandAll:!1,defaultExpandedKeys:[],defaultCheckedKeys:[],defaultSelectedKeys:[],dropIndicatorRender:rw,allowDrop:function(){return!0},expandAction:!1};kl.TreeNode=Ea;var Cd=4;function Cw(e){var t=e.dropPosition,r=e.dropLevelOffset,n=e.prefixCls,a=e.indent,o=e.direction,s=o===void 0?"ltr":o,l=s==="ltr"?"left":"right",u=s==="ltr"?"right":"left",c=B(B({},l,-r*a+Cd),u,0);switch(t){case-1:c.top=-3;break;case 1:c.bottom=-3;break;default:c.bottom=-3,c[l]=a+Cd;break}return Z.createElement("div",{style:c,className:"".concat(n,"-drop-indicator")})}function Qm(e,t,r,n){var a=n.isLeaf,o=n.expanded,s=n.loading;if(s)return i.createElement(La,{className:"".concat(e,"-switcher-loading-icon")});var l;if(r&&He(r)==="object"&&(l=r.showLeafIcon),a){if(!r)return null;if(typeof l!="boolean"&&l){var u=typeof l=="function"?l(n):l,c="".concat(e,"-switcher-line-custom-icon");return lc(u)?xa(u,{className:ve(u.props.className||"",c)}):u}return l?i.createElement(Nv,{className:"".concat(e,"-switcher-line-icon")}):i.createElement("span",{className:"".concat(e,"-switcher-leaf-line")})}var d="".concat(e,"-switcher-icon"),f=typeof t=="function"?t(n):t;return lc(f)?xa(f,{className:ve(f.props.className||"",d)}):f||(r?o?i.createElement(S1,{className:"".concat(e,"-switcher-line-icon")}):i.createElement(R1,{className:"".concat(e,"-switcher-line-icon")}):i.createElement(Gg,{className:d}))}var xw=i.forwardRef(function(e,t){var r=i.useContext(Bt),n=r.getPrefixCls,a=r.direction,o=r.virtual,s=e.prefixCls,l=e.className,u=e.showIcon,c=u===void 0?!1:u,d=e.showLine,f=e.switcherIcon,v=e.blockNode,m=v===void 0?!1:v,p=e.children,g=e.checkable,y=g===void 0?!1:g,b=e.selectable,C=b===void 0?!0:b,S=e.draggable,P=e.motion,E=P===void 0?J(J({},gg),{motionAppear:!1}):P,w=n("tree",s),F=J(J({},e),{checkable:y,selectable:C,showIcon:c,motion:E,blockNode:m,showLine:!!d,dropIndicatorRender:Cw}),$=i.useMemo(function(){if(!S)return!1;var k={};switch(He(S)){case"function":k.nodeDraggable=S;break;case"object":k=J({},S);break}return k.icon!==!1&&(k.icon=k.icon||i.createElement(g1,null)),k},[S]);return i.createElement(kl,J({itemHeight:20,ref:t,virtual:o},F,{prefixCls:w,className:ve(B(B(B(B({},"".concat(w,"-icon-hide"),!c),"".concat(w,"-block-node"),m),"".concat(w,"-unselectable"),!C),"".concat(w,"-rtl"),a==="rtl"),l),direction:a,checkable:y&&i.createElement("span",{className:"".concat(w,"-checkbox-inner")}),selectable:C,switcherIcon:function(O){return Qm(w,f,d,O)},draggable:$}),p)});const Jm=xw;var nr;(function(e){e[e.None=0]="None",e[e.Start=1]="Start",e[e.End=2]="End"})(nr||(nr={}));function Lu(e,t){function r(n){var a=n.key,o=n.children;t(a,n)!==!1&&Lu(o||[],t)}e.forEach(r)}function Sw(e){var t=e.treeData,r=e.expandedKeys,n=e.startKey,a=e.endKey,o=[],s=nr.None;if(n&&n===a)return[n];if(!n||!a)return[];function l(u){return u===n||u===a}return Lu(t,function(u){if(s===nr.End)return!1;if(l(u)){if(o.push(u),s===nr.None)s=nr.Start;else if(s===nr.Start)return s=nr.End,!1}else s===nr.Start&&o.push(u);return r.includes(u)}),o}function ql(e,t){var r=Ke(t),n=[];return Lu(e,function(a,o){var s=r.indexOf(a);return s!==-1&&(n.push(o),r.splice(s,1)),!!r.length}),n}var xd=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(e);a0&&arguments[0]!==void 0?arguments[0]:{confirm:!1,closeDropdown:!1},Pe=ke.confirm,Qe=ke.closeDropdown;Pe&&ue([]),Qe&&R(!1),q(""),j(E?(w||[]).map(function(et){return String(et)}):[])},ee=function(){var ke=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{closeDropdown:!0},Pe=ke.closeDropdown;Pe&&R(!1),ue(L())},le=function(ke){ke&&N!==void 0&&j(Xl(N)),R(ke),!ke&&!a.filterDropdown&&G()},re=ve(B({},"".concat(o,"-menu-without-submenu"),!Nw(a.filters||[]))),ge=function(ke){if(ke.target.checked){var Pe=ba(a==null?void 0:a.filters).map(function(Qe){return String(Qe)});j(Pe)}else j([])},Ee=function Se(ke){var Pe=ke.filters;return(Pe||[]).map(function(Qe,et){var vt=String(Qe.value),ct={title:Qe.text,key:Qe.value!==void 0?vt:String(et)};return Qe.children&&(ct.children=Se({filters:Qe.children})),ct})},me=function Se(ke){var Pe;return J(J({},ke),{text:ke.title,value:ke.key,children:((Pe=ke.children)===null||Pe===void 0?void 0:Pe.map(function(Qe){return Se(Qe)}))||[]})},ce;if(typeof a.filterDropdown=="function")ce=a.filterDropdown({prefixCls:"".concat(o,"-custom"),setSelectedKeys:function(ke){return _({selectedKeys:ke})},selectedKeys:L(),confirm:ee,clearFilters:te,filters:a.filters,visible:T,close:function(){R(!1)}});else if(a.filterDropdown)ce=a.filterDropdown;else{var fe=L()||[],ie=function(){return(a.filters||[]).length===0?i.createElement(fc,{image:fc.PRESENTED_IMAGE_SIMPLE,description:p.filterEmptyText,imageStyle:{height:24},style:{margin:0,padding:"16px 0"}}):c==="tree"?i.createElement(i.Fragment,null,i.createElement(wd,{filterSearch:f,value:ae,onChange:ne,tablePrefixCls:r,locale:p}),i.createElement("div",{className:"".concat(r,"-filter-dropdown-tree")},l?i.createElement(Sa,{checked:fe.length===ba(a.filters).length,indeterminate:fe.length>0&&fe.length0?o:e}),v=Math.ceil((o||e)/f.pageSize);f.current>v&&(f.current=v||1);var m=function(y,b){d({current:y??1,pageSize:b||f.pageSize})},p=function(y,b){var C;t&&((C=t.onChange)===null||C===void 0||C.call(t,y,b)),m(y,b),r(y,b||(f==null?void 0:f.pageSize))};return t===!1?[{},function(){}]:[J(J({},f),{onChange:p}),m]}var xr={},Ls="SELECT_ALL",js="SELECT_INVERT",As="SELECT_NONE",kd=[];function ip(e,t){var r=[];return(e||[]).forEach(function(n){r.push(n),n&&He(n)==="object"&&t in n&&(r=[].concat(Ke(r),Ke(ip(n[t],t))))}),r}function jw(e,t){var r=e||{},n=r.preserveSelectedRowKeys,a=r.selectedRowKeys,o=r.defaultSelectedRowKeys,s=r.getCheckboxProps,l=r.onChange,u=r.onSelect,c=r.onSelectAll,d=r.onSelectInvert,f=r.onSelectNone,v=r.onSelectMultiple,m=r.columnWidth,p=r.type,g=r.selections,y=r.fixed,b=r.renderCell,C=r.hideSelectAll,S=r.checkStrictly,P=S===void 0?!0:S,E=t.prefixCls,w=t.data,F=t.pageData,$=t.getRecordByKey,k=t.getRowKey,O=t.expandType,D=t.childrenColumnName,R=t.locale,T=t.getPopupContainer,N=kt(a||o||kd,{value:a}),M=U(N,2),I=M[0],L=M[1],j=i.useRef(new Map),_=i.useCallback(function(me){if(n){var ce=new Map;me.forEach(function(fe){var ie=$(fe);!ie&&j.current.has(fe)&&(ie=j.current.get(fe)),ce.set(fe,ie)}),j.current=ce}},[$,n]);i.useEffect(function(){_(I)},[I]);var K=i.useMemo(function(){return P?{keyEntities:null}:Vo(w,{externalGetKey:k,childrenPropName:D})},[w,k,P,D]),z=K.keyEntities,A=i.useMemo(function(){return ip(F,D)},[F,D]),V=i.useMemo(function(){var me=new Map;return A.forEach(function(ce,fe){var ie=k(ce,fe),se=(s?s(ce):null)||{};me.set(ie,se)}),me},[A,k,s]),X=i.useCallback(function(me){var ce;return!!(!((ce=V.get(k(me)))===null||ce===void 0)&&ce.disabled)},[V,k]),H=i.useMemo(function(){if(P)return[I||[],[]];var me=En(I,!0,z,X),ce=me.checkedKeys,fe=me.halfCheckedKeys;return[ce||[],fe]},[I,P,z,X]),Q=U(H,2),Y=Q[0],ae=Q[1],q=i.useMemo(function(){var me=p==="radio"?Y.slice(0,1):Y;return new Set(me)},[Y,p]),ne=i.useMemo(function(){return p==="radio"?new Set:new Set(ae)},[ae,p]),ue=i.useState(null),G=U(ue,2),te=G[0],ee=G[1];i.useEffect(function(){e||L(kd)},[!!e]);var le=i.useCallback(function(me,ce){var fe,ie;_(me),n?(fe=me,ie=me.map(function(se){return j.current.get(se)})):(fe=[],ie=[],me.forEach(function(se){var pe=$(se);pe!==void 0&&(fe.push(se),ie.push(pe))})),L(fe),l==null||l(fe,ie,{type:ce})},[L,$,l,n]),re=i.useCallback(function(me,ce,fe,ie){if(u){var se=fe.map(function(pe){return $(pe)});u($(me),ce,se,ie)}le(fe,"single")},[u,$,le]),ge=i.useMemo(function(){if(!g||C)return null;var me=g===!0?[Ls,js,As]:g;return me.map(function(ce){return ce===Ls?{key:"all",text:R.selectionAll,onSelect:function(){le(w.map(function(ie,se){return k(ie,se)}).filter(function(ie){var se=V.get(ie);return!(se!=null&&se.disabled)||q.has(ie)}),"all")}}:ce===js?{key:"invert",text:R.selectInvert,onSelect:function(){var ie=new Set(q);F.forEach(function(pe,Ce){var Re=k(pe,Ce),Fe=V.get(Re);Fe!=null&&Fe.disabled||(ie.has(Re)?ie.delete(Re):ie.add(Re))});var se=Array.from(ie);d&&d(se),le(se,"invert")}}:ce===As?{key:"none",text:R.selectNone,onSelect:function(){f==null||f(),le(Array.from(q).filter(function(ie){var se=V.get(ie);return se==null?void 0:se.disabled}),"none")}}:ce}).map(function(ce){return J(J({},ce),{onSelect:function(){for(var ie,se,pe=arguments.length,Ce=new Array(pe),Re=0;Re2&&arguments[2]!==void 0?arguments[2]:!1,Oe=J(J({},fe),je);De&&(fe.resetPagination(),Oe.pagination.current&&(Oe.pagination.current=1),c&&c.onChange&&c.onChange(1,Oe.pagination.pageSize)),k&&k.scrollToFirstRowOnChange!==!1&&re.body.current&&ky(0,{getContainer:function(){return re.body.current}}),b==null||b(Oe.pagination,Oe.filters,Oe.sorter,{currentDataSource:Ed(Vs(Y,Oe.sorterStates,ee),Oe.filterStates),action:Ie})},se=function(je,Ie){ie({sorter:je,sorterStates:Ie},"sort",!1)},pe=Kw({prefixCls:ne,mergedColumns:L,onSorterChange:se,sortDirections:O||["ascend","descend"],tableLocale:Q,showSorterTooltip:T}),Ce=U(pe,4),Re=Ce[0],Fe=Ce[1],Se=Ce[2],ke=Ce[3],Pe=i.useMemo(function(){return Vs(Y,Fe,ee)},[Y,Fe]);fe.sorter=ke(),fe.sorterStates=Fe;var Qe=function(je,Ie){ie({filters:je,filterStates:Ie},"filter",!0)},et=Dw({prefixCls:ne,locale:Q,dropdownPrefixCls:ue,mergedColumns:L,onFilterChange:Qe,getPopupContainer:C}),vt=U(et,3),ct=vt[0],ht=vt[1],Ge=vt[2],_e=Ed(Pe,ht);fe.filters=Ge,fe.filterStates=ht;var mt=i.useMemo(function(){var Ne={};return Object.keys(Ge).forEach(function(je){Ge[je]!==null&&(Ne[je]=Ge[je])}),J(J({},Se),{filters:Ne})},[Se,Ge]),tt=Vw(mt),we=U(tt,1),We=we[0],Te=function(je,Ie){ie({pagination:J(J({},fe.pagination),{current:je,pageSize:Ie})},"paginate")},Le=Lw(_e.length,c,Te),ye=U(Le,2),de=ye[0],be=ye[1];fe.pagination=c===!1?{}:Iw(c,de),fe.resetPagination=be;var Me=i.useMemo(function(){if(c===!1||!de.pageSize)return _e;var Ne=de.current,je=Ne===void 0?1:Ne,Ie=de.total,De=de.pageSize,Oe=De===void 0?op:De;return _e.lengthOe?_e.slice((je-1)*Oe,je*Oe):_e:_e.slice((je-1)*Oe,je*Oe)},[!!c,_e,de&&de.current,de&&de.pageSize,de&&de.total]),Ye=jw(d,{prefixCls:ne,data:_e,pageData:Me,getRowKey:ge,getRecordByKey:ce,expandType:le,childrenColumnName:ee,locale:Q,getPopupContainer:C}),lt=U(Ye,2),$e=lt[0],xe=lt[1],Je=function(je,Ie,De){var Oe;return typeof m=="function"?Oe=ve(m(je,Ie,De)):Oe=ve(m),ve(B({},"".concat(ne,"-row-selected"),xe.has(ge(je,Ie))),Oe)};G.__PARENT_RENDER_ICON__=G.expandIcon,G.expandIcon=G.expandIcon||P||D2(Q),le==="nest"&&G.expandIconColumnIndex===void 0?G.expandIconColumnIndex=d?1:0:G.expandIconColumnIndex>0&&d&&(G.expandIconColumnIndex-=1),typeof G.indentSize!="number"&&(G.indentSize=typeof $=="number"?$:15);var dt=i.useCallback(function(Ne){return We($e(ct(Re(Ne))))},[Re,ct,$e]),ut,$t;if(c!==!1&&(de!=null&&de.total)){var Dt;de.size?Dt=de.size:Dt=H==="small"||H==="middle"?"small":void 0;var Rt=function(je){return i.createElement(bx,J({},de,{className:ve("".concat(ne,"-pagination ").concat(ne,"-pagination-").concat(je),de.className),size:Dt}))},Ft=X==="rtl"?"left":"right",nt=de.position;if(nt!==null&&Array.isArray(nt)){var ot=nt.find(function(Ne){return Ne.includes("top")}),ft=nt.find(function(Ne){return Ne.includes("bottom")}),it=nt.every(function(Ne){return"".concat(Ne)==="none"});!ot&&!ft&&!it&&($t=Rt(Ft)),ot&&(ut=Rt(ot.toLowerCase().replace("top",""))),ft&&($t=Rt(ft.toLowerCase().replace("bottom","")))}else $t=Rt(Ft)}var Ze;typeof S=="boolean"?Ze={spinning:S}:He(S)==="object"&&(Ze=J({spinning:!0},S));var Xe=ve("".concat(ne,"-wrapper"),B({},"".concat(ne,"-wrapper-rtl"),X==="rtl"),n);return i.createElement("div",{ref:t,className:Xe,style:a},i.createElement(Fr,J({spinning:!1},Ze),ut,i.createElement(la,J({},j,{columns:L,direction:X,expandable:G,prefixCls:ne,className:ve(B(B(B(B({},"".concat(ne,"-middle"),H==="middle"),"".concat(ne,"-small"),H==="small"),"".concat(ne,"-bordered"),s),"".concat(ne,"-empty"),Y.length===0)),data:Me,rowKey:ge,rowClassName:Je,emptyText:D&&D.emptyText||(V||bu)("Table"),internalHooks:Di,internalRefs:re,transformColumns:dt})),$t))}var Hw=i.forwardRef(Bw),ur=Hw;ur.SELECTION_COLUMN=xr;ur.EXPAND_COLUMN=la.EXPAND_COLUMN;ur.SELECTION_ALL=Ls;ur.SELECTION_INVERT=js;ur.SELECTION_NONE=As;ur.Column=N2;ur.ColumnGroup=$2;ur.Summary=jm;const ka=ur;var Ww=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(e);a1&&arguments[1]!==void 0?arguments[1]:"0",v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return d.map(function(m,p){var g="".concat(f,"-").concat(p),y=m[o.value],b=r.includes(y),C=c(m[o.children]||[],g,b),S=i.createElement(Au,m,C.map(function(E){return E.node}));if(t===y&&(s=S),b){var P={pos:g,node:S,children:C};return v||l.push(P),P}return null}).filter(function(m){return m})}l||(l=[],c(n),l.sort(function(d,f){var v=d.node.props.value,m=f.node.props.value,p=r.indexOf(v),g=r.indexOf(m);return p-g}))}Object.defineProperty(e,"triggerNode",{get:function(){return on(!1,"`triggerNode` is deprecated. Please consider decoupling data with node."),u(),s}}),Object.defineProperty(e,"allCheckedNodes",{get:function(){return on(!1,"`allCheckedNodes` is deprecated. Please consider decoupling data with node."),u(),a?l:l.map(function(d){var f=d.node;return f})}})}function n6(e,t){var r=t.id,n=t.pId,a=t.rootPId,o={},s=[],l=e.map(function(u){var c=h({},u),d=c[r];return o[d]=c,c.key=c.key||d,c});return l.forEach(function(u){var c=u[n],d=o[c];d&&(d.children=d.children||[],d.children.push(u)),(c===a||!d&&a===null)&&s.push(u)}),s}function r6(e,t,r){return i.useMemo(function(){return e?r?n6(e,h({id:"id",pId:"pId",rootPId:null},r!==!0?r:{})):e:pp(t)},[t,r,e])}const a6=function(e){var t=i.useRef({valueLabels:new Map});return i.useMemo(function(){var r=t.current.valueLabels,n=new Map,a=e.map(function(o){var s,l=o.value,u=(s=o.label)!==null&&s!==void 0?s:r.get(l);return n.set(l,u),h(h({},o),{},{label:u})});return t.current.valueLabels=n,[a]},[e])};function $d(e){var t=i.useRef();t.current=e;var r=i.useCallback(function(){return t.current.apply(t,arguments)},[]);return r}const o6=function(e,t){return i.useMemo(function(){var r=Vo(e,{fieldNames:t,initWrapper:function(a){return h(h({},a),{},{valueEntities:new Map})},processEntity:function(a,o){var s=a.node[t.value];o.valueEntities.set(s,a)}});return r},[e,t])},i6=function(e,t,r,n){return i.useMemo(function(){var a=e.map(function(u){var c=u.value;return c}),o=t.map(function(u){var c=u.value;return c}),s=a.filter(function(u){return!n[u]});if(r){var l=En(a,!0,n);a=l.checkedKeys,o=l.halfCheckedKeys}return[Array.from(new Set([].concat(Ke(s),Ke(a)))),o]},[e,t,r,n])},l6=function(e,t,r){var n=r.treeNodeFilterProp,a=r.filterTreeNode,o=r.fieldNames,s=o.children;return i.useMemo(function(){if(!t||a===!1)return e;var l;if(typeof a=="function")l=a;else{var u=t.toUpperCase();l=function(f,v){var m=v[n];return String(m).toUpperCase().includes(u)}}function c(d){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return d.map(function(v){var m=v[s],p=f||l(t,Bs(v)),g=c(m||[],p);return p||g.length?h(h({},v),{},B({isLeaf:void 0},s,g)):null}).filter(function(v){return v})}return c(e)},[e,t,s,n,a])};var s6=["id","prefixCls","value","defaultValue","onChange","onSelect","onDeselect","searchValue","inputValue","onSearch","autoClearSearchValue","filterTreeNode","treeNodeFilterProp","showCheckedStrategy","treeNodeLabelProp","multiple","treeCheckable","treeCheckStrictly","labelInValue","fieldNames","treeDataSimpleMode","treeData","children","loadData","treeLoadedKeys","onTreeLoad","treeDefaultExpandAll","treeExpandedKeys","treeDefaultExpandedKeys","onTreeExpand","treeExpandAction","virtual","listHeight","listItemHeight","onDropdownVisibleChange","dropdownMatchSelectWidth","treeLine","treeIcon","showTreeIcon","switcherIcon","treeMotion"];function u6(e){return!e||He(e)!=="object"}var c6=i.forwardRef(function(e,t){var r=e.id,n=e.prefixCls,a=n===void 0?"rc-tree-select":n,o=e.value,s=e.defaultValue,l=e.onChange,u=e.onSelect,c=e.onDeselect,d=e.searchValue,f=e.inputValue,v=e.onSearch,m=e.autoClearSearchValue,p=m===void 0?!0:m,g=e.filterTreeNode,y=e.treeNodeFilterProp,b=y===void 0?"value":y,C=e.showCheckedStrategy,S=C===void 0?Rl:C,P=e.treeNodeLabelProp,E=e.multiple,w=e.treeCheckable,F=e.treeCheckStrictly,$=e.labelInValue,k=e.fieldNames,O=e.treeDataSimpleMode,D=e.treeData,R=e.children,T=e.loadData,N=e.treeLoadedKeys,M=e.onTreeLoad,I=e.treeDefaultExpandAll,L=e.treeExpandedKeys,j=e.treeDefaultExpandedKeys,_=e.onTreeExpand,K=e.treeExpandAction,z=e.virtual,A=e.listHeight,V=A===void 0?200:A,X=e.listItemHeight,H=X===void 0?20:X,Q=e.onDropdownVisibleChange,Y=e.dropdownMatchSelectWidth,ae=Y===void 0?!0:Y,q=e.treeLine,ne=e.treeIcon,ue=e.showTreeIcon,G=e.switcherIcon,te=e.treeMotion,ee=ze(e,s6),le=wv(r),re=w&&!F,ge=w||F,Ee=F||$,me=ge||E,ce=kt(s,{value:o}),fe=U(ce,2),ie=fe[0],se=fe[1],pe=i.useMemo(function(){return Xw(k)},[JSON.stringify(k)]),Ce=kt("",{value:d!==void 0?d:f,postState:function(ot){return ot||""}}),Re=U(Ce,2),Fe=Re[0],Se=Re[1],ke=function(ot){Se(ot),v==null||v(ot)},Pe=r6(D,R,O),Qe=o6(Pe,pe),et=Qe.keyEntities,vt=Qe.valueEntities,ct=i.useCallback(function(nt){var ot=[],ft=[];return nt.forEach(function(it){vt.has(it)?ft.push(it):ot.push(it)}),{missingRawValues:ot,existRawValues:ft}},[vt]),ht=l6(Pe,Fe,{fieldNames:pe,treeNodeFilterProp:b,filterTreeNode:g}),Ge=i.useCallback(function(nt){if(nt){if(P)return nt[P];for(var ot=pe._title,ft=0;ftt){var c=t-r;return n.push(String(o).slice(0,c)),n}n.push(o),r=u}return e}var S6=0,Ei=1,Od=2,Jl=3,Id=4,w6=function(t){var r=t.enabledMeasure,n=t.children,a=t.text,o=t.width,s=t.fontSize,l=t.rows,u=t.onEllipsis,c=i.useState([0,0,0]),d=U(c,2),f=U(d[0],3),v=f[0],m=f[1],p=f[2],g=d[1],y=i.useState(S6),b=U(y,2),C=b[0],S=b[1],P=i.useState(0),E=U(P,2),w=E[0],F=E[1],$=i.useRef(null),k=i.useRef(null),O=i.useMemo(function(){return Rn(a)},[a]),D=i.useMemo(function(){return x6(O)},[O]),R=i.useMemo(function(){return!r||C!==Jl?n(O,!1):n(Dd(O,m),m1&&Me,xe=function(Ue){var st;Re(!0),(st=Te.onExpand)===null||st===void 0||st.call(Te,Ue)},Je=i.useState(0),dt=U(Je,2),ut=dt[0],$t=dt[1],Dt=i.useState(0),Rt=U(Dt,2),Ft=Rt[0],nt=Rt[1],ot=function(Ue,st){var gt=Ue.offsetWidth,At;$t(gt),nt(parseInt((At=window.getComputedStyle)===null||At===void 0?void 0:At.call(window,st).fontSize,10)||0)},ft=function(Ue){var st;Pe(Ue),ke!==Ue&&((st=Te.onEllipsis)===null||st===void 0||st.call(Te,Ue))};i.useEffect(function(){var Oe=E.current;if(We&&Me&&Oe){var Ue=$e?Oe.offsetHeight"u"||!Oe||!Me||!Le)){var Ue=new IntersectionObserver(function(){mt(!!Oe.offsetParent)});return Ue.observe(Oe),function(){Ue.disconnect()}}},[Me,Le]);var it={};Te.tooltip===!0?it={title:(r=R.text)!==null&&r!==void 0?r:d}:i.isValidElement(Te.tooltip)?it={title:Te.tooltip}:He(Te.tooltip)==="object"?it=J({title:(n=R.text)!==null&&n!==void 0?n:d},Te.tooltip):it={title:Te.tooltip};var Ze=i.useMemo(function(){var Oe=function(st){return["string","number"].includes(He(st))};if(!(!We||Me)){if(Oe(R.text))return R.text;if(Oe(d))return d;if(Oe(g))return g;if(Oe(it.title))return it.title}},[We,Me,g,it.title,Ye]);if(M)return i.createElement(h6,{value:(a=R.text)!==null&&a!==void 0?a:typeof d=="string"?d:"",onSave:z,onCancel:A,onEnd:R.onEnd,prefixCls:F,className:s,style:l,direction:S,component:p,maxLength:R.maxLength,autoSize:R.autoSize,enterIcon:R.enterIcon});var Xe=function(){var Ue=Te.expandable,st=Te.symbol;if(!Ue)return null;var gt;return st?gt=st:gt=P.expand,i.createElement("a",{key:"expand",className:"".concat(F,"-expand"),onClick:xe,"aria-label":P.expand},gt)},Ne=function(){if(D){var Ue=R.icon,st=R.tooltip,gt=Rn(st)[0]||P.edit,At=typeof gt=="string"?gt:"";return j.includes("icon")?i.createElement(nn,{key:"edit",title:st===!1?"":gt},i.createElement(Lc,{ref:w,className:"".concat(F,"-edit"),onClick:K,"aria-label":At},Ue||i.createElement(Lg,{role:"button"}))):null}},je=function(){if(H){var Ue=Q.tooltips,st=Q.icon,gt=_d(Ue),At=_d(st),It=q?ki(gt[1],P.copied):ki(gt[0],P.copy),qt=q?P.copied:P.copy,Sn=typeof It=="string"?It:qt;return i.createElement(nn,{key:"copy",title:It},i.createElement(Lc,{className:ve("".concat(F,"-copy"),q&&"".concat(F,"-copy-success")),onClick:ee,"aria-label":Sn},q?ki(At[1],i.createElement(kv,null),!0):ki(At[0],i.createElement(Cu,null),!0)))}},Ie=function(Ue){return[Ue&&Xe(),Ne(),je()]},De=function(Ue){return[Ue&&i.createElement("span",{"aria-hidden":!0,key:"ellipsis"},T6),Te.suffix,Ie(Ue)]};return i.createElement(Tr,{onResize:ot,disabled:!Le||Me},function(Oe){return i.createElement(k6,{tooltipProps:it,enabledEllipsis:Le,isEllipsis:Ye},i.createElement(hp,J({className:ve(B(B(B(B(B(B({},"".concat(F,"-").concat(u),u),"".concat(F,"-disabled"),c),"".concat(F,"-ellipsis"),We),"".concat(F,"-single-line"),Le&&de===1),"".concat(F,"-ellipsis-single-line"),lt),"".concat(F,"-ellipsis-multiple-line"),$e),s),prefixCls:o,style:J(J({},l),{WebkitLineClamp:$e?de:void 0}),component:p,ref:uu(Oe,E,t),direction:S,onClick:j.includes("text")?K:void 0,"aria-label":Ze==null?void 0:Ze.toString(),title:g},$),i.createElement(P6,{enabledMeasure:Le&&!Me,text:d,rows:de,width:ut,fontSize:Ft,onEllipsis:ft},function(Ue,st){var gt=Ue;Ue.length&&st&&Ze&&(gt=i.createElement("span",{key:"show-content","aria-hidden":!0},gt));var At=M6(e,i.createElement(i.Fragment,null,gt,De(st)));return At})))})});const Ml=F6;var N6=globalThis&&globalThis.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(e);a=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(c){throw c},f:a}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o,s=!0,l=!1;return{s:function(){r=r.call(e)},n:function(){var c=r.next();return s=c.done,c},e:function(c){l=!0,o=c},f:function(){try{s||r.return==null||r.return()}finally{if(l)throw o}}}}var H6={locale:"zh_CN",today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",month:"月",year:"年",previousMonth:"上个月 (翻页上键)",nextMonth:"下个月 (翻页下键)",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH时mm分ss秒",previousYear:"上一年 (Control键加左方向键)",nextYear:"下一年 (Control键加右方向键)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪"},W6={placeholder:"请选择时间",rangePlaceholder:["开始时间","结束时间"]};const yp=W6;var bp={lang:J({placeholder:"请选择日期",yearPlaceholder:"请选择年份",quarterPlaceholder:"请选择季度",monthPlaceholder:"请选择月份",weekPlaceholder:"请选择周",rangePlaceholder:["开始日期","结束日期"],rangeYearPlaceholder:["开始年份","结束年份"],rangeMonthPlaceholder:["开始月份","结束月份"],rangeQuarterPlaceholder:["开始季度","结束季度"],rangeWeekPlaceholder:["开始周","结束周"]},H6),timePickerLocale:J({},yp)};bp.lang.ok="确定";const Ld=bp;var fn="${label}不是一个有效的${type}",Cp={locale:"zh-cn",Pagination:pm,DatePicker:Ld,TimePicker:yp,Calendar:Ld,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",filterEmptyText:"无筛选项",filterCheckall:"全选",filterSearchPlaceholder:"在筛选项中搜索",selectAll:"全选当页",selectInvert:"反选当页",selectNone:"清空所有",selectionAll:"全选所有",sortTitle:"排序",expand:"展开行",collapse:"关闭行",triggerDesc:"点击降序",triggerAsc:"点击升序",cancelSort:"取消排序"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{titles:["",""],searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项",remove:"删除",selectCurrent:"全选当页",removeCurrent:"删除当页",selectAll:"全选所有",removeAll:"删除全部",selectInvert:"反选当页"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"},Form:{optional:"(可选)",defaultValidateMessages:{default:"字段验证错误${label}",required:"请输入${label}",enum:"${label}必须是其中一个[${enum}]",whitespace:"${label}不能为空字符",date:{format:"${label}日期格式无效",parse:"${label}不能转换为日期",invalid:"${label}是一个无效日期"},types:{string:fn,method:fn,array:fn,object:fn,number:fn,date:fn,boolean:fn,integer:fn,float:fn,regexp:fn,email:fn,url:fn,hex:fn},string:{len:"${label}须为${len}个字符",min:"${label}最少${min}个字符",max:"${label}最多${max}个字符",range:"${label}须在${min}-${max}字符之间"},number:{len:"${label}必须等于${len}",min:"${label}最小值为${min}",max:"${label}最大值为${max}",range:"${label}须在${min}-${max}之间"},array:{len:"须为${len}个${label}",min:"最少${min}个${label}",max:"最多${max}个${label}",range:"${label}数量须在${min}-${max}之间"},pattern:{mismatch:"${label}与模式不匹配${pattern}"}}},Image:{preview:"预览"}};/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */function xp(e,t,r,n){function a(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function l(d){try{c(n.next(d))}catch(f){s(f)}}function u(d){try{c(n.throw(d))}catch(f){s(f)}}function c(d){d.done?o(d.value):a(d.value).then(l,u)}c((n=n.apply(e,t||[])).next())})}function Sp(e,t){var r={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},n,a,o,s;return s={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function l(c){return function(d){return u([c,d])}}function u(c){if(n)throw new TypeError("Generator is already executing.");for(;r;)try{if(n=1,a&&(o=c[0]&2?a.return:c[0]?a.throw||((o=a.return)&&o.call(a),0):a.next)&&!(o=o.call(a,c[1])).done)return o;switch(a=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return r.label++,{value:c[1],done:!1};case 5:r.label++,a=c[1],c=[0];continue;case 7:c=r.ops.pop(),r.trys.pop();continue;default:if(o=r.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]o||setTimeout(n,l,a)},Fp=Tp(new Map),Np=Fp[0],iP=Fp[1],$p=lr({onLoadingSlow:Un,onSuccess:Un,onError:Un,onErrorRetry:oP,onDiscarded:Un,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:jd?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:jd?5e3:3e3,compare:function(e,t){return Po(e)==Po(t)},isPaused:function(){return!1},cache:Np,mutate:iP,fallback:{}},tP),Dp=function(e,t){var r=lr(e,t);if(t){var n=e.use,a=e.fallback,o=t.use,s=t.fallback;n&&o&&(r.use=n.concat(o)),a&&s&&(r.fallback=lr(a,s))}return r},Gs=i.createContext({}),lP=function(e){var t=e.value,r=Dp(i.useContext(Gs),t),n=t&&t.provider,a=i.useState(function(){return n?Tp(n(r.cache||Np),t):an})[0];return a&&(r.cache=a[0],r.mutate=a[1]),bo(function(){return a?a[2]:an},[]),i.createElement(Gs.Provider,lr(e,{value:r}))},sP=function(e,t){var r=i.useState({})[1],n=i.useRef(e),a=i.useRef({data:!1,error:!1,isValidating:!1}),o=i.useCallback(function(s){var l=!1,u=n.current;for(var c in s){var d=c;u[d]!==s[d]&&(u[d]=s[d],a.current[d]&&(l=!0))}l&&!t.current&&r({})},[]);return bo(function(){n.current=e}),[n,a.current,o]},uP=function(e){return Pr(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(e[1]===null?e[2]:e[1])||{}]},Hu=function(){return lr($p,i.useContext(Gs))},cP=function(e){return function(){for(var r=[],n=0;n0;)d=f[v](d);return d(s,l||c.fetcher,c)}},Kd=function(e,t,r){var n=t[e]||(t[e]=[]);return n.push(r),function(){var a=n.indexOf(r);a>=0&&(n[a]=n[n.length-1],n.pop())}},ts={dedupe:!0},dP=function(e,t,r){var n=r.cache,a=r.compare,o=r.fallbackData,s=r.suspense,l=r.revalidateOnMount,u=r.refreshInterval,c=r.refreshWhenHidden,d=r.refreshWhenOffline,f=qr.get(n),v=f[0],m=f[1],p=f[2],g=f[3],y=Pp(e),b=y[0],C=y[1],S=y[2],P=i.useRef(!1),E=i.useRef(!1),w=i.useRef(b),F=i.useRef(t),$=i.useRef(r),k=function(){return $.current},O=function(){return k().isVisible()&&k().isOnline()},D=function(Y){return n.set(S,lr(n.get(S),Y))},R=n.get(b),T=un(o)?r.fallback[b]:o,N=un(R)?T:R,M=n.get(S)||{},I=M.error,L=!P.current,j=function(){return L&&!un(l)?l:k().isPaused()?!1:s?un(N)?!1:r.revalidateIfStale:un(N)||r.revalidateIfStale},_=function(){return!b||!t?!1:M.isValidating?!0:L&&j()},K=_(),z=sP({data:N,error:I,isValidating:K},E),A=z[0],V=z[1],X=z[2],H=i.useCallback(function(Y){return xp(void 0,void 0,void 0,function(){var ae,q,ne,ue,G,te,ee,le,re,ge,Ee,me,ce;return Sp(this,function(fe){switch(fe.label){case 0:if(ae=F.current,!b||!ae||E.current||k().isPaused())return[2,!1];ue=!0,G=Y||{},te=!g[b]||!G.dedupe,ee=function(){return!E.current&&b===w.current&&P.current},le=function(){var ie=g[b];ie&&ie[1]===ne&&delete g[b]},re={isValidating:!1},ge=function(){D({isValidating:!1}),ee()&&X(re)},D({isValidating:!0}),X({isValidating:!0}),fe.label=1;case 1:return fe.trys.push([1,3,,4]),te&&(Co(n,b,A.current.data,A.current.error,!0),r.loadingTimeout&&!n.get(b)&&setTimeout(function(){ue&&ee()&&k().onLoadingSlow(b,r)},r.loadingTimeout),g[b]=[ae.apply(void 0,C),Ys()]),ce=g[b],q=ce[0],ne=ce[1],[4,q];case 2:return q=fe.sent(),te&&setTimeout(le,r.dedupingInterval),!g[b]||g[b][1]!==ne?(te&&ee()&&k().onDiscarded(b),[2,!1]):(D({error:an}),re.error=an,Ee=p[b],!un(Ee)&&(ne<=Ee[0]||ne<=Ee[1]||Ee[1]===0)?(ge(),te&&ee()&&k().onDiscarded(b),[2,!1]):(a(A.current.data,q)?re.data=A.current.data:re.data=q,a(n.get(b),q)||n.set(b,q),te&&ee()&&k().onSuccess(q,b,r),[3,4]));case 3:return me=fe.sent(),le(),k().isPaused()||(D({error:me}),re.error=me,te&&ee()&&(k().onError(me,b,r),(typeof r.shouldRetryOnError=="boolean"&&r.shouldRetryOnError||Pr(r.shouldRetryOnError)&&r.shouldRetryOnError(me))&&O()&&k().onErrorRetry(me,b,r,H,{retryCount:(G.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return ue=!1,ge(),ee()&&te&&Co(n,b,re.data,re.error,!1),[2,!0]}})})},[b]),Q=i.useCallback(Mp.bind(an,n,function(){return w.current}),[]);if(bo(function(){F.current=t,$.current=r}),bo(function(){if(b){var Y=b!==w.current,ae=H.bind(an,ts),q=function(ee,le,re){X(lr({error:le,isValidating:re},a(A.current.data,ee)?an:{data:ee}))},ne=0,ue=function(ee){if(ee==Ep){var le=Date.now();k().revalidateOnFocus&&le>ne&&O()&&(ne=le+k().focusThrottleInterval,ae())}else if(ee==kp)k().revalidateOnReconnect&&O()&&ae();else if(ee==Rp)return H()},G=Kd(b,m,q),te=Kd(b,v,ue);return E.current=!1,w.current=b,P.current=!0,Y&&X({data:N,error:I,isValidating:K}),j()&&(un(N)||Tl?ae():rP(ae)),function(){E.current=!0,G(),te()}}},[b,H]),bo(function(){var Y;function ae(){var ne=Pr(u)?u(N):u;ne&&Y!==-1&&(Y=setTimeout(q,ne))}function q(){!A.current.error&&(c||k().isVisible())&&(d||k().isOnline())?H(ts).then(ae):ae()}return ae(),function(){Y&&(clearTimeout(Y),Y=-1)}},[u,c,d,H]),i.useDebugValue(N),s&&un(N)&&b)throw F.current=t,$.current=r,E.current=!1,un(I)?H(ts):I;return{mutate:Q,get data(){return V.data=!0,N},get error(){return V.error=!0,I},get isValidating(){return V.isValidating=!0,K}}},Op=yo.defineProperty(lP,"default",{value:$p}),Ip=cP(dP);const fP={moneySymbol:"$",form:{lightFilter:{more:"المزيد",clear:"نظف",confirm:"تأكيد",itemUnit:"عناصر"}},tableForm:{search:"ابحث",reset:"إعادة تعيين",submit:"ارسال",collapsed:"مُقلص",expand:"مُوسع",inputPlaceholder:"الرجاء الإدخال",selectPlaceholder:"الرجاء الإختيار"},alert:{clear:"نظف",selected:"محدد",item:"عنصر"},pagination:{total:{range:" ",total:"من",item:"عناصر"}},tableToolBar:{leftPin:"ثبت على اليسار",rightPin:"ثبت على اليمين",noPin:"الغاء التثبيت",leftFixedTitle:"لصق على اليسار",rightFixedTitle:"لصق على اليمين",noFixedTitle:"إلغاء الإلصاق",reset:"إعادة تعيين",columnDisplay:"الأعمدة المعروضة",columnSetting:"الإعدادات",fullScreen:"وضع كامل الشاشة",exitFullScreen:"الخروج من وضع كامل الشاشة",reload:"تحديث",density:"الكثافة",densityDefault:"افتراضي",densityLarger:"أكبر",densityMiddle:"وسط",densitySmall:"مدمج"},stepsForm:{next:"التالي",prev:"السابق",submit:"أنهى"},loginForm:{submitText:"تسجيل الدخول"},editableTable:{action:{save:"أنقذ",cancel:"إلغاء الأمر",delete:"حذف",add:"إضافة صف من البيانات"}},switch:{open:"مفتوح",close:"غلق"}},vP={moneySymbol:"€",form:{lightFilter:{more:"Máis",clear:"Limpar",confirm:"Confirmar",itemUnit:"Elementos"}},tableForm:{search:"Cercar",reset:"Netejar",submit:"Enviar",collapsed:"Expandir",expand:"Col·lapsar",inputPlaceholder:"Introduïu valor",selectPlaceholder:"Seleccioneu valor"},alert:{clear:"Netejar",selected:"Seleccionat",item:"Article"},pagination:{total:{range:" ",total:"de",item:"articles"}},tableToolBar:{leftPin:"Pin a l'esquerra",rightPin:"Pin a la dreta",noPin:"Sense Pin",leftFixedTitle:"Fixat a l'esquerra",rightFixedTitle:"Fixat a la dreta",noFixedTitle:"Sense fixar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuració",fullScreen:"Pantalla Completa",exitFullScreen:"Sortir Pantalla Completa",reload:"Refrescar",density:"Densitat",densityDefault:"Per Defecte",densityLarger:"Llarg",densityMiddle:"Mitjà",densitySmall:"Compacte"},stepsForm:{next:"Següent",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Gardar",cancel:"Cancelar",delete:"Eliminar",add:"engadir unha fila de datos"}},switch:{open:"aberto",close:"pechar"}},mP={moneySymbol:"€",form:{lightFilter:{more:"Mehr",clear:"Zurücksetzen",confirm:"Bestätigen",itemUnit:"Einträge"}},tableForm:{search:"Suchen",reset:"Zurücksetzen",submit:"Absenden",collapsed:"Zeige mehr",expand:"Zeige weniger",inputPlaceholder:"Bitte eingeben",selectPlaceholder:"Bitte auswählen"},alert:{clear:"Zurücksetzen",selected:"Ausgewählt",item:"Eintrag"},pagination:{total:{range:" ",total:"von",item:"Einträgen"}},tableToolBar:{leftPin:"Links anheften",rightPin:"Rechts anheften",noPin:"Nicht angeheftet",leftFixedTitle:"Links fixiert",rightFixedTitle:"Rechts fixiert",noFixedTitle:"Nicht fixiert",reset:"Zurücksetzen",columnDisplay:"Angezeigte Reihen",columnSetting:"Einstellungen",fullScreen:"Vollbild",exitFullScreen:"Vollbild verlassen",reload:"Aktualisieren",density:"Abstand",densityDefault:"Standard",densityLarger:"Größer",densityMiddle:"Mittel",densitySmall:"Kompakt"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Anmelden"},editableTable:{action:{save:"Retten",cancel:"Abbrechen",delete:"Löschen",add:"Hinzufügen einer Datenzeile"}},switch:{open:"offen",close:"schließen"}},pP={moneySymbol:"£",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},hP={moneySymbol:"$",deleteThisLine:"Delete this line",copyThisLine:"Copy this line",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{onlyOneLineEditor:"Only one line can be edited",action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},gP={moneySymbol:"€",form:{lightFilter:{more:"Más",clear:"Limpiar",confirm:"Confirmar",itemUnit:"artículos"}},tableForm:{search:"Buscar",reset:"Limpiar",submit:"Submit",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Ingrese valor",selectPlaceholder:"Seleccione valor"},alert:{clear:"Limpiar",selected:"Seleccionado",item:"Articulo"},pagination:{total:{range:" ",total:"de",item:"artículos"}},tableToolBar:{leftPin:"Pin a la izquierda",rightPin:"Pin a la derecha",noPin:"Sin Pin",leftFixedTitle:"Fijado a la izquierda",rightFixedTitle:"Fijado a la derecha",noFixedTitle:"Sin Fijar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuración",fullScreen:"Pantalla Completa",exitFullScreen:"Salir Pantalla Completa",reload:"Refrescar",density:"Densidad",densityDefault:"Por Defecto",densityLarger:"Largo",densityMiddle:"Medio",densitySmall:"Compacto"},stepsForm:{next:"Siguiente",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Guardar",cancel:"Descartar",delete:"Borrar",add:"añadir una fila de datos"}},switch:{open:"abrir",close:"cerrar"}},yP={moneySymbol:"تومان",form:{lightFilter:{more:"بیشتر",clear:"پاک کردن",confirm:"تایید",itemUnit:"مورد"}},tableForm:{search:"جستجو",reset:"بازنشانی",submit:"تایید",collapsed:"نمایش بیشتر",expand:"نمایش کمتر",inputPlaceholder:"پیدا کنید",selectPlaceholder:"انتخاب کنید"},alert:{clear:"پاک سازی",selected:"انتخاب",item:"مورد"},pagination:{total:{range:" ",total:"از",item:"مورد"}},tableToolBar:{leftPin:"سنجاق به چپ",rightPin:"سنجاق به راست",noPin:"سنجاق نشده",leftFixedTitle:"ثابت شده در چپ",rightFixedTitle:"ثابت شده در راست",noFixedTitle:"شناور",reset:"بازنشانی",columnDisplay:"نمایش همه",columnSetting:"تنظیمات",fullScreen:"تمام صفحه",exitFullScreen:"خروج از حالت تمام صفحه",reload:"تازه سازی",density:"تراکم",densityDefault:"پیش فرض",densityLarger:"بزرگ",densityMiddle:"متوسط",densitySmall:"کوچک"},stepsForm:{next:"بعدی",prev:"قبلی",submit:"اتمام"},loginForm:{submitText:"ورود"},editableTable:{action:{save:"ذخیره",cancel:"لغو",delete:"حذف",add:"یک ردیف داده اضافه کنید"}},switch:{open:"باز",close:"نزدیک"}},bP={moneySymbol:"€",form:{lightFilter:{more:"Plus",clear:"Effacer",confirm:"Confirmer",itemUnit:"Items"}},tableForm:{search:"Rechercher",reset:"Réinitialiser",submit:"Envoyer",collapsed:"Agrandir",expand:"Réduire",inputPlaceholder:"Entrer une valeur",selectPlaceholder:"Sélectionner une valeur"},alert:{clear:"Réinitialiser",selected:"Sélectionné",item:"Item"},pagination:{total:{range:" ",total:"sur",item:"éléments"}},tableToolBar:{leftPin:"Épingler à gauche",rightPin:"Épingler à gauche",noPin:"Sans épingle",leftFixedTitle:"Fixer à gauche",rightFixedTitle:"Fixer à droite",noFixedTitle:"Non fixé",reset:"Réinitialiser",columnDisplay:"Affichage colonne",columnSetting:"Réglages",fullScreen:"Plein écran",exitFullScreen:"Quitter Plein écran",reload:"Rafraichir",density:"Densité",densityDefault:"Par défaut",densityLarger:"Larger",densityMiddle:"Moyenne",densitySmall:"Compacte"},stepsForm:{next:"Suivante",prev:"Précédente",submit:"Finaliser"},loginForm:{submitText:"Se connecter"},editableTable:{action:{save:"Sauvegarder",cancel:"Annuler",delete:"Supprimer",add:"ajouter une ligne de données"}},switch:{open:"ouvert",close:"près"}},CP={moneySymbol:"kn",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pretraži",reset:"Poništi",submit:"Potvrdi",collapsed:"Raširi",expand:"Skupi",inputPlaceholder:"Unesite",selectPlaceholder:"Odaberite"},alert:{clear:"Očisti",selected:"Odaberi",item:"stavke"},pagination:{total:{range:" ",total:"od",item:"stavke"}},tableToolBar:{leftPin:"Prikači lijevo",rightPin:"Prikači desno",noPin:"Bez prikačenja",leftFixedTitle:"Fiksiraj lijevo",rightFixedTitle:"Fiksiraj desno",noFixedTitle:"Bez fiksiranja",reset:"Resetiraj",columnDisplay:"Prikaz stupaca",columnSetting:"Postavke",fullScreen:"Puni zaslon",exitFullScreen:"Izađi iz punog zaslona",reload:"Ponovno učitaj",density:"Veličina",densityDefault:"Zadano",densityLarger:"Veliko",densityMiddle:"Srednje",densitySmall:"Malo"},stepsForm:{next:"Sljedeći",prev:"Prethodni",submit:"Kraj"},loginForm:{submitText:"Prijava"},editableTable:{action:{save:"Spremi",cancel:"Odustani",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"otvori",close:"zatvori"}},xP={moneySymbol:"RP",form:{lightFilter:{more:"Lebih",clear:"Hapus",confirm:"Konfirmasi",itemUnit:"Unit"}},tableForm:{search:"Cari",reset:"Atur ulang",submit:"Kirim",collapsed:"Lebih sedikit",expand:"Lebih banyak",inputPlaceholder:"Masukkan pencarian",selectPlaceholder:"Pilih"},alert:{clear:"Hapus",selected:"Dipilih",item:"Butir"},pagination:{total:{range:" ",total:"Dari",item:"Butir"}},tableToolBar:{leftPin:"Pin kiri",rightPin:"Pin kanan",noPin:"Tidak ada pin",leftFixedTitle:"Rata kiri",rightFixedTitle:"Rata kanan",noFixedTitle:"Tidak tetap",reset:"Atur ulang",columnDisplay:"Tampilan kolom",columnSetting:"Pengaturan",fullScreen:"Layar penuh",exitFullScreen:"Keluar layar penuh",reload:"Atur ulang",density:"Kerapatan",densityDefault:"Standar",densityLarger:"Lebih besar",densityMiddle:"Sedang",densitySmall:"Rapat"},stepsForm:{next:"Selanjutnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Login"},editableTable:{action:{save:"simpan",cancel:"batal",delete:"hapus",add:"Tambahkan baris data"}},switch:{open:"buka",close:"tutup"}},SP={moneySymbol:"€",form:{lightFilter:{more:"più",clear:"pulisci",confirm:"conferma",itemUnit:"elementi"}},tableForm:{search:"Filtra",reset:"Pulisci",submit:"Invia",collapsed:"Espandi",expand:"Contrai",inputPlaceholder:"Digita",selectPlaceholder:"Seleziona"},alert:{clear:"Rimuovi",selected:"Selezionati",item:"elementi"},pagination:{total:{range:" ",total:"di",item:"elementi"}},tableToolBar:{leftPin:"Fissa a sinistra",rightPin:"Fissa a destra",noPin:"Ripristina posizione",leftFixedTitle:"Fissato a sinistra",rightFixedTitle:"Fissato a destra",noFixedTitle:"Non fissato",reset:"Ripristina",columnDisplay:"Disposizione colonne",columnSetting:"Impostazioni",fullScreen:"Modalità schermo intero",exitFullScreen:"Esci da modalità schermo intero",reload:"Ricarica",density:"Grandezza tabella",densityDefault:"predefinito",densityLarger:"Grande",densityMiddle:"Media",densitySmall:"Compatta"},stepsForm:{next:"successivo",prev:"precedente",submit:"finisci"},loginForm:{submitText:"Accedi"},editableTable:{action:{save:"salva",cancel:"annulla",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"chiudi"}},wP={moneySymbol:"¥",form:{lightFilter:{more:"もっと",clear:"明確",confirm:"確認",itemUnit:"項目"}},tableForm:{search:"検索",reset:"リセット",submit:"提交",collapsed:"展開",expand:"収納",inputPlaceholder:"入力してください",selectPlaceholder:"選択してください"},alert:{clear:"クリア",selected:"選択した",item:"項目"},pagination:{total:{range:"記事",total:"/合計",item:" "}},tableToolBar:{leftPin:"左に固定",rightPin:"右に固定",noPin:"キャンセル",leftFixedTitle:"左に固定された項目",rightFixedTitle:"右に固定された項目",noFixedTitle:"固定されてない項目",reset:"リセット",columnDisplay:"表示列",columnSetting:"列表示設定",fullScreen:"フルスクリーン",exitFullScreen:"終了",reload:"更新",density:"行高",densityDefault:"デフォルト",densityLarger:"默认",densityMiddle:"中",densitySmall:"小"},stepsForm:{next:"次のステップ",prev:"前",submit:"送信"},loginForm:{submitText:"ログイン"},editableTable:{action:{save:"救う",cancel:"キャンセル",delete:"削除",add:"1行のデータを追加します"}},switch:{open:"オープン",close:"近い"}},PP={moneySymbol:"₩",form:{lightFilter:{more:"더보기",clear:"취소",confirm:"확인",itemUnit:"건수"}},tableForm:{search:"조회",reset:"초기화",submit:"제출",collapsed:"확장",expand:"닫기",inputPlaceholder:"입력해 주세요",selectPlaceholder:"선택해 주세요"},alert:{clear:"취소",selected:"선택",item:"건"},pagination:{total:{range:" ",total:"/ 총",item:"건"}},tableToolBar:{leftPin:"왼쪽으로 핀",rightPin:"오른쪽으로 핀",noPin:"핀 제거",leftFixedTitle:"왼쪽으로 고정",rightFixedTitle:"오른쪽으로 고정",noFixedTitle:"비고정",reset:"초기화",columnDisplay:"컬럼 표시",columnSetting:"설정",fullScreen:"전체 화면",exitFullScreen:"전체 화면 취소",reload:"다시 읽기",density:"여백",densityDefault:"기본",densityLarger:"많은 여백",densityMiddle:"중간 여백",densitySmall:"좁은 여백"},stepsForm:{next:"다음",prev:"이전",submit:"종료"},loginForm:{submitText:"로그인"},editableTable:{action:{save:"저장",cancel:"취소",delete:"삭제",add:"데이터 행 추가"}},switch:{open:"열",close:"가까 운"}},EP={moneySymbol:"₮",form:{lightFilter:{more:"Илүү",clear:"Цэвэрлэх",confirm:"Баталгаажуулах",itemUnit:"Нэгжүүд"}},tableForm:{search:"Хайх",reset:"Шинэчлэх",submit:"Илгээх",collapsed:"Өргөтгөх",expand:"Хураах",inputPlaceholder:"Утга оруулна уу",selectPlaceholder:"Утга сонгоно уу"},alert:{clear:"Цэвэрлэх",selected:"Сонгогдсон",item:"Нэгж"},pagination:{total:{range:" ",total:"Нийт",item:"мөр"}},tableToolBar:{leftPin:"Зүүн тийш бэхлэх",rightPin:"Баруун тийш бэхлэх",noPin:"Бэхлэхгүй",leftFixedTitle:"Зүүн зэрэгцүүлэх",rightFixedTitle:"Баруун зэрэгцүүлэх",noFixedTitle:"Зэрэгцүүлэхгүй",reset:"Шинэчлэх",columnDisplay:"Баганаар харуулах",columnSetting:"Тохиргоо",fullScreen:"Бүтэн дэлгэцээр",exitFullScreen:"Бүтэн дэлгэц цуцлах",reload:"Шинэчлэх",density:"Хэмжээ",densityDefault:"Хэвийн",densityLarger:"Том",densityMiddle:"Дунд",densitySmall:"Жижиг"},stepsForm:{next:"Дараах",prev:"Өмнөх",submit:"Дуусгах"},loginForm:{submitText:"Нэвтрэх"},editableTable:{action:{save:"Хадгалах",cancel:"Цуцлах",delete:"Устгах",add:"Мөр нэмэх"}},switch:{open:"Нээх",close:"Хаах"}},kP={moneySymbol:"RM",form:{lightFilter:{more:"Lebih banyak",clear:"Jelas",confirm:"Mengesahkan",itemUnit:"Item"}},tableForm:{search:"Cari",reset:"Menetapkan semula",submit:"Hantar",collapsed:"Kembang",expand:"Kuncup",inputPlaceholder:"Sila masuk",selectPlaceholder:"Sila pilih"},alert:{clear:"Padam",selected:"Dipilih",item:"Item"},pagination:{total:{range:" ",total:"daripada",item:"item"}},tableToolBar:{leftPin:"Pin ke kiri",rightPin:"Pin ke kanan",noPin:"Tidak pin",leftFixedTitle:"Tetap ke kiri",rightFixedTitle:"Tetap ke kanan",noFixedTitle:"Tidak Tetap",reset:"Menetapkan semula",columnDisplay:"Lajur",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Keluar Full Screen",reload:"Muat Semula",density:"Densiti",densityDefault:"Biasa",densityLarger:"Besar",densityMiddle:"Tengah",densitySmall:"Kecil"},stepsForm:{next:"Seterusnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Log Masuk"},editableTable:{action:{save:"Simpan",cancel:"Membatalkan",delete:"Menghapuskan",add:"tambah baris data"}},switch:{open:"Terbuka",close:"Tutup"}},RP={moneySymbol:"zł",form:{lightFilter:{more:"Więcej",clear:"Wyczyść",confirm:"Potwierdź",itemUnit:"Ilość"}},tableForm:{search:"Szukaj",reset:"Reset",submit:"Zatwierdź",collapsed:"Pokaż wiecej",expand:"Pokaż mniej",inputPlaceholder:"Proszę podać",selectPlaceholder:"Proszę wybrać"},alert:{clear:"Wyczyść",selected:"Wybrane",item:"Wpis"},pagination:{total:{range:" ",total:"z",item:"Wpisów"}},tableToolBar:{leftPin:"Przypnij do lewej",rightPin:"Przypnij do prawej",noPin:"Odepnij",leftFixedTitle:"Przypięte do lewej",rightFixedTitle:"Przypięte do prawej",noFixedTitle:"Nieprzypięte",reset:"Reset",columnDisplay:"Wyświetlane wiersze",columnSetting:"Ustawienia",fullScreen:"Pełen ekran",exitFullScreen:"Zamknij pełen ekran",reload:"Odśwież",density:"Odstęp",densityDefault:"Standard",densityLarger:"Wiekszy",densityMiddle:"Sredni",densitySmall:"Kompaktowy"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Zaloguj się"},editableTable:{action:{save:"Zapisać",cancel:"Anuluj",delete:"Usunąć",add:"dodawanie wiersza danych"}},switch:{open:"otwierać",close:"zamykać"}},MP={moneySymbol:"R$",form:{lightFilter:{more:"Mais",clear:"Limpar",confirm:"Confirmar",itemUnit:"Itens"}},tableForm:{search:"Filtrar",reset:"Limpar",submit:"Confirmar",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Por favor insira",selectPlaceholder:"Por favor selecione"},alert:{clear:"Limpar",selected:"Selecionado(s)",item:"Item(s)"},pagination:{total:{range:" ",total:"de",item:"itens"}},tableToolBar:{leftPin:"Fixar à esquerda",rightPin:"Fixar à direita",noPin:"Desfixado",leftFixedTitle:"Fixado à esquerda",rightFixedTitle:"Fixado à direita",noFixedTitle:"Não fixado",reset:"Limpar",columnDisplay:"Mostrar Coluna",columnSetting:"Configurações",fullScreen:"Tela Cheia",exitFullScreen:"Sair da Tela Cheia",reload:"Atualizar",density:"Densidade",densityDefault:"Padrão",densityLarger:"Largo",densityMiddle:"Médio",densitySmall:"Compacto"},stepsForm:{next:"Próximo",prev:"Anterior",submit:"Enviar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Salvar",cancel:"Cancelar",delete:"Apagar",add:"adicionar uma linha de dados"}},switch:{open:"abrir",close:"fechar"}},TP={moneySymbol:"₽",form:{lightFilter:{more:"Еще",clear:"Очистить",confirm:"ОК",itemUnit:"Позиции"}},tableForm:{search:"Найти",reset:"Сброс",submit:"Отправить",collapsed:"Развернуть",expand:"Свернуть",inputPlaceholder:"Введите значение",selectPlaceholder:"Выберите значение"},alert:{clear:"Очистить",selected:"Выбрано",item:"элементов"},pagination:{total:{range:" ",total:"из",item:"элементов"}},tableToolBar:{leftPin:"Закрепить слева",rightPin:"Закрепить справа",noPin:"Открепить",leftFixedTitle:"Закреплено слева",rightFixedTitle:"Закреплено справа",noFixedTitle:"Не закреплено",reset:"Сброс",columnDisplay:"Отображение столбца",columnSetting:"Настройки",fullScreen:"Полный экран",exitFullScreen:"Выйти из полноэкранного режима",reload:"Обновить",density:"Размер",densityDefault:"По умолчанию",densityLarger:"Большой",densityMiddle:"Средний",densitySmall:"Сжатый"},stepsForm:{next:"Следующий",prev:"Предыдущий",submit:"Завершить"},loginForm:{submitText:"Вход"},editableTable:{action:{save:"Сохранить",cancel:"Отменить",delete:"Удалить",add:"добавить ряд данных"}},switch:{open:"Открытый чемпионат мира по теннису",close:"По адресу:"}},FP={moneySymbol:"RSD",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pronađi",reset:"Resetuj",submit:"Pošalji",collapsed:"Proširi",expand:"Skupi",inputPlaceholder:"Molimo unesite",selectPlaceholder:"Molimo odaberite"},alert:{clear:"Očisti",selected:"Odabrano",item:"Stavka"},pagination:{total:{range:" ",total:"od",item:"stavki"}},tableToolBar:{leftPin:"Zakači levo",rightPin:"Zakači desno",noPin:"Nije zakačeno",leftFixedTitle:"Fiksirano levo",rightFixedTitle:"Fiksirano desno",noFixedTitle:"Nije fiksirano",reset:"Resetuj",columnDisplay:"Prikaz kolona",columnSetting:"Podešavanja",fullScreen:"Pun ekran",exitFullScreen:"Zatvori pun ekran",reload:"Osveži",density:"Veličina",densityDefault:"Podrazumevana",densityLarger:"Veća",densityMiddle:"Srednja",densitySmall:"Kompaktna"},stepsForm:{next:"Dalje",prev:"Nazad",submit:"Gotovo"},loginForm:{submitText:"Prijavi se"},editableTable:{action:{save:"Sačuvaj",cancel:"Poništi",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"Отворите",close:"Затворите"}},NP={moneySymbol:"₺",form:{lightFilter:{more:"Daha Fazla",clear:"Temizle",confirm:"Onayla",itemUnit:"Öğeler"}},tableForm:{search:"Filtrele",reset:"Sıfırla",submit:"Gönder",collapsed:"Daha fazla",expand:"Daha az",inputPlaceholder:"Filtrelemek için bir değer girin",selectPlaceholder:"Filtrelemek için bir değer seçin"},alert:{clear:"Temizle",selected:"Seçili",item:"Öğe"},pagination:{total:{range:" ",total:"Toplam",item:"Öğe"}},tableToolBar:{leftPin:"Sola sabitle",rightPin:"Sağa sabitle",noPin:"Sabitlemeyi kaldır",leftFixedTitle:"Sola sabitlendi",rightFixedTitle:"Sağa sabitlendi",noFixedTitle:"Sabitlenmedi",reset:"Sıfırla",columnDisplay:"Kolon Görünümü",columnSetting:"Ayarlar",fullScreen:"Tam Ekran",exitFullScreen:"Tam Ekrandan Çık",reload:"Yenile",density:"Kalınlık",densityDefault:"Varsayılan",densityLarger:"Büyük",densityMiddle:"Orta",densitySmall:"Küçük"},stepsForm:{next:"Sıradaki",prev:"Önceki",submit:"Gönder"},loginForm:{submitText:"Giriş Yap"},editableTable:{action:{save:"Kaydet",cancel:"Vazgeç",delete:"Sil",add:"foegje in rige gegevens ta"}},switch:{open:"açık",close:"kapatmak"}},$P={moneySymbol:"₫",form:{lightFilter:{more:"Nhiều hơn",clear:"Trong",confirm:"Xác nhận",itemUnit:"Mục"}},tableForm:{search:"Tìm kiếm",reset:"Làm lại",submit:"Gửi đi",collapsed:"Mở rộng",expand:"Thu gọn",inputPlaceholder:"nhập dữ liệu",selectPlaceholder:"Vui lòng chọn"},alert:{clear:"Xóa",selected:"đã chọn",item:"mục"},pagination:{total:{range:" ",total:"trên",item:"mặt hàng"}},tableToolBar:{leftPin:"Ghim trái",rightPin:"Ghim phải",noPin:"Bỏ ghim",leftFixedTitle:"Cố định trái",rightFixedTitle:"Cố định phải",noFixedTitle:"Chưa cố định",reset:"Làm lại",columnDisplay:"Cột hiển thị",columnSetting:"Cấu hình",fullScreen:"Chế độ toàn màn hình",exitFullScreen:"Thoát chế độ toàn màn hình",reload:"Làm mới",density:"Mật độ hiển thị",densityDefault:"Mặc định",densityLarger:"Mặc định",densityMiddle:"Trung bình",densitySmall:"Chật"},stepsForm:{next:"Sau",prev:"Trước",submit:"Kết thúc"},loginForm:{submitText:"Đăng nhập"},editableTable:{action:{save:"Cứu",cancel:"Hủy",delete:"Xóa",add:"thêm một hàng dữ liệu"}},switch:{open:"mở",close:"đóng"}},DP={moneySymbol:"¥",deleteThisLine:"删除此行",copyThisLine:"复制此行",form:{lightFilter:{more:"更多筛选",clear:"清除",confirm:"确认",itemUnit:"项"}},tableForm:{search:"查询",reset:"重置",submit:"提交",collapsed:"展开",expand:"收起",inputPlaceholder:"请输入",selectPlaceholder:"请选择"},alert:{clear:"取消选择",selected:"已选择",item:"项"},pagination:{total:{range:"第",total:"条/总共",item:"条"}},tableToolBar:{leftPin:"固定在列首",rightPin:"固定在列尾",noPin:"不固定",leftFixedTitle:"固定在左侧",rightFixedTitle:"固定在右侧",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列设置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默认",densityMiddle:"中等",densitySmall:"紧凑"},stepsForm:{next:"下一步",prev:"上一步",submit:"提交"},loginForm:{submitText:"登录"},editableTable:{onlyOneLineEditor:"只能同时编辑一行",action:{save:"保存",cancel:"取消",delete:"删除",add:"添加一行数据"}},switch:{open:"打开",close:"关闭"}},OP={moneySymbol:"NT$",form:{lightFilter:{more:"更多篩選",clear:"清除",confirm:"確認",itemUnit:"項"}},tableForm:{search:"查詢",reset:"重置",submit:"提交",collapsed:"展開",expand:"收起",inputPlaceholder:"請輸入",selectPlaceholder:"請選擇"},alert:{clear:"取消選擇",selected:"已選擇",item:"項"},pagination:{total:{range:"第",total:"條/總共",item:"條"}},tableToolBar:{leftPin:"固定到左邊",rightPin:"固定到右邊",noPin:"不固定",leftFixedTitle:"固定在左側",rightFixedTitle:"固定在右側",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列設置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默認",densityMiddle:"中等",densitySmall:"緊湊"},stepsForm:{next:"下一個",prev:"以前的",submit:"完成"},loginForm:{submitText:"登入"},editableTable:{action:{save:"保存",cancel:"取消",delete:"刪除",add:"添加一行數據"}},switch:{open:"打開",close:"關閉"}};function IP(e,t,r){var n=t.replace(/\[(\d+)\]/g,".$1").split("."),a=e,o=r,s=Rr(n),l;try{for(s.s();!(l=s.n()).done;){var u=l.value;if(o=Object(a)[u],a=Object(a)[u],o===void 0)return r}}catch(c){s.e(c)}finally{s.f()}return o}var Ht=function(t,r){return{getMessage:function(a,o){return IP(r,a,o)||o},locale:t}},_P=Ht("mn_MN",EP),LP=Ht("ar_EG",fP),Fl=Ht("zh_CN",DP),jP=Ht("en_US",hP),AP=Ht("en_GB",pP),KP=Ht("vi_VN",$P),VP=Ht("it_IT",SP),zP=Ht("ja_JP",wP),BP=Ht("es_ES",gP),HP=Ht("ca_ES",vP),WP=Ht("ru_RU",TP),UP=Ht("sr_RS",FP),YP=Ht("ms_MY",kP),GP=Ht("zh_TW",OP),qP=Ht("fr_FR",bP),XP=Ht("pt_BR",MP),ZP=Ht("ko_KR",PP),QP=Ht("id_ID",xP),JP=Ht("de_DE",mP),e8=Ht("fa_IR",yP),t8=Ht("tr_TR",NP),n8=Ht("pl_PL",RP),r8=Ht("hr_",CP),Wi={"mn-MN":_P,"ar-EG":LP,"zh-CN":Fl,"en-US":jP,"en-GB":AP,"vi-VN":KP,"it-IT":VP,"ja-JP":zP,"es-ES":BP,"ca-ES":HP,"ru-RU":WP,"sr-RS":UP,"ms-MY":YP,"zh-TW":GP,"fr-FR":qP,"pt-BR":XP,"ko-KR":ZP,"id-ID":QP,"de-DE":JP,"fa-IR":e8,"tr-TR":t8,"pl-PL":n8,"hr-HR":r8},a8=Object.keys(Wi),Wu=Z.createContext({intl:h(h({},Fl),{},{locale:"default"}),valueTypeMap:{}}),o8=Wu.Consumer,i8=Wu.Provider,_p=function(t){if(!t)return"zh-CN";var r=t.toLocaleLowerCase();return a8.find(function(n){var a=n.toLocaleLowerCase();return a.includes(r)})},l8=function(){var t=Hu(),r=t.cache;return i.useEffect(function(){return function(){r.clear()}},[]),null},s8=function(t){var r=t.children,n=t.autoClearCache,a=n===void 0?!1:n,o=i.useContext(pt.ConfigContext),s=o.locale,l=s===void 0?pt:Z.Fragment,u=x.jsx(o8,{children:function(d){var f,v=s==null?void 0:s.locale,m=_p(v),p=v&&((f=d.intl)===null||f===void 0?void 0:f.locale)==="default"?Wi[m]:d.intl||Wi[m],g=s===void 0?{locale:Cp}:{};return x.jsx(l,h(h({},g),{},{children:x.jsx(i8,{value:h(h({},d),{},{intl:p||Fl}),children:x.jsxs(x.Fragment,{children:[a&&x.jsx(l8,{}),r]})})}))}});return a?x.jsx(Op,{value:{provider:function(){return new Map}},children:u}):u};function qn(){var e=i.useContext(pt.ConfigContext),t=e.locale,r=i.useContext(Wu),n=r.intl;return n&&n.locale!=="default"?n:t!=null&&t.locale?Wi[_p(t.locale)]:Fl}var u8=function(e){yn(r,e);var t=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),s=0;s1?t-1:0),n=1;n1&&(w=lv(t),F=w.slice(1),$=pn(E,F),hn(E,F,$)),k=S?hn({},P,E,!0):E,R.next=13,r==null?void 0:r(t,M8({},n,k),n,o);case 13:return O=R.sent,m(!1),R.abrupt("return",O);case 18:return R.prev=18,R.t0=R.catch(2),console.log(R.t0),m(!1),R.abrupt("return",null);case 23:case"end":return R.stop()}},y,null,[[2,18]])}));function g(y){return p.apply(this,arguments)}return g}(),children:[v?x.jsx(La,{style:{marginRight:8}}):null,a||"保存"]},"save")}var j8=function(t){var r=t.recordKey,n=t.onDelete,a=t.row,o=t.children,s=t.deletePopconfirmMessage,l=Yn(function(){return!1}),u=U(l,2),c=u[0],d=u[1],f=Jt(xt(Ve().mark(function v(){var m;return Ve().wrap(function(g){for(;;)switch(g.prev=g.next){case 0:return g.prev=0,d(!0),g.next=4,n==null?void 0:n(r,a);case 4:return m=g.sent,d(!1),g.abrupt("return",m);case 9:return g.prev=9,g.t0=g.catch(0),console.log(g.t0),d(!1),g.abrupt("return",null);case 14:case"end":return g.stop()}},v,null,[[0,9]])})));return o!==!1?x.jsx(jg,{title:s,onConfirm:function(){return f()},children:x.jsxs("a",{children:[c?x.jsx(La,{style:{marginRight:8}}):null,o||"删除"]})},"delete"):null},A8=function(t){var r=t.recordKey,n=t.tableName,a=t.newLineConfig,o=t.editorType,s=t.onCancel,l=t.cancelEditable,u=t.row,c=t.cancelText,d=i.useContext(jp),f=zt.useFormInstance();return x.jsx("a",{onClick:function(){var v=xt(Ve().mark(function p(g){var y,b,C,S,P,E;return Ve().wrap(function(F){for(;;)switch(F.prev=F.next){case 0:return g.stopPropagation(),g.preventDefault(),b=o==="Map",C=[n,r].flat(1).filter(Boolean),S=((y=d.getFieldFormatValue)===null||y===void 0?void 0:y.call(d,C))||f.getFieldValue(C),P=b?hn({},C,S):S,F.next=8,s==null?void 0:s(r,P,u,a);case 8:return E=F.sent,l(r),f.setFieldsValue(B({},r,b?pn(u,C):u)),F.abrupt("return",E);case 12:case"end":return F.stop()}},p)}));function m(p){return v.apply(this,arguments)}return m}(),children:c||"取消"},"cancel")};function K8(e,t){var r=t.recordKey,n=t.newLineConfig,a=t.saveText,o=t.deleteText;return[x.jsx(L8,h(h({},t),{},{row:e,children:a}),"save"+r),(n==null?void 0:n.options.recordKey)!==r?x.jsx(j8,h(h({},t),{},{row:e,children:o}),"delete"+r):null,x.jsx(A8,h(h({},t),{},{row:e}),"cancel"+r)]}function V8(e){var t=i.useState(void 0),r=U(t,2),n=r[0],a=r[1],o=i.useRef(new Map),s=i.useRef(void 0);Kp(function(){var M=new Map,I=function L(j,_){j==null||j.forEach(function(K,z){var A,V=_==null?z.toString():_+"_"+z.toString();M.set(V,zn(e.getRowKey(K,-1))),M.set((A=zn(e.getRowKey(K,-1)))===null||A===void 0?void 0:A.toString(),V),e.childrenColumnName&&K[e.childrenColumnName]&&L(K[e.childrenColumnName],V)})};I(e.dataSource),o.current=M},[e.dataSource]),s.current=n;var l=e.type||"single",u=ap(e.dataSource,"children",e.getRowKey),c=U(u,1),d=c[0],f=kt([],{value:e.editableKeys,onChange:e.onChange?function(M){var I;e==null||(I=e.onChange)===null||I===void 0||I.call(e,M.filter(function(L){return L!==void 0}),M.map(function(L){return d(L)}).filter(function(L){return L!==void 0}))}:void 0}),v=U(f,2),m=v[0],p=v[1],g=i.useMemo(function(){var M=l==="single"?m==null?void 0:m.slice(0,1):m;return new Set(M)},[(m||[]).join(","),l]),y=Ii(m),b=Jt(function(M){var I,L,j,_,K=(I=e.getRowKey(M,M.index))===null||I===void 0||(L=I.toString)===null||L===void 0?void 0:L.call(I),z=(j=e.getRowKey(M,-1))===null||j===void 0||(_=j.toString)===null||_===void 0?void 0:_.call(j),A=m.map(function(H){return H==null?void 0:H.toString()}),V=(y==null?void 0:y.map(function(H){return H==null?void 0:H.toString()}))||[],X=e.tableName&&!!(V!=null&&V.includes(z))||!!(V!=null&&V.includes(K));return{recordKey:z,isEditable:e.tableName&&(A==null?void 0:A.includes(z))||(A==null?void 0:A.includes(K)),preIsEditable:X}}),C=Jt(function(M){return g.size>0&&l==="single"&&e.onlyOneLineEditorAlertMessage!==!1?(Bl.warn(e.onlyOneLineEditorAlertMessage||"只能同时编辑一行"),!1):(g.add(M),p(Array.from(g)),!0)}),S=Jt(function(){var M=xt(Ve().mark(function I(L,j){var _,K;return Ve().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:if(_=zn(L).toString(),K=o.current.get(_),!(!g.has(_)&&K&&(j??!0)&&e.tableName)){A.next=5;break}return S(K,!1),A.abrupt("return");case 5:return n&&n.options.recordKey===L&&a(void 0),g.delete(_),g.delete(zn(L)),p(Array.from(g)),A.abrupt("return",!0);case 10:case"end":return A.stop()}},I)}));return function(I,L){return M.apply(this,arguments)}}()),P=Uu(xt(Ve().mark(function M(){var I,L,j,_,K=arguments;return Ve().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:for(L=K.length,j=new Array(L),_=0;_0&&l==="single"&&e.onlyOneLineEditorAlertMessage!==!1)return Bl.warn(e.onlyOneLineEditorAlertMessage||"只能同时编辑一行"),!1;var L=e.getRowKey(M,-1);if(!L)throw tn(!!L,`请设置 recordCreatorProps.record 并返回一个唯一的key - https://procomponents.ant.design/components/editable-table#editable-%E6%96%B0%E5%BB%BA%E8%A1%8C`),new Error("请设置 recordCreatorProps.record 并返回一个唯一的key");if(g.add(L),p(Array.from(g)),(I==null?void 0:I.newRecordType)==="dataSource"||e.tableName){var j,_={data:e.dataSource,getRowKey:e.getRowKey,row:h(h({},M),{},{map_row_parentKey:I!=null&&I.parentKey?(j=zn(I==null?void 0:I.parentKey))===null||j===void 0?void 0:j.toString():void 0}),key:L,childrenColumnName:e.childrenColumnName||"children"};e.setDataSource(uo(_,(I==null?void 0:I.position)==="top"?"top":"update"))}else a({defaultValue:M,options:h(h({},I),{},{recordKey:L})});return!0}),F=qn(),$=(e==null?void 0:e.saveText)||F.getMessage("editableTable.action.save","保存"),k=(e==null?void 0:e.deleteText)||F.getMessage("editableTable.action.delete","删除"),O=(e==null?void 0:e.cancelText)||F.getMessage("editableTable.action.cancel","取消"),D=Jt(function(){var M=xt(Ve().mark(function I(L,j,_,K){var z,A,V,X,H,Q,Y;return Ve().wrap(function(q){for(;;)switch(q.prev=q.next){case 0:return X=K||s.current||{},H=X.options,q.next=3,e==null||(z=e.onSave)===null||z===void 0?void 0:z.call(e,L,j,_,K);case 3:if(Q=q.sent,S(L),!(!(H!=null&&H.parentKey)&&(H==null?void 0:H.recordKey)===L)){q.next=8;break}return(H==null?void 0:H.position)==="top"?e.setDataSource([j].concat(Ke(e.dataSource))):e.setDataSource([].concat(Ke(e.dataSource),[j])),q.abrupt("return",Q);case 8:return Y={data:e.dataSource,getRowKey:e.getRowKey,row:H?h(h({},j),{},{map_row_parentKey:(A=zn((V=H==null?void 0:H.parentKey)!==null&&V!==void 0?V:""))===null||A===void 0?void 0:A.toString()}):j,key:L,childrenColumnName:e.childrenColumnName||"children"},e.setDataSource(uo(Y,(H==null?void 0:H.position)==="top"?"top":"update")),q.abrupt("return",Q);case 11:case"end":return q.stop()}},I)}));return function(I,L,j,_){return M.apply(this,arguments)}}()),R=Jt(function(){var M=xt(Ve().mark(function I(L,j){var _,K,z;return Ve().wrap(function(V){for(;;)switch(V.prev=V.next){case 0:return K={data:e.dataSource,getRowKey:e.getRowKey,row:j,key:L,childrenColumnName:e.childrenColumnName||"children"},V.next=3,e==null||(_=e.onDelete)===null||_===void 0?void 0:_.call(e,L,j);case 3:return z=V.sent,V.next=6,S(L);case 6:return e.setDataSource(uo(K,"delete")),V.abrupt("return",z);case 8:case"end":return V.stop()}},I)}));return function(I,L){return M.apply(this,arguments)}}()),T=Jt(function(){var M=xt(Ve().mark(function I(L,j,_,K){var z,A;return Ve().wrap(function(X){for(;;)switch(X.prev=X.next){case 0:return X.next=2,e==null||(z=e.onCancel)===null||z===void 0?void 0:z.call(e,L,j,_,K);case 2:return A=X.sent,X.abrupt("return",A);case 4:case"end":return X.stop()}},I)}));return function(I,L,j,_){return M.apply(this,arguments)}}()),N=function(I){var L=e.getRowKey(I,I.index),j={saveText:$,cancelText:O,deleteText:k,addEditRecord:w,recordKey:L,cancelEditable:S,index:I.index,tableName:e.tableName,newLineConfig:n,onCancel:T,onDelete:R,onSave:D,editableKeys:m,setEditableRowKeys:p,deletePopconfirmMessage:e.deletePopconfirmMessage||"".concat(F.getMessage("deleteThisLine","删除此行"),"?")},_=K8(I,j);return e.actionRender?e.actionRender(I,j,{save:_[0],delete:_[1],cancel:_[2]}):_};return{editableKeys:m,setEditableRowKeys:p,isEditable:b,actionRender:N,startEditable:C,cancelEditable:S,addEditRecord:w,newLineRecord:n,preEditableKeys:y,onValuesChange:E}}var z8=function(t){return B8(t)==="map"?t:new Map(Object.entries(t||{}))};function B8(e){var t=Object.prototype.toString.call(e).match(/^\[object (.*)\]$/)[1].toLowerCase();return t==="string"&&He(e)==="object"?"object":e===null?"null":e===void 0?"undefined":t}var H8=function(t){var r=[],n=z8(t);return n.forEach(function(a,o){var s=n.get(o)||n.get("".concat(o));if(s){if(He(s)==="object"&&(s!=null&&s.text)){r.push({text:s==null?void 0:s.text,value:o,label:s==null?void 0:s.text,disabled:s.disabled});return}r.push({text:s,value:o})}}),r};var Pn={},qo={},W8=il,U8=sr,Y8=oa,G8="[object String]";function q8(e){return typeof e=="string"||!U8(e)&&Y8(e)&&W8(e)==G8}var X8=q8;function Z8(e){return function(t,r,n){for(var a=-1,o=Object(t),s=n(t),l=s.length;l--;){var u=s[e?l:++a];if(r(o[u],u,o)===!1)break}return t}}var Q8=Z8,J8=Q8,eE=J8(),Vp=eE,tE=Vp,nE=Wo;function rE(e,t){return e&&tE(e,t,nE)}var zp=rE,aE=pu;function oE(e){return typeof e=="function"?e:aE}var Bp=oE,iE=zp,lE=Bp;function sE(e,t){return e&&iE(e,lE(t))}var Yu=sE,uE=Hm,cE=uE(Object.getPrototypeOf,Object),Gu=cE,dE=il,fE=Gu,vE=oa,mE="[object Object]",pE=Function.prototype,hE=Object.prototype,Hp=pE.toString,gE=hE.hasOwnProperty,yE=Hp.call(Object);function bE(e){if(!vE(e)||dE(e)!=mE)return!1;var t=fE(e);if(t===null)return!0;var r=gE.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&Hp.call(r)==yE}var Wp=bE,CE=wl,xE=Ou,SE=1,wE=2;function PE(e,t,r,n){var a=r.length,o=a,s=!n;if(e==null)return!o;for(e=Object(e);a--;){var l=r[a];if(s&&l[2]?l[1]!==e[l[0]]:!(l[0]in e))return!1}for(;++a0&&arguments[0]!==void 0?arguments[0]:[],r=[];return(0,L5.default)(t,function(n){Array.isArray(n)?e(n).map(function(a){return r.push(a)}):(0,I5.default)(n)?(0,D5.default)(n,function(a,o){a===!0&&r.push(o),r.push(o+"-"+a)}):(0,N5.default)(n)&&r.push(n)}),r};qo.default=j5;var Xo={};function A5(e,t){for(var r=-1,n=e==null?0:e.length;++r1&&arguments[1]!==void 0?arguments[1]:[],n=t.default&&(0,WR.default)(t.default)||{};return r.map(function(a){var o=t[a];return o&&(0,BR.default)(o,function(s,l){n[l]||(n[l]={}),n[l]=UR({},n[l],o[l])}),a}),n};Xo.default=YR;var Jo={};Object.defineProperty(Jo,"__esModule",{value:!0});Jo.autoprefix=void 0;var GR=Yu,Xd=XR(GR),qR=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:"span";return function(n){rM(a,n);function a(){var o,s,l,u;nM(this,a);for(var c=arguments.length,d=Array(c),f=0;f1&&arguments[1]!==void 0?arguments[1]:"span";return function(n){uM(a,n);function a(){var o,s,l,u;sM(this,a);for(var c=arguments.length,d=Array(c),f=0;f1&&arguments[1]!==void 0?arguments[1]:!0;n[s]=l};return t===0&&a("first-child"),t===r-1&&a("last-child"),(t===0||t%2===0)&&a("even"),Math.abs(t%2)===1&&a("odd"),a("nth-child",t),n};Xu.default=dM;Object.defineProperty(Pn,"__esModule",{value:!0});Pn.ReactCSS=Pn.loop=Pn.handleActive=Pn.handleHover=Pn.hover=void 0;var fM=qo,vM=Wa(fM),mM=Xo,pM=Wa(mM),hM=Jo,gM=Wa(hM),yM=ei,oh=Wa(yM),bM=ti,CM=Wa(bM),xM=Xu,SM=Wa(xM);function Wa(e){return e&&e.__esModule?e:{default:e}}Pn.hover=oh.default;Pn.handleHover=oh.default;Pn.handleActive=CM.default;Pn.loop=SM.default;var wM=Pn.ReactCSS=function(t){for(var r=arguments.length,n=Array(r>1?r-1:0),a=1;a1?r[a-1]:void 0,s=a>2?r[2]:void 0;for(o=e.length>3&&typeof o=="function"?(a--,o):void 0,s&&pT(r[0],r[1],s)&&(o=a<3?void 0:o,a=1),t=Object(t);++nl?v=1:v=Math.round(f*100/l)/100,r.a!==v)return{h:r.h,s:r.s,l:r.l,a:v,source:"rgb"}}else{var m;if(d<0?m=0:d>s?m=1:m=Math.round(d*100/s)/100,a!==m)return{h:r.h,s:r.s,l:r.l,a:m,source:"rgb"}}return null},as={},PT=function(t,r,n,a){if(typeof document>"u"&&!a)return null;var o=a?new a:document.createElement("canvas");o.width=n*2,o.height=n*2;var s=o.getContext("2d");return s?(s.fillStyle=t,s.fillRect(0,0,o.width,o.height),s.fillStyle=r,s.fillRect(0,0,n,n),s.translate(n,n),s.fillRect(0,0,n,n),o.toDataURL()):null},ET=function(t,r,n,a){var o="".concat(t,"-").concat(r,"-").concat(n).concat(a?"-server":"");if(as[o])return as[o];var s=PT(t,r,n,a);return as[o]=s,s};function ko(e){"@babel/helpers - typeof";return ko=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ko(e)}function rf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),r.push.apply(r,n)}return r}function Mi(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Yi(e){return Yi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Yi(e)}var AT=function(e){OT(r,e);var t=IT(r);function r(){var n;NT(this,r);for(var a=arguments.length,o=new Array(a),s=0;ss)f=0;else{var v=-(d*100/s)+100;f=360*v/100}if(n.h!==f)return{h:f,s:n.s,l:n.l,a:n.a,source:"hsl"}}else{var m;if(c<0)m=0;else if(c>o)m=359;else{var p=c*100/o;m=360*p/100}if(n.h!==m)return{h:m,s:n.s,l:n.l,a:n.a,source:"hsl"}}return null};function Ta(e){"@babel/helpers - typeof";return Ta=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ta(e)}function VT(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function lf(e,t){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Gi(e){return Gi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Gi(e)}var XT=function(e){WT(r,e);var t=UT(r);function r(){var n;VT(this,r);for(var a=arguments.length,o=new Array(a),s=0;so&&(c=o),d<0?d=0:d>s&&(d=s);var f=c/o,v=1-d/s;return{h:r.h,s:f,v,a:r.a,source:"hsv"}};function Fa(e){"@babel/helpers - typeof";return Fa=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fa(e)}function aF(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function sf(e,t){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function qi(e){return qi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},qi(e)}var vF=function(e){sF(r,e);var t=uF(r);function r(n){var a;return aF(this,r),a=t.call(this,n),a.handleChange=function(o){typeof a.props.onChange=="function"&&a.throttle(a.props.onChange,rF(o,a.props.hsl,a.container),o)},a.handleMouseDown=function(o){a.handleChange(o);var s=a.getContainerRenderWindow();s.addEventListener("mousemove",a.handleChange),s.addEventListener("mouseup",a.handleMouseUp)},a.handleMouseUp=function(){a.unbindEventListeners()},a.throttle=nF(function(o,s,l){o(s,l)},50),a}return oF(r,[{key:"componentWillUnmount",value:function(){this.throttle.cancel(),this.unbindEventListeners()}},{key:"getContainerRenderWindow",value:function(){for(var a=this.container,o=window;!o.document.contains(a)&&o.parent!==o;)o=o.parent;return o}},{key:"unbindEventListeners",value:function(){var a=this.getContainerRenderWindow();a.removeEventListener("mousemove",this.handleChange),a.removeEventListener("mouseup",this.handleMouseUp)}},{key:"render",value:function(){var a=this,o=this.props.style||{},s=o.color,l=o.white,u=o.black,c=o.pointer,d=o.circle,f=Dr({default:{color:{absolute:"0px 0px 0px 0px",background:"hsl(".concat(this.props.hsl.h,",100%, 50%)"),borderRadius:this.props.radius},white:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius},black:{absolute:"0px 0px 0px 0px",boxShadow:this.props.shadow,borderRadius:this.props.radius},pointer:{position:"absolute",top:"".concat(-(this.props.hsv.v*100)+100,"%"),left:"".concat(this.props.hsv.s*100,"%"),cursor:"default"},circle:{width:"4px",height:"4px",boxShadow:`0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), - 0 0 1px 2px rgba(0,0,0,.4)`,borderRadius:"50%",cursor:"hand",transform:"translate(-2px, -2px)"}},custom:{color:s,white:l,black:u,pointer:c,circle:d}},{custom:!!this.props.style});return Z.createElement("div",{style:f.color,ref:function(m){return a.container=m},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},Z.createElement("style",null,` - .saturation-white { - background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0)); - background: linear-gradient(to right, #fff, rgba(255,255,255,0)); - } - .saturation-black { - background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0)); - background: linear-gradient(to top, #000, rgba(0,0,0,0)); - } - `),Z.createElement("div",{style:f.white,className:"saturation-white"},Z.createElement("div",{style:f.black,className:"saturation-black"}),Z.createElement("div",{style:f.pointer},this.props.pointer?Z.createElement(this.props.pointer,this.props):Z.createElement("div",{style:f.circle}))))}}]),r}(i.PureComponent||i.Component),mF=qp,pF=Gp,hF=Bp,gF=sr;function yF(e,t){var r=gF(e)?mF:pF;return r(e,hF(t))}var bF=yF,CF=bF;const xF=ja(CF);function Xi(e){"@babel/helpers - typeof";return Xi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xi(e)}var SF=/^\s+/,wF=/\s+$/;function at(e,t){if(e=e||"",t=t||{},e instanceof at)return e;if(!(this instanceof at))return new at(e,t);var r=PF(e);this._originalInput=e,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=Math.round(100*this._a)/100,this._format=t.format||r.format,this._gradientType=t.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=r.ok}at.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},getLuminance:function(){var t=this.toRgb(),r,n,a,o,s,l;return r=t.r/255,n=t.g/255,a=t.b/255,r<=.03928?o=r/12.92:o=Math.pow((r+.055)/1.055,2.4),n<=.03928?s=n/12.92:s=Math.pow((n+.055)/1.055,2.4),a<=.03928?l=a/12.92:l=Math.pow((a+.055)/1.055,2.4),.2126*o+.7152*s+.0722*l},setAlpha:function(t){return this._a=ch(t),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var t=cf(this._r,this._g,this._b);return{h:t.h*360,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=cf(this._r,this._g,this._b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.v*100);return this._a==1?"hsv("+r+", "+n+"%, "+a+"%)":"hsva("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHsl:function(){var t=uf(this._r,this._g,this._b);return{h:t.h*360,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=uf(this._r,this._g,this._b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.l*100);return this._a==1?"hsl("+r+", "+n+"%, "+a+"%)":"hsla("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(t){return df(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return MF(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(Vt(this._r,255)*100)+"%",g:Math.round(Vt(this._g,255)*100)+"%",b:Math.round(Vt(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(Vt(this._r,255)*100)+"%, "+Math.round(Vt(this._g,255)*100)+"%, "+Math.round(Vt(this._b,255)*100)+"%)":"rgba("+Math.round(Vt(this._r,255)*100)+"%, "+Math.round(Vt(this._g,255)*100)+"%, "+Math.round(Vt(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:KF[df(this._r,this._g,this._b,!0)]||!1},toFilter:function(t){var r="#"+ff(this._r,this._g,this._b,this._a),n=r,a=this._gradientType?"GradientType = 1, ":"";if(t){var o=at(t);n="#"+ff(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+a+"startColorstr="+r+",endColorstr="+n+")"},toString:function(t){var r=!!t;t=t||this._format;var n=!1,a=this._a<1&&this._a>=0,o=!r&&a&&(t==="hex"||t==="hex6"||t==="hex3"||t==="hex4"||t==="hex8"||t==="name");return o?t==="name"&&this._a===0?this.toName():this.toRgbString():(t==="rgb"&&(n=this.toRgbString()),t==="prgb"&&(n=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(n=this.toHexString()),t==="hex3"&&(n=this.toHexString(!0)),t==="hex4"&&(n=this.toHex8String(!0)),t==="hex8"&&(n=this.toHex8String()),t==="name"&&(n=this.toName()),t==="hsl"&&(n=this.toHslString()),t==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return at(this.toString())},_applyModification:function(t,r){var n=t.apply(null,[this].concat([].slice.call(r)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification($F,arguments)},brighten:function(){return this._applyModification(DF,arguments)},darken:function(){return this._applyModification(OF,arguments)},desaturate:function(){return this._applyModification(TF,arguments)},saturate:function(){return this._applyModification(FF,arguments)},greyscale:function(){return this._applyModification(NF,arguments)},spin:function(){return this._applyModification(IF,arguments)},_applyCombination:function(t,r){return t.apply(null,[this].concat([].slice.call(r)))},analogous:function(){return this._applyCombination(jF,arguments)},complement:function(){return this._applyCombination(_F,arguments)},monochromatic:function(){return this._applyCombination(AF,arguments)},splitcomplement:function(){return this._applyCombination(LF,arguments)},triad:function(){return this._applyCombination(vf,[3])},tetrad:function(){return this._applyCombination(vf,[4])}};at.fromRatio=function(e,t){if(Xi(e)=="object"){var r={};for(var n in e)e.hasOwnProperty(n)&&(n==="a"?r[n]=e[n]:r[n]=co(e[n]));e=r}return at(e,t)};function PF(e){var t={r:0,g:0,b:0},r=1,n=null,a=null,o=null,s=!1,l=!1;return typeof e=="string"&&(e=HF(e)),Xi(e)=="object"&&(er(e.r)&&er(e.g)&&er(e.b)?(t=EF(e.r,e.g,e.b),s=!0,l=String(e.r).substr(-1)==="%"?"prgb":"rgb"):er(e.h)&&er(e.s)&&er(e.v)?(n=co(e.s),a=co(e.v),t=RF(e.h,n,a),s=!0,l="hsv"):er(e.h)&&er(e.s)&&er(e.l)&&(n=co(e.s),o=co(e.l),t=kF(e.h,n,o),s=!0,l="hsl"),e.hasOwnProperty("a")&&(r=e.a)),r=ch(r),{ok:s,format:e.format||l,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}function EF(e,t,r){return{r:Vt(e,255)*255,g:Vt(t,255)*255,b:Vt(r,255)*255}}function uf(e,t,r){e=Vt(e,255),t=Vt(t,255),r=Vt(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),o,s,l=(n+a)/2;if(n==a)o=s=0;else{var u=n-a;switch(s=l>.5?u/(2-n-a):u/(n+a),n){case e:o=(t-r)/u+(t1&&(f-=1),f<1/6?c+(d-c)*6*f:f<1/2?d:f<2/3?c+(d-c)*(2/3-f)*6:c}if(t===0)n=a=o=r;else{var l=r<.5?r*(1+t):r+t-r*t,u=2*r-l;n=s(u,l,e+1/3),a=s(u,l,e),o=s(u,l,e-1/3)}return{r:n*255,g:a*255,b:o*255}}function cf(e,t,r){e=Vt(e,255),t=Vt(t,255),r=Vt(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),o,s,l=n,u=n-a;if(s=n===0?0:u/n,n==a)o=0;else{switch(n){case e:o=(t-r)/u+(t>1)+720)%360;--t;)n.h=(n.h+a)%360,o.push(at(n));return o}function AF(e,t){t=t||6;for(var r=at(e).toHsv(),n=r.h,a=r.s,o=r.v,s=[],l=1/t;t--;)s.push(at({h:n,s:a,v:o})),o=(o+l)%1;return s}at.mix=function(e,t,r){r=r===0?0:r||50;var n=at(e).toRgb(),a=at(t).toRgb(),o=r/100,s={r:(a.r-n.r)*o+n.r,g:(a.g-n.g)*o+n.g,b:(a.b-n.b)*o+n.b,a:(a.a-n.a)*o+n.a};return at(s)};at.readability=function(e,t){var r=at(e),n=at(t);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)};at.isReadable=function(e,t,r){var n=at.readability(e,t),a,o;switch(o=!1,a=WF(r),a.level+a.size){case"AAsmall":case"AAAlarge":o=n>=4.5;break;case"AAlarge":o=n>=3;break;case"AAAsmall":o=n>=7;break}return o};at.mostReadable=function(e,t,r){var n=null,a=0,o,s,l,u;r=r||{},s=r.includeFallbackColors,l=r.level,u=r.size;for(var c=0;ca&&(a=o,n=at(t[c]));return at.isReadable(e,n,{level:l,size:u})||!s?n:(r.includeFallbackColors=!1,at.mostReadable(e,["#fff","#000"],r))};var eu=at.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},KF=at.hexNames=VF(eu);function VF(e){var t={};for(var r in e)e.hasOwnProperty(r)&&(t[e[r]]=r);return t}function ch(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function Vt(e,t){zF(e)&&(e="100%");var r=BF(e);return e=Math.min(t,Math.max(0,parseFloat(e))),r&&(e=parseInt(e*t,10)/100),Math.abs(e-t)<1e-6?1:e%t/parseFloat(t)}function Dl(e){return Math.min(1,Math.max(0,e))}function vn(e){return parseInt(e,16)}function zF(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function BF(e){return typeof e=="string"&&e.indexOf("%")!=-1}function In(e){return e.length==1?"0"+e:""+e}function co(e){return e<=1&&(e=e*100+"%"),e}function dh(e){return Math.round(parseFloat(e)*255).toString(16)}function mf(e){return vn(e)/255}var Dn=function(){var e="[-\\+]?\\d+%?",t="[-\\+]?\\d*\\.\\d+%?",r="(?:"+t+")|(?:"+e+")",n="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?",a="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?";return{CSS_UNIT:new RegExp(r),rgb:new RegExp("rgb"+n),rgba:new RegExp("rgba"+a),hsl:new RegExp("hsl"+n),hsla:new RegExp("hsla"+a),hsv:new RegExp("hsv"+n),hsva:new RegExp("hsva"+a),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function er(e){return!!Dn.CSS_UNIT.exec(e)}function HF(e){e=e.replace(SF,"").replace(wF,"").toLowerCase();var t=!1;if(eu[e])e=eu[e],t=!0;else if(e=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=Dn.rgb.exec(e))?{r:r[1],g:r[2],b:r[3]}:(r=Dn.rgba.exec(e))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=Dn.hsl.exec(e))?{h:r[1],s:r[2],l:r[3]}:(r=Dn.hsla.exec(e))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=Dn.hsv.exec(e))?{h:r[1],s:r[2],v:r[3]}:(r=Dn.hsva.exec(e))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=Dn.hex8.exec(e))?{r:vn(r[1]),g:vn(r[2]),b:vn(r[3]),a:mf(r[4]),format:t?"name":"hex8"}:(r=Dn.hex6.exec(e))?{r:vn(r[1]),g:vn(r[2]),b:vn(r[3]),format:t?"name":"hex"}:(r=Dn.hex4.exec(e))?{r:vn(r[1]+""+r[1]),g:vn(r[2]+""+r[2]),b:vn(r[3]+""+r[3]),a:mf(r[4]+""+r[4]),format:t?"name":"hex8"}:(r=Dn.hex3.exec(e))?{r:vn(r[1]+""+r[1]),g:vn(r[2]+""+r[2]),b:vn(r[3]+""+r[3]),format:t?"name":"hex"}:!1}function WF(e){var t,r;return e=e||{level:"AA",size:"small"},t=(e.level||"AA").toUpperCase(),r=(e.size||"small").toLowerCase(),t!=="AA"&&t!=="AAA"&&(t="AA"),r!=="small"&&r!=="large"&&(r="small"),{level:t,size:r}}var pf=function(t){var r=["r","g","b","a","h","s","l","v"],n=0,a=0;return xF(r,function(o){if(t[o]&&(n+=1,isNaN(t[o])||(a+=1),o==="s"||o==="l")){var s=/^\d+%$/;s.test(t[o])&&(a+=1)}}),n===a?t:!1},Ti=function(t,r){var n=t.hex?at(t.hex):at(t),a=n.toHsl(),o=n.toHsv(),s=n.toRgb(),l=n.toHex();a.s===0&&(a.h=r||0,o.h=r||0);var u=l==="000000"&&s.a===0;return{hsl:a,hex:u?"transparent":"#".concat(l),rgb:s,hsv:o,oldHue:t.h||r||a.h,source:t.source}},UF=function(t){if(t==="transparent")return!0;var r=String(t).charAt(0)==="#"?1:0;return t.length!==4+r&&t.length<7+r&&at(t).isValid()};function Na(e){"@babel/helpers - typeof";return Na=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Na(e)}function tu(){return tu=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Zi(e){return Zi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Zi(e)}var nN=function(t){var r=function(n){ZF(o,n);var a=QF(o);function o(s){var l;return GF(this,o),l=a.call(this),l.handleChange=function(u,c){var d=pf(u);if(d){var f=Ti(u,u.h||l.state.oldHue);l.setState(f),l.props.onChangeComplete&&l.debounce(l.props.onChangeComplete,f,c),l.props.onChange&&l.props.onChange(f,c)}},l.handleSwatchHover=function(u,c){var d=pf(u);if(d){var f=Ti(u,u.h||l.state.oldHue);l.props.onSwatchHover&&l.props.onSwatchHover(f,c)}},l.state=oo({},Ti(s.color,0)),l.debounce=Fg(function(u,c,d){u(c,d)},100),l}return qF(o,[{key:"render",value:function(){var l={};return this.props.onSwatchHover&&(l.onSwatchHover=this.handleSwatchHover),Z.createElement(t,tu({},this.props,this.state,{onChange:this.handleChange},l))}}],[{key:"getDerivedStateFromProps",value:function(l,u){return oo({},Ti(l.color,u.oldHue))}}]),o}(i.PureComponent||i.Component);return r.propTypes=oo({},t.propTypes),r.defaultProps=oo(oo({},t.defaultProps),{},{color:{h:250,s:.5,l:.2,a:1}}),r};function $a(e){"@babel/helpers - typeof";return $a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$a(e)}function rN(e,t,r){return t=vh(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function aN(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yf(e,t){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Qi(e){return Qi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Qi(e)}var fN=1,mh=38,vN=40,mN=[mh,vN],pN=function(t){return mN.indexOf(t)>-1},hN=function(t){return Number(String(t).replace(/%/g,""))},gN=1,io=function(e){lN(r,e);var t=sN(r);function r(n){var a;return aN(this,r),a=t.call(this),a.handleBlur=function(){a.state.blurValue&&a.setState({value:a.state.blurValue,blurValue:null})},a.handleChange=function(o){a.setUpdatedValue(o.target.value,o)},a.handleKeyDown=function(o){var s=hN(o.target.value);if(!isNaN(s)&&pN(o.keyCode)){var l=a.getArrowOffset(),u=o.keyCode===mh?s+l:s-l;a.setUpdatedValue(u,o)}},a.handleDrag=function(o){if(a.props.dragLabel){var s=Math.round(a.props.value+o.movementX);s>=0&&s<=a.props.dragMax&&a.props.onChange&&a.props.onChange(a.getValueObjectWithLabel(s),o)}},a.handleMouseDown=function(o){a.props.dragLabel&&(o.preventDefault(),a.handleDrag(o),window.addEventListener("mousemove",a.handleDrag),window.addEventListener("mouseup",a.handleMouseUp))},a.handleMouseUp=function(){a.unbindEventListeners()},a.unbindEventListeners=function(){window.removeEventListener("mousemove",a.handleDrag),window.removeEventListener("mouseup",a.handleMouseUp)},a.state={value:String(n.value).toUpperCase(),blurValue:String(n.value).toUpperCase()},a.inputId="rc-editable-input-".concat(gN++),a}return oN(r,[{key:"componentDidUpdate",value:function(a,o){this.props.value!==this.state.value&&(a.value!==this.props.value||o.value!==this.state.value)&&(this.input===document.activeElement?this.setState({blurValue:String(this.props.value).toUpperCase()}):this.setState({value:String(this.props.value).toUpperCase(),blurValue:!this.state.blurValue&&String(this.props.value).toUpperCase()}))}},{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"getValueObjectWithLabel",value:function(a){return rN({},this.props.label,a)}},{key:"getArrowOffset",value:function(){return this.props.arrowOffset||fN}},{key:"setUpdatedValue",value:function(a,o){var s=this.props.label?this.getValueObjectWithLabel(a):a;this.props.onChange&&this.props.onChange(s,o),this.setState({value:a})}},{key:"render",value:function(){var a=this,o=Dr({default:{wrap:{position:"relative"}},"user-override":{wrap:this.props.style&&this.props.style.wrap?this.props.style.wrap:{},input:this.props.style&&this.props.style.input?this.props.style.input:{},label:this.props.style&&this.props.style.label?this.props.style.label:{}},"dragLabel-true":{label:{cursor:"ew-resize"}}},{"user-override":!0},this.props);return Z.createElement("div",{style:o.wrap},Z.createElement("input",{id:this.inputId,style:o.input,ref:function(l){return a.input=l},value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleChange,onBlur:this.handleBlur,placeholder:this.props.placeholder,spellCheck:"false"}),this.props.label&&!this.props.hideLabel?Z.createElement("label",{htmlFor:this.inputId,style:o.label,onMouseDown:this.handleMouseDown},this.props.label):null)}}]),r}(i.PureComponent||i.Component);function Da(e){"@babel/helpers - typeof";return Da=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Da(e)}function au(){return au=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ji(e){return Ji=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Ji(e)}var RN=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"span";return function(n){SN(o,n);var a=wN(o);function o(){var s;yN(this,o);for(var l=arguments.length,u=new Array(l),c=0;c100&&(d.a=100),d.a/=100,r==null||r({h:a==null?void 0:a.h,s:a==null?void 0:a.s,l:a==null?void 0:a.l,a:d.a,source:"rgb"},f))};return Z.createElement("div",{style:l.fields,className:"flexbox-fix"},Z.createElement("div",{style:l.double},Z.createElement(io,{style:{input:l.input,label:l.label},label:"hex",value:o==null?void 0:o.replace("#",""),onChange:u})),Z.createElement("div",{style:l.single},Z.createElement(io,{style:{input:l.input,label:l.label},label:"r",value:n==null?void 0:n.r,onChange:u,dragLabel:"true",dragMax:"255"})),Z.createElement("div",{style:l.single},Z.createElement(io,{style:{input:l.input,label:l.label},label:"g",value:n==null?void 0:n.g,onChange:u,dragLabel:"true",dragMax:"255"})),Z.createElement("div",{style:l.single},Z.createElement(io,{style:{input:l.input,label:l.label},label:"b",value:n==null?void 0:n.b,onChange:u,dragLabel:"true",dragMax:"255"})),Z.createElement("div",{style:l.alpha},Z.createElement(io,{style:{input:l.input,label:l.label},label:"a",value:Math.round(((n==null?void 0:n.a)||0)*100),onChange:u,dragLabel:"true",dragMax:"100"})))};function Mo(e){"@babel/helpers - typeof";return Mo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mo(e)}function Sf(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),r.push.apply(r,n)}return r}function wf(e){for(var t=1;t=0&&Te<=24),tt));return x.jsx("div",{style:h(h(h({},Le),fe(Re>0,{paddingRight:Re/2,paddingLeft:Re/2})),fe(Fe>0,{paddingTop:Fe/2,paddingBottom:Fe/2})),className:ye,children:Z.cloneElement(Ge)},"pro-card-col-".concat((Ge==null?void 0:Ge.key)||_e))}return Ge}),Qe=ve("".concat(se),o,(r={},B(r,"".concat(se,"-border"),O),B(r,"".concat(se,"-contain-card"),Se),B(r,"".concat(se,"-loading"),C),B(r,"".concat(se,"-split"),w==="vertical"||w==="horizontal"),B(r,"".concat(se,"-ghost"),M),B(r,"".concat(se,"-hoverable"),L),B(r,"".concat(se,"-size-").concat(R),R),B(r,"".concat(se,"-type-").concat(q),q),B(r,"".concat(se,"-collapse"),re),B(r,"".concat(se,"-checked"),Q),r)),et=ve("".concat(se,"-body"),(n={},B(n,"".concat(se,"-body-center"),b==="center"),B(n,"".concat(se,"-body-direction-column"),w==="horizontal"||j==="column"),B(n,"".concat(se,"-body-wrap"),y&&Se),n)),vt=h(h(h({},fe(Re>0,{marginRight:-Re/2,marginLeft:-Re/2})),fe(Fe>0,{marginTop:-Fe/2,marginBottom:-Fe/2})),u),ct=Z.isValidElement(C)?C:x.jsx(d9,{prefix:se,style:u.padding===0||u.padding==="0px"?{padding:24}:void 0}),ht=z&&_===void 0&&(A?A({collapsed:re}):x.jsx(Do,{rotate:re?void 0:90,className:"".concat(se,"-collapsible-icon")}));return x.jsxs("div",h(h({className:Qe,style:s,ref:t,onClick:function(_e){var mt;Y==null||Y(_e),ne==null||(mt=ne.onClick)===null||mt===void 0||mt.call(ne,_e)}},rn(ne,["prefixCls","colSpan"])),{},{children:[(f||m||ht)&&x.jsxs("div",{className:ve("".concat(se,"-header"),(a={},B(a,"".concat(se,"-header-border"),$||q==="inner"),B(a,"".concat(se,"-header-collapsible"),ht),a)),style:d,onClick:function(){ht&&ge(!re)},children:[x.jsxs("div",{className:"".concat(se,"-title"),children:[ht,x.jsx(Eo,{label:f,tooltip:E||p,subTitle:v})]}),m&&x.jsx("div",{className:"".concat(se,"-extra"),children:m})]}),ae?x.jsx("div",{className:"".concat(se,"-tabs"),children:x.jsx(ta,h(h({onChange:ae.onChange},ae),{},{items:me,children:C?ct:D}))}):x.jsx("div",{className:et,style:vt,children:C?ct:Pe}),x.jsx(u9,{actions:T,prefixCls:se})]}))});const Fo=m9;var p9=function(t){var r=i.useContext(pt.ConfigContext),n=r.getPrefixCls,a=n("pro-card-divider"),o=t.className,s=t.style,l=s===void 0?{}:s,u=t.type,c=ve(a,o,B({},"".concat(a,"-").concat(u),u));return x.jsx("div",{className:c,style:l})};const h9=p9;var g9=function(t){return x.jsx(Fo,h({bodyStyle:{padding:0}},t))},ni=Fo;ni.isProCard=!0;ni.Divider=h9;ni.TabPane=l9;ni.Group=g9;const y9=ni;const b9={moneySymbol:"$",form:{lightFilter:{more:"المزيد",clear:"نظف",confirm:"تأكيد",itemUnit:"عناصر"}},tableForm:{search:"ابحث",reset:"إعادة تعيين",submit:"ارسال",collapsed:"مُقلص",expand:"مُوسع",inputPlaceholder:"الرجاء الإدخال",selectPlaceholder:"الرجاء الإختيار"},alert:{clear:"نظف",selected:"محدد",item:"عنصر"},pagination:{total:{range:" ",total:"من",item:"عناصر"}},tableToolBar:{leftPin:"ثبت على اليسار",rightPin:"ثبت على اليمين",noPin:"الغاء التثبيت",leftFixedTitle:"لصق على اليسار",rightFixedTitle:"لصق على اليمين",noFixedTitle:"إلغاء الإلصاق",reset:"إعادة تعيين",columnDisplay:"الأعمدة المعروضة",columnSetting:"الإعدادات",fullScreen:"وضع كامل الشاشة",exitFullScreen:"الخروج من وضع كامل الشاشة",reload:"تحديث",density:"الكثافة",densityDefault:"افتراضي",densityLarger:"أكبر",densityMiddle:"وسط",densitySmall:"مدمج"},stepsForm:{next:"التالي",prev:"السابق",submit:"أنهى"},loginForm:{submitText:"تسجيل الدخول"},editableTable:{action:{save:"أنقذ",cancel:"إلغاء الأمر",delete:"حذف",add:"إضافة صف من البيانات"}},switch:{open:"مفتوح",close:"غلق"}},C9={moneySymbol:"€",form:{lightFilter:{more:"Máis",clear:"Limpar",confirm:"Confirmar",itemUnit:"Elementos"}},tableForm:{search:"Cercar",reset:"Netejar",submit:"Enviar",collapsed:"Expandir",expand:"Col·lapsar",inputPlaceholder:"Introduïu valor",selectPlaceholder:"Seleccioneu valor"},alert:{clear:"Netejar",selected:"Seleccionat",item:"Article"},pagination:{total:{range:" ",total:"de",item:"articles"}},tableToolBar:{leftPin:"Pin a l'esquerra",rightPin:"Pin a la dreta",noPin:"Sense Pin",leftFixedTitle:"Fixat a l'esquerra",rightFixedTitle:"Fixat a la dreta",noFixedTitle:"Sense fixar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuració",fullScreen:"Pantalla Completa",exitFullScreen:"Sortir Pantalla Completa",reload:"Refrescar",density:"Densitat",densityDefault:"Per Defecte",densityLarger:"Llarg",densityMiddle:"Mitjà",densitySmall:"Compacte"},stepsForm:{next:"Següent",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Gardar",cancel:"Cancelar",delete:"Eliminar",add:"engadir unha fila de datos"}},switch:{open:"aberto",close:"pechar"}},x9={moneySymbol:"€",form:{lightFilter:{more:"Mehr",clear:"Zurücksetzen",confirm:"Bestätigen",itemUnit:"Einträge"}},tableForm:{search:"Suchen",reset:"Zurücksetzen",submit:"Absenden",collapsed:"Zeige mehr",expand:"Zeige weniger",inputPlaceholder:"Bitte eingeben",selectPlaceholder:"Bitte auswählen"},alert:{clear:"Zurücksetzen",selected:"Ausgewählt",item:"Eintrag"},pagination:{total:{range:" ",total:"von",item:"Einträgen"}},tableToolBar:{leftPin:"Links anheften",rightPin:"Rechts anheften",noPin:"Nicht angeheftet",leftFixedTitle:"Links fixiert",rightFixedTitle:"Rechts fixiert",noFixedTitle:"Nicht fixiert",reset:"Zurücksetzen",columnDisplay:"Angezeigte Reihen",columnSetting:"Einstellungen",fullScreen:"Vollbild",exitFullScreen:"Vollbild verlassen",reload:"Aktualisieren",density:"Abstand",densityDefault:"Standard",densityLarger:"Größer",densityMiddle:"Mittel",densitySmall:"Kompakt"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Anmelden"},editableTable:{action:{save:"Retten",cancel:"Abbrechen",delete:"Löschen",add:"Hinzufügen einer Datenzeile"}},switch:{open:"offen",close:"schließen"}},S9={moneySymbol:"£",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},w9={moneySymbol:"$",deleteThisLine:"Delete this line",copyThisLine:"Copy this line",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{onlyOneLineEditor:"Only one line can be edited",action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},P9={moneySymbol:"€",form:{lightFilter:{more:"Más",clear:"Limpiar",confirm:"Confirmar",itemUnit:"artículos"}},tableForm:{search:"Buscar",reset:"Limpiar",submit:"Submit",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Ingrese valor",selectPlaceholder:"Seleccione valor"},alert:{clear:"Limpiar",selected:"Seleccionado",item:"Articulo"},pagination:{total:{range:" ",total:"de",item:"artículos"}},tableToolBar:{leftPin:"Pin a la izquierda",rightPin:"Pin a la derecha",noPin:"Sin Pin",leftFixedTitle:"Fijado a la izquierda",rightFixedTitle:"Fijado a la derecha",noFixedTitle:"Sin Fijar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuración",fullScreen:"Pantalla Completa",exitFullScreen:"Salir Pantalla Completa",reload:"Refrescar",density:"Densidad",densityDefault:"Por Defecto",densityLarger:"Largo",densityMiddle:"Medio",densitySmall:"Compacto"},stepsForm:{next:"Siguiente",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Guardar",cancel:"Descartar",delete:"Borrar",add:"añadir una fila de datos"}},switch:{open:"abrir",close:"cerrar"}},E9={moneySymbol:"تومان",form:{lightFilter:{more:"بیشتر",clear:"پاک کردن",confirm:"تایید",itemUnit:"مورد"}},tableForm:{search:"جستجو",reset:"بازنشانی",submit:"تایید",collapsed:"نمایش بیشتر",expand:"نمایش کمتر",inputPlaceholder:"پیدا کنید",selectPlaceholder:"انتخاب کنید"},alert:{clear:"پاک سازی",selected:"انتخاب",item:"مورد"},pagination:{total:{range:" ",total:"از",item:"مورد"}},tableToolBar:{leftPin:"سنجاق به چپ",rightPin:"سنجاق به راست",noPin:"سنجاق نشده",leftFixedTitle:"ثابت شده در چپ",rightFixedTitle:"ثابت شده در راست",noFixedTitle:"شناور",reset:"بازنشانی",columnDisplay:"نمایش همه",columnSetting:"تنظیمات",fullScreen:"تمام صفحه",exitFullScreen:"خروج از حالت تمام صفحه",reload:"تازه سازی",density:"تراکم",densityDefault:"پیش فرض",densityLarger:"بزرگ",densityMiddle:"متوسط",densitySmall:"کوچک"},stepsForm:{next:"بعدی",prev:"قبلی",submit:"اتمام"},loginForm:{submitText:"ورود"},editableTable:{action:{save:"ذخیره",cancel:"لغو",delete:"حذف",add:"یک ردیف داده اضافه کنید"}},switch:{open:"باز",close:"نزدیک"}},k9={moneySymbol:"€",form:{lightFilter:{more:"Plus",clear:"Effacer",confirm:"Confirmer",itemUnit:"Items"}},tableForm:{search:"Rechercher",reset:"Réinitialiser",submit:"Envoyer",collapsed:"Agrandir",expand:"Réduire",inputPlaceholder:"Entrer une valeur",selectPlaceholder:"Sélectionner une valeur"},alert:{clear:"Réinitialiser",selected:"Sélectionné",item:"Item"},pagination:{total:{range:" ",total:"sur",item:"éléments"}},tableToolBar:{leftPin:"Épingler à gauche",rightPin:"Épingler à gauche",noPin:"Sans épingle",leftFixedTitle:"Fixer à gauche",rightFixedTitle:"Fixer à droite",noFixedTitle:"Non fixé",reset:"Réinitialiser",columnDisplay:"Affichage colonne",columnSetting:"Réglages",fullScreen:"Plein écran",exitFullScreen:"Quitter Plein écran",reload:"Rafraichir",density:"Densité",densityDefault:"Par défaut",densityLarger:"Larger",densityMiddle:"Moyenne",densitySmall:"Compacte"},stepsForm:{next:"Suivante",prev:"Précédente",submit:"Finaliser"},loginForm:{submitText:"Se connecter"},editableTable:{action:{save:"Sauvegarder",cancel:"Annuler",delete:"Supprimer",add:"ajouter une ligne de données"}},switch:{open:"ouvert",close:"près"}},R9={moneySymbol:"kn",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pretraži",reset:"Poništi",submit:"Potvrdi",collapsed:"Raširi",expand:"Skupi",inputPlaceholder:"Unesite",selectPlaceholder:"Odaberite"},alert:{clear:"Očisti",selected:"Odaberi",item:"stavke"},pagination:{total:{range:" ",total:"od",item:"stavke"}},tableToolBar:{leftPin:"Prikači lijevo",rightPin:"Prikači desno",noPin:"Bez prikačenja",leftFixedTitle:"Fiksiraj lijevo",rightFixedTitle:"Fiksiraj desno",noFixedTitle:"Bez fiksiranja",reset:"Resetiraj",columnDisplay:"Prikaz stupaca",columnSetting:"Postavke",fullScreen:"Puni zaslon",exitFullScreen:"Izađi iz punog zaslona",reload:"Ponovno učitaj",density:"Veličina",densityDefault:"Zadano",densityLarger:"Veliko",densityMiddle:"Srednje",densitySmall:"Malo"},stepsForm:{next:"Sljedeći",prev:"Prethodni",submit:"Kraj"},loginForm:{submitText:"Prijava"},editableTable:{action:{save:"Spremi",cancel:"Odustani",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"otvori",close:"zatvori"}},M9={moneySymbol:"RP",form:{lightFilter:{more:"Lebih",clear:"Hapus",confirm:"Konfirmasi",itemUnit:"Unit"}},tableForm:{search:"Cari",reset:"Atur ulang",submit:"Kirim",collapsed:"Lebih sedikit",expand:"Lebih banyak",inputPlaceholder:"Masukkan pencarian",selectPlaceholder:"Pilih"},alert:{clear:"Hapus",selected:"Dipilih",item:"Butir"},pagination:{total:{range:" ",total:"Dari",item:"Butir"}},tableToolBar:{leftPin:"Pin kiri",rightPin:"Pin kanan",noPin:"Tidak ada pin",leftFixedTitle:"Rata kiri",rightFixedTitle:"Rata kanan",noFixedTitle:"Tidak tetap",reset:"Atur ulang",columnDisplay:"Tampilan kolom",columnSetting:"Pengaturan",fullScreen:"Layar penuh",exitFullScreen:"Keluar layar penuh",reload:"Atur ulang",density:"Kerapatan",densityDefault:"Standar",densityLarger:"Lebih besar",densityMiddle:"Sedang",densitySmall:"Rapat"},stepsForm:{next:"Selanjutnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Login"},editableTable:{action:{save:"simpan",cancel:"batal",delete:"hapus",add:"Tambahkan baris data"}},switch:{open:"buka",close:"tutup"}},T9={moneySymbol:"€",form:{lightFilter:{more:"più",clear:"pulisci",confirm:"conferma",itemUnit:"elementi"}},tableForm:{search:"Filtra",reset:"Pulisci",submit:"Invia",collapsed:"Espandi",expand:"Contrai",inputPlaceholder:"Digita",selectPlaceholder:"Seleziona"},alert:{clear:"Rimuovi",selected:"Selezionati",item:"elementi"},pagination:{total:{range:" ",total:"di",item:"elementi"}},tableToolBar:{leftPin:"Fissa a sinistra",rightPin:"Fissa a destra",noPin:"Ripristina posizione",leftFixedTitle:"Fissato a sinistra",rightFixedTitle:"Fissato a destra",noFixedTitle:"Non fissato",reset:"Ripristina",columnDisplay:"Disposizione colonne",columnSetting:"Impostazioni",fullScreen:"Modalità schermo intero",exitFullScreen:"Esci da modalità schermo intero",reload:"Ricarica",density:"Grandezza tabella",densityDefault:"predefinito",densityLarger:"Grande",densityMiddle:"Media",densitySmall:"Compatta"},stepsForm:{next:"successivo",prev:"precedente",submit:"finisci"},loginForm:{submitText:"Accedi"},editableTable:{action:{save:"salva",cancel:"annulla",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"chiudi"}},F9={moneySymbol:"¥",form:{lightFilter:{more:"もっと",clear:"明確",confirm:"確認",itemUnit:"項目"}},tableForm:{search:"検索",reset:"リセット",submit:"提交",collapsed:"展開",expand:"収納",inputPlaceholder:"入力してください",selectPlaceholder:"選択してください"},alert:{clear:"クリア",selected:"選択した",item:"項目"},pagination:{total:{range:"記事",total:"/合計",item:" "}},tableToolBar:{leftPin:"左に固定",rightPin:"右に固定",noPin:"キャンセル",leftFixedTitle:"左に固定された項目",rightFixedTitle:"右に固定された項目",noFixedTitle:"固定されてない項目",reset:"リセット",columnDisplay:"表示列",columnSetting:"列表示設定",fullScreen:"フルスクリーン",exitFullScreen:"終了",reload:"更新",density:"行高",densityDefault:"デフォルト",densityLarger:"默认",densityMiddle:"中",densitySmall:"小"},stepsForm:{next:"次のステップ",prev:"前",submit:"送信"},loginForm:{submitText:"ログイン"},editableTable:{action:{save:"救う",cancel:"キャンセル",delete:"削除",add:"1行のデータを追加します"}},switch:{open:"オープン",close:"近い"}},N9={moneySymbol:"₩",form:{lightFilter:{more:"더보기",clear:"취소",confirm:"확인",itemUnit:"건수"}},tableForm:{search:"조회",reset:"초기화",submit:"제출",collapsed:"확장",expand:"닫기",inputPlaceholder:"입력해 주세요",selectPlaceholder:"선택해 주세요"},alert:{clear:"취소",selected:"선택",item:"건"},pagination:{total:{range:" ",total:"/ 총",item:"건"}},tableToolBar:{leftPin:"왼쪽으로 핀",rightPin:"오른쪽으로 핀",noPin:"핀 제거",leftFixedTitle:"왼쪽으로 고정",rightFixedTitle:"오른쪽으로 고정",noFixedTitle:"비고정",reset:"초기화",columnDisplay:"컬럼 표시",columnSetting:"설정",fullScreen:"전체 화면",exitFullScreen:"전체 화면 취소",reload:"다시 읽기",density:"여백",densityDefault:"기본",densityLarger:"많은 여백",densityMiddle:"중간 여백",densitySmall:"좁은 여백"},stepsForm:{next:"다음",prev:"이전",submit:"종료"},loginForm:{submitText:"로그인"},editableTable:{action:{save:"저장",cancel:"취소",delete:"삭제",add:"데이터 행 추가"}},switch:{open:"열",close:"가까 운"}},$9={moneySymbol:"₮",form:{lightFilter:{more:"Илүү",clear:"Цэвэрлэх",confirm:"Баталгаажуулах",itemUnit:"Нэгжүүд"}},tableForm:{search:"Хайх",reset:"Шинэчлэх",submit:"Илгээх",collapsed:"Өргөтгөх",expand:"Хураах",inputPlaceholder:"Утга оруулна уу",selectPlaceholder:"Утга сонгоно уу"},alert:{clear:"Цэвэрлэх",selected:"Сонгогдсон",item:"Нэгж"},pagination:{total:{range:" ",total:"Нийт",item:"мөр"}},tableToolBar:{leftPin:"Зүүн тийш бэхлэх",rightPin:"Баруун тийш бэхлэх",noPin:"Бэхлэхгүй",leftFixedTitle:"Зүүн зэрэгцүүлэх",rightFixedTitle:"Баруун зэрэгцүүлэх",noFixedTitle:"Зэрэгцүүлэхгүй",reset:"Шинэчлэх",columnDisplay:"Баганаар харуулах",columnSetting:"Тохиргоо",fullScreen:"Бүтэн дэлгэцээр",exitFullScreen:"Бүтэн дэлгэц цуцлах",reload:"Шинэчлэх",density:"Хэмжээ",densityDefault:"Хэвийн",densityLarger:"Том",densityMiddle:"Дунд",densitySmall:"Жижиг"},stepsForm:{next:"Дараах",prev:"Өмнөх",submit:"Дуусгах"},loginForm:{submitText:"Нэвтрэх"},editableTable:{action:{save:"Хадгалах",cancel:"Цуцлах",delete:"Устгах",add:"Мөр нэмэх"}},switch:{open:"Нээх",close:"Хаах"}},D9={moneySymbol:"RM",form:{lightFilter:{more:"Lebih banyak",clear:"Jelas",confirm:"Mengesahkan",itemUnit:"Item"}},tableForm:{search:"Cari",reset:"Menetapkan semula",submit:"Hantar",collapsed:"Kembang",expand:"Kuncup",inputPlaceholder:"Sila masuk",selectPlaceholder:"Sila pilih"},alert:{clear:"Padam",selected:"Dipilih",item:"Item"},pagination:{total:{range:" ",total:"daripada",item:"item"}},tableToolBar:{leftPin:"Pin ke kiri",rightPin:"Pin ke kanan",noPin:"Tidak pin",leftFixedTitle:"Tetap ke kiri",rightFixedTitle:"Tetap ke kanan",noFixedTitle:"Tidak Tetap",reset:"Menetapkan semula",columnDisplay:"Lajur",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Keluar Full Screen",reload:"Muat Semula",density:"Densiti",densityDefault:"Biasa",densityLarger:"Besar",densityMiddle:"Tengah",densitySmall:"Kecil"},stepsForm:{next:"Seterusnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Log Masuk"},editableTable:{action:{save:"Simpan",cancel:"Membatalkan",delete:"Menghapuskan",add:"tambah baris data"}},switch:{open:"Terbuka",close:"Tutup"}},O9={moneySymbol:"zł",form:{lightFilter:{more:"Więcej",clear:"Wyczyść",confirm:"Potwierdź",itemUnit:"Ilość"}},tableForm:{search:"Szukaj",reset:"Reset",submit:"Zatwierdź",collapsed:"Pokaż wiecej",expand:"Pokaż mniej",inputPlaceholder:"Proszę podać",selectPlaceholder:"Proszę wybrać"},alert:{clear:"Wyczyść",selected:"Wybrane",item:"Wpis"},pagination:{total:{range:" ",total:"z",item:"Wpisów"}},tableToolBar:{leftPin:"Przypnij do lewej",rightPin:"Przypnij do prawej",noPin:"Odepnij",leftFixedTitle:"Przypięte do lewej",rightFixedTitle:"Przypięte do prawej",noFixedTitle:"Nieprzypięte",reset:"Reset",columnDisplay:"Wyświetlane wiersze",columnSetting:"Ustawienia",fullScreen:"Pełen ekran",exitFullScreen:"Zamknij pełen ekran",reload:"Odśwież",density:"Odstęp",densityDefault:"Standard",densityLarger:"Wiekszy",densityMiddle:"Sredni",densitySmall:"Kompaktowy"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Zaloguj się"},editableTable:{action:{save:"Zapisać",cancel:"Anuluj",delete:"Usunąć",add:"dodawanie wiersza danych"}},switch:{open:"otwierać",close:"zamykać"}},I9={moneySymbol:"R$",form:{lightFilter:{more:"Mais",clear:"Limpar",confirm:"Confirmar",itemUnit:"Itens"}},tableForm:{search:"Filtrar",reset:"Limpar",submit:"Confirmar",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Por favor insira",selectPlaceholder:"Por favor selecione"},alert:{clear:"Limpar",selected:"Selecionado(s)",item:"Item(s)"},pagination:{total:{range:" ",total:"de",item:"itens"}},tableToolBar:{leftPin:"Fixar à esquerda",rightPin:"Fixar à direita",noPin:"Desfixado",leftFixedTitle:"Fixado à esquerda",rightFixedTitle:"Fixado à direita",noFixedTitle:"Não fixado",reset:"Limpar",columnDisplay:"Mostrar Coluna",columnSetting:"Configurações",fullScreen:"Tela Cheia",exitFullScreen:"Sair da Tela Cheia",reload:"Atualizar",density:"Densidade",densityDefault:"Padrão",densityLarger:"Largo",densityMiddle:"Médio",densitySmall:"Compacto"},stepsForm:{next:"Próximo",prev:"Anterior",submit:"Enviar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Salvar",cancel:"Cancelar",delete:"Apagar",add:"adicionar uma linha de dados"}},switch:{open:"abrir",close:"fechar"}},_9={moneySymbol:"₽",form:{lightFilter:{more:"Еще",clear:"Очистить",confirm:"ОК",itemUnit:"Позиции"}},tableForm:{search:"Найти",reset:"Сброс",submit:"Отправить",collapsed:"Развернуть",expand:"Свернуть",inputPlaceholder:"Введите значение",selectPlaceholder:"Выберите значение"},alert:{clear:"Очистить",selected:"Выбрано",item:"элементов"},pagination:{total:{range:" ",total:"из",item:"элементов"}},tableToolBar:{leftPin:"Закрепить слева",rightPin:"Закрепить справа",noPin:"Открепить",leftFixedTitle:"Закреплено слева",rightFixedTitle:"Закреплено справа",noFixedTitle:"Не закреплено",reset:"Сброс",columnDisplay:"Отображение столбца",columnSetting:"Настройки",fullScreen:"Полный экран",exitFullScreen:"Выйти из полноэкранного режима",reload:"Обновить",density:"Размер",densityDefault:"По умолчанию",densityLarger:"Большой",densityMiddle:"Средний",densitySmall:"Сжатый"},stepsForm:{next:"Следующий",prev:"Предыдущий",submit:"Завершить"},loginForm:{submitText:"Вход"},editableTable:{action:{save:"Сохранить",cancel:"Отменить",delete:"Удалить",add:"добавить ряд данных"}},switch:{open:"Открытый чемпионат мира по теннису",close:"По адресу:"}},L9={moneySymbol:"RSD",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pronađi",reset:"Resetuj",submit:"Pošalji",collapsed:"Proširi",expand:"Skupi",inputPlaceholder:"Molimo unesite",selectPlaceholder:"Molimo odaberite"},alert:{clear:"Očisti",selected:"Odabrano",item:"Stavka"},pagination:{total:{range:" ",total:"od",item:"stavki"}},tableToolBar:{leftPin:"Zakači levo",rightPin:"Zakači desno",noPin:"Nije zakačeno",leftFixedTitle:"Fiksirano levo",rightFixedTitle:"Fiksirano desno",noFixedTitle:"Nije fiksirano",reset:"Resetuj",columnDisplay:"Prikaz kolona",columnSetting:"Podešavanja",fullScreen:"Pun ekran",exitFullScreen:"Zatvori pun ekran",reload:"Osveži",density:"Veličina",densityDefault:"Podrazumevana",densityLarger:"Veća",densityMiddle:"Srednja",densitySmall:"Kompaktna"},stepsForm:{next:"Dalje",prev:"Nazad",submit:"Gotovo"},loginForm:{submitText:"Prijavi se"},editableTable:{action:{save:"Sačuvaj",cancel:"Poništi",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"Отворите",close:"Затворите"}},j9={moneySymbol:"₺",form:{lightFilter:{more:"Daha Fazla",clear:"Temizle",confirm:"Onayla",itemUnit:"Öğeler"}},tableForm:{search:"Filtrele",reset:"Sıfırla",submit:"Gönder",collapsed:"Daha fazla",expand:"Daha az",inputPlaceholder:"Filtrelemek için bir değer girin",selectPlaceholder:"Filtrelemek için bir değer seçin"},alert:{clear:"Temizle",selected:"Seçili",item:"Öğe"},pagination:{total:{range:" ",total:"Toplam",item:"Öğe"}},tableToolBar:{leftPin:"Sola sabitle",rightPin:"Sağa sabitle",noPin:"Sabitlemeyi kaldır",leftFixedTitle:"Sola sabitlendi",rightFixedTitle:"Sağa sabitlendi",noFixedTitle:"Sabitlenmedi",reset:"Sıfırla",columnDisplay:"Kolon Görünümü",columnSetting:"Ayarlar",fullScreen:"Tam Ekran",exitFullScreen:"Tam Ekrandan Çık",reload:"Yenile",density:"Kalınlık",densityDefault:"Varsayılan",densityLarger:"Büyük",densityMiddle:"Orta",densitySmall:"Küçük"},stepsForm:{next:"Sıradaki",prev:"Önceki",submit:"Gönder"},loginForm:{submitText:"Giriş Yap"},editableTable:{action:{save:"Kaydet",cancel:"Vazgeç",delete:"Sil",add:"foegje in rige gegevens ta"}},switch:{open:"açık",close:"kapatmak"}},A9={moneySymbol:"₫",form:{lightFilter:{more:"Nhiều hơn",clear:"Trong",confirm:"Xác nhận",itemUnit:"Mục"}},tableForm:{search:"Tìm kiếm",reset:"Làm lại",submit:"Gửi đi",collapsed:"Mở rộng",expand:"Thu gọn",inputPlaceholder:"nhập dữ liệu",selectPlaceholder:"Vui lòng chọn"},alert:{clear:"Xóa",selected:"đã chọn",item:"mục"},pagination:{total:{range:" ",total:"trên",item:"mặt hàng"}},tableToolBar:{leftPin:"Ghim trái",rightPin:"Ghim phải",noPin:"Bỏ ghim",leftFixedTitle:"Cố định trái",rightFixedTitle:"Cố định phải",noFixedTitle:"Chưa cố định",reset:"Làm lại",columnDisplay:"Cột hiển thị",columnSetting:"Cấu hình",fullScreen:"Chế độ toàn màn hình",exitFullScreen:"Thoát chế độ toàn màn hình",reload:"Làm mới",density:"Mật độ hiển thị",densityDefault:"Mặc định",densityLarger:"Mặc định",densityMiddle:"Trung bình",densitySmall:"Chật"},stepsForm:{next:"Sau",prev:"Trước",submit:"Kết thúc"},loginForm:{submitText:"Đăng nhập"},editableTable:{action:{save:"Cứu",cancel:"Hủy",delete:"Xóa",add:"thêm một hàng dữ liệu"}},switch:{open:"mở",close:"đóng"}},K9={moneySymbol:"¥",deleteThisLine:"删除此行",copyThisLine:"复制此行",form:{lightFilter:{more:"更多筛选",clear:"清除",confirm:"确认",itemUnit:"项"}},tableForm:{search:"查询",reset:"重置",submit:"提交",collapsed:"展开",expand:"收起",inputPlaceholder:"请输入",selectPlaceholder:"请选择"},alert:{clear:"取消选择",selected:"已选择",item:"项"},pagination:{total:{range:"第",total:"条/总共",item:"条"}},tableToolBar:{leftPin:"固定在列首",rightPin:"固定在列尾",noPin:"不固定",leftFixedTitle:"固定在左侧",rightFixedTitle:"固定在右侧",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列设置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默认",densityMiddle:"中等",densitySmall:"紧凑"},stepsForm:{next:"下一步",prev:"上一步",submit:"提交"},loginForm:{submitText:"登录"},editableTable:{onlyOneLineEditor:"只能同时编辑一行",action:{save:"保存",cancel:"取消",delete:"删除",add:"添加一行数据"}},switch:{open:"打开",close:"关闭"}},V9={moneySymbol:"NT$",form:{lightFilter:{more:"更多篩選",clear:"清除",confirm:"確認",itemUnit:"項"}},tableForm:{search:"查詢",reset:"重置",submit:"提交",collapsed:"展開",expand:"收起",inputPlaceholder:"請輸入",selectPlaceholder:"請選擇"},alert:{clear:"取消選擇",selected:"已選擇",item:"項"},pagination:{total:{range:"第",total:"條/總共",item:"條"}},tableToolBar:{leftPin:"固定到左邊",rightPin:"固定到右邊",noPin:"不固定",leftFixedTitle:"固定在左側",rightFixedTitle:"固定在右側",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列設置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默認",densityMiddle:"中等",densitySmall:"緊湊"},stepsForm:{next:"下一個",prev:"以前的",submit:"完成"},loginForm:{submitText:"登入"},editableTable:{action:{save:"保存",cancel:"取消",delete:"刪除",add:"添加一行數據"}},switch:{open:"打開",close:"關閉"}};function z9(e,t,r){var n=t.replace(/\[(\d+)\]/g,".$1").split("."),a=e,o=r,s=Rr(n),l;try{for(s.s();!(l=s.n()).done;){var u=l.value;if(o=Object(a)[u],a=Object(a)[u],o===void 0)return r}}catch(c){s.e(c)}finally{s.f()}return o}var Wt=function(t,r){return{getMessage:function(a,o){return z9(r,a,o)||o},locale:t}},B9=Wt("mn_MN",$9),H9=Wt("ar_EG",b9),Ol=Wt("zh_CN",K9),W9=Wt("en_US",w9),U9=Wt("en_GB",S9),Y9=Wt("vi_VN",A9),G9=Wt("it_IT",T9),q9=Wt("ja_JP",F9),X9=Wt("es_ES",P9),Z9=Wt("ca_ES",C9),Q9=Wt("ru_RU",_9),J9=Wt("sr_RS",L9),e$=Wt("ms_MY",D9),t$=Wt("zh_TW",V9),n$=Wt("fr_FR",k9),r$=Wt("pt_BR",I9),a$=Wt("ko_KR",N9),o$=Wt("id_ID",M9),i$=Wt("de_DE",x9),l$=Wt("fa_IR",E9),s$=Wt("tr_TR",j9),u$=Wt("pl_PL",O9),c$=Wt("hr_",R9),Oa={"mn-MN":B9,"ar-EG":H9,"zh-CN":Ol,"en-US":W9,"en-GB":U9,"vi-VN":Y9,"it-IT":G9,"ja-JP":q9,"es-ES":X9,"ca-ES":Z9,"ru-RU":Q9,"sr-RS":J9,"ms-MY":e$,"zh-TW":t$,"fr-FR":n$,"pt-BR":r$,"ko-KR":a$,"id-ID":o$,"de-DE":i$,"fa-IR":l$,"tr-TR":s$,"pl-PL":u$,"hr-HR":c$},d$=Object.keys(Oa),Il=Z.createContext({intl:h(h({},Ol),{},{locale:"default"}),valueTypeMap:{}}),f$=Il.Consumer,v$=Il.Provider,hh=function(t){if(!t)return"zh-CN";var r=t.toLocaleLowerCase();return d$.find(function(n){var a=n.toLocaleLowerCase();return a.includes(r)})},m$=function(){var t=Hu(),r=t.cache;return i.useEffect(function(){return function(){r.clear()}},[]),null},gh=function(t){var r=t.children,n=t.autoClearCache,a=n===void 0?!1:n,o=i.useContext(pt.ConfigContext),s=o.locale,l=s===void 0?pt:Z.Fragment,u=x.jsx(f$,{children:function(d){var f,v=s==null?void 0:s.locale,m=hh(v),p=v&&((f=d.intl)===null||f===void 0?void 0:f.locale)==="default"?Oa[m]:d.intl||Oa[m],g=s===void 0?{locale:Cp}:{};return x.jsx(l,h(h({},g),{},{children:x.jsx(v$,{value:h(h({},d),{},{intl:p||Ol}),children:x.jsxs(x.Fragment,{children:[a&&x.jsx(m$,{}),r]})})}))}});return a?x.jsx(Op,{value:{provider:function(){return new Map}},children:u}):u};function Gt(){var e=i.useContext(pt.ConfigContext),t=e.locale,r=i.useContext(Il),n=r.intl;return n&&n.locale!=="default"?n:t!=null&&t.locale?Oa[hh(t.locale)]:Ol}var p$=function(t){var r=Gt(),n=t.onClear,a=t.onConfirm,o=t.disabled,s=t.footerRender,l=i.useContext(pt.ConfigContext),u=l.getPrefixCls,c=u("pro-core-dropdown-footer"),d=[x.jsx(_n,{style:{visibility:n?"visible":"hidden"},type:"link",size:"small",disabled:o,onClick:function(m){n&&n(m),m.stopPropagation()},children:r.getMessage("form.lightFilter.clear","清除")},"clear"),x.jsx(_n,{"data-type":"confirm",type:"primary",size:"small",onClick:a,disabled:o,children:r.getMessage("form.lightFilter.confirm","确认")},"confirm")];if(s===!1||(s==null?void 0:s(a,n))===!1)return null;var f=(s==null?void 0:s(a,n))||d;return x.jsx("div",{className:c,onClick:function(m){return m.target.getAttribute("data-type")!=="confirm"&&m.stopPropagation()},children:f})};const h$=p$;var g$=function(t,r){var n,a=t.label,o=t.onClear,s=t.value,l=t.size,u=l===void 0?"middle":l,c=t.disabled,d=t.onLabelClick,f=t.ellipsis,v=t.placeholder,m=t.className,p=t.style,g=t.formatter,y=t.bordered,b=t.allowClear,C=b===void 0?!0:b,S=i.useContext(pt.ConfigContext),P=S.getPrefixCls,E=P("pro-core-field-label"),w=Gt(),F=i.useRef(null),$=i.useRef(null);i.useImperativeHandle(r,function(){return{labelRef:$,clearRef:F}});var k=function(R){return g?g(R):Array.isArray(R)?R.join(","):R},O=function(R,T){if(T!=null&&T!==""&&(!Array.isArray(T)||T.length)){var N,M,I=R?x.jsxs("span",{onClick:d,className:"".concat(E,"-text"),children:[R,": "]}):"",L=k(T);if(!f)return x.jsxs("span",{style:{display:"inline-flex",alignItems:"center"},children:[I,k(T)]});var j=41,_=function(){var A=Array.isArray(T)&&T.length>1,V=w.getMessage("form.lightFilter.itemUnit","项");return typeof L=="string"&&L.length>j&&A?"...".concat(T.length).concat(V):""},K=_();return x.jsxs("span",{title:typeof L=="string"?L:void 0,style:{display:"inline-flex",alignItems:"center"},children:[I,x.jsx("span",{style:{paddingLeft:4},children:typeof L=="string"?L==null||(N=L.toString())===null||N===void 0||(M=N.substr)===null||M===void 0?void 0:M.call(N,0,j):L}),K]})}return R||v};return x.jsxs("span",{className:ve(E,"".concat(E,"-").concat(u),(n={},B(n,"".concat(E,"-active"),!!s||s===0),B(n,"".concat(E,"-disabled"),c),B(n,"".concat(E,"-bordered"),y),B(n,"".concat(E,"-allow-clear"),C),n),m),style:p,ref:$,children:[O(a,s),(s||s===0)&&C&&x.jsx(al,{role:"button",title:"清除",className:ve("".concat(E,"-icon"),"".concat(E,"-close")),onClick:function(R){o&&!c&&o(),R.stopPropagation()},ref:F}),x.jsx(So,{className:ve("".concat(E,"-icon"),"".concat(E,"-arrow"))})]})};const sa=Z.forwardRef(g$);var y$=function(t){var r=t.children,n=t.label,a=t.footer,o=t.disabled,s=t.onVisibleChange,l=t.visible,u=t.footerRender,c=t.placement,d=i.useContext(pt.ConfigContext),f=d.getPrefixCls,v=f("pro-core-field-dropdown");return x.jsx(Io,{disabled:o,placement:c,trigger:["click"],visible:l,onVisibleChange:s,overlay:x.jsxs("div",{className:"".concat(v,"-overlay"),children:[x.jsx("div",{className:"".concat(v,"-content"),children:r}),a&&x.jsx(h$,h({disabled:o,footerRender:u},a))]}),children:x.jsx("span",{className:"".concat(v,"-label"),children:n})})};const yh=y$;var b$=function(t){var r=t.label,n=t.tooltip,a=t.ellipsis,o=t.subTitle,s=i.useContext(pt.ConfigContext),l=s.getPrefixCls;if(!n&&!o)return x.jsx(x.Fragment,{children:r});var u=l("pro-core-label-tip"),c=typeof n=="string"||Z.isValidElement(n)?{title:n}:n,d=(c==null?void 0:c.icon)||x.jsx(sv,{});return x.jsxs("div",{className:u,onMouseDown:function(v){return v.stopPropagation()},onMouseLeave:function(v){return v.stopPropagation()},onMouseMove:function(v){return v.stopPropagation()},children:[x.jsx("div",{className:ve("".concat(u,"-title"),B({},"".concat(u,"-title-ellipsis"),a)),children:r}),o&&x.jsx("div",{className:"".concat(u,"-subtitle"),children:o}),n&&x.jsx(nn,h(h({},c),{},{children:x.jsx("span",{className:"".concat(u,"-icon"),children:d})}))]})};const bh=Z.memo(b$);var C$=Z.createContext({});const Zu=C$;var x$=function(t){return t==null};const No=x$;var Ch={time:"HH:mm:ss",timeRange:"HH:mm:ss",date:"YYYY-MM-DD",dateWeek:"YYYY-wo",dateMonth:"YYYY-MM",dateQuarter:"YYYY-\\QQ",dateYear:"YYYY",dateRange:"YYYY-MM-DD",dateTime:"YYYY-MM-DD HH:mm:ss",dateTimeRange:"YYYY-MM-DD HH:mm:ss"};function Rf(e){return Object.prototype.toString.call(e)==="[object Object]"}function S$(e){if(Rf(e)===!1)return!1;var t=e.constructor;if(t===void 0)return!0;var r=t.prototype;return!(Rf(r)===!1||r.hasOwnProperty("isPrototypeOf")===!1)}var Mf=function(t,r,n){if(!r)return t;if(Nt.isMoment(t)){if(r==="number")return t.valueOf();if(r==="string")return t.format(Ch[n]||"YYYY-MM-DD HH:mm:ss");if(typeof r=="string"&&r!=="string")return t.format(r);if(typeof r=="function")return r(t,n)}return t},w$=function e(t,r,n,a,o){var s={};return typeof window>"u"||He(t)!=="object"||No(t)||t instanceof Blob||Array.isArray(t)?t:(Object.keys(t).forEach(function(l){var u=o?[o,l].flat(1):[l],c=pn(n,u)||"text",d="text",f;typeof c=="string"?d=c:c&&(d=c.valueType,f=c.dateFormat);var v=t[l];if(!(No(v)&&a)){if(S$(v)&&!Array.isArray(v)&&!Nt.isMoment(v)){s[l]=e(v,r,n,a,[l]);return}if(Array.isArray(v)){s[l]=v.map(function(m,p){return Nt.isMoment(m)?Mf(m,f||r,d):e(m,r,n,a,[l,"".concat(p)])});return}s[l]=Mf(v,f||r,d)}}),s)};const P$=w$;var Tf=function(t,r){return typeof r=="function"?r(Nt(t)):Nt(t).format(r)},E$=function(t,r){var n=Array.isArray(t)?t:[],a=U(n,2),o=a[0],s=a[1],l,u;Array.isArray(r)?(l=r[0],u=r[1]):(l=r,u=r);var c=o?Tf(o,l):"",d=s?Tf(s,u):"",f=c&&d?"".concat(c," ~ ").concat(d):"";return f};const k$=E$;function Xr(e){if(typeof e=="function"){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1&&arguments[1]!==void 0?arguments[1]:100,r=arguments.length>2?arguments[2]:void 0,n=i.useState(e),a=U(n,2),o=a[0],s=a[1],l=Qu(e);return i.useEffect(function(){var u=setTimeout(function(){s(l.current)},t);return function(){return clearTimeout(u)}},r?[t].concat(Ke(r)):void 0),o}function Mr(e,t,r,n){if(e===t)return!0;if(e&&t&&He(e)==="object"&&He(t)==="object"){if(e.constructor!==t.constructor)return!1;var a,o,s;if(Array.isArray(e)){if(a=e.length,a!=t.length)return!1;for(o=a;o--!==0;)if(!Mr(e[o],t[o],r,n))return!1;return!0}if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;var l=Rr(e.entries()),u;try{for(l.s();!(u=l.n()).done;)if(o=u.value,!t.has(o[0]))return!1}catch(p){l.e(p)}finally{l.f()}var c=Rr(e.entries()),d;try{for(c.s();!(d=c.n()).done;)if(o=d.value,!Mr(o[1],t.get(o[0]),r,n))return!1}catch(p){c.e(p)}finally{c.f()}return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;var f=Rr(e.entries()),v;try{for(f.s();!(v=f.n()).done;)if(o=v.value,!t.has(o[0]))return!1}catch(p){f.e(p)}finally{f.f()}return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(a=e.length,a!=t.length)return!1;for(o=a;o--!==0;)if(e[o]!==t[o])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&e.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&e.toString)return e.toString()===t.toString();if(s=Object.keys(e),a=s.length,a!==Object.keys(t).length)return!1;for(o=a;o--!==0;)if(!Object.prototype.hasOwnProperty.call(t,s[o]))return!1;for(o=a;o--!==0;){var m=s[o];if(!(r!=null&&r.includes(m))&&!(m==="_owner"&&e.$$typeof)&&!Mr(e[m],t[m],r,n))return n&&console.log(m),!1}return!0}return e!==e&&t!==t}var T$=function(t,r,n){return Mr(t,r,n)};function F$(e,t){var r=i.useRef();return T$(e,r.current,t)||(r.current=e),r.current}function N$(e,t,r){i.useEffect(e,F$(t||[],r))}var $$=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,D$=function(){return typeof window<"u"&&typeof window.document<"u"&&typeof window.matchMedia<"u"&&!$$};const O$=D$;var os=0;function I$(e){var t=i.useState(function(){return e.proFieldKey?e.proFieldKey.toString():(os+=1,os.toString())}),r=U(t,1),n=r[0],a=i.useRef(n),o=function(){var c=xt(Ve().mark(function d(){var f,v;return Ve().wrap(function(p){for(;;)switch(p.prev=p.next){case 0:return p.next=2,(f=e.request)===null||f===void 0?void 0:f.call(e,e.params,e);case 2:return v=p.sent,p.abrupt("return",v);case 4:case"end":return p.stop()}},d)}));return function(){return c.apply(this,arguments)}}();i.useEffect(function(){return function(){os+=1}},[]);var s=Ip([a.current,e.params],o,{revalidateOnFocus:!1,shouldRetryOnError:!1,revalidateOnReconnect:!1}),l=s.data,u=s.error;return[l||u]}var _$=function(t){var r=i.useRef();return i.useEffect(function(){r.current=t}),r.current};const xh=_$;var L$=function(t){var r=!1;return(typeof t=="string"&&t.startsWith("date")&&!t.endsWith("Range")||t==="select"||t==="time")&&(r=!0),r};const j$=L$;var Ju=function(){for(var t={},r=arguments.length,n=new Array(r),a=0;a0&&arguments[0]!==void 0?arguments[0]:21;if(typeof window>"u"||!window.crypto)return(Ff+=1).toFixed(0);for(var r="",n=crypto.getRandomValues(new Uint8Array(t));t--;){var a=63&n[t];r+=a<36?a.toString(36):a<62?(a-26).toString(36).toUpperCase():a<63?"_":"-"}return r},ec=function(){return typeof window>"u"?Nf():window.crypto&&window.crypto.randomUUID&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Nf()},A$=function(t){if(t&&t!==!0)return t};const K$=A$;var V$=function(t){var r={};if(Object.keys(t||{}).forEach(function(n){t[n]!==void 0&&(r[n]=t[n])}),!(Object.keys(r).length<1))return r};const Wn=V$;var z$=function e(t,r){return No(t)||Nt.isMoment(t)?t:Array.isArray(t)?t.map(function(n){return e(n,r)}):typeof t=="number"?Nt(t):Nt(t,r)};const ri=z$;var B$=["colon","dependencies","extra","getValueFromEvent","getValueProps","hasFeedback","help","htmlFor","initialValue","noStyle","label","labelAlign","labelCol","name","preserve","normalize","required","rules","shouldUpdate","trigger","validateFirst","validateStatus","validateTrigger","valuePropName","wrapperCol","hidden","addonBefore","addonAfter"];function H$(e){var t={};return B$.forEach(function(r){e[r]!==void 0&&(t[r]=e[r])}),t}var W$="valueType request plain renderFormItem render text formItemProps valueEnum",U$="fieldProps isDefaultDom groupProps contentRender submitterProps submitter";function Sh(e){var t="".concat(W$," ").concat(U$).split(/[\s\n]+/),r={};return Object.keys(e||{}).forEach(function(n){t.includes(n)||(r[n]=e[n])}),r}function Y$(e){return He(e)!=="object"?!1:e===null?!0:!(Z.isValidElement(e)||e.constructor===RegExp||e instanceof Map||e instanceof Set||e instanceof HTMLElement||e instanceof Blob||e instanceof File||Array.isArray(e))}var G$=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Object.keys(r).reduce(function(l,u){var c=r[u];return No(c)||(l[u]=c),l},{});if(Object.keys(a).length<1||typeof window>"u"||He(t)!=="object"||No(t)||t instanceof Blob)return t;var o=Array.isArray(t)?[]:{},s=function l(u,c){var d=Array.isArray(u),f=d?[]:{};return u==null||u===void 0?f:(Object.keys(u).forEach(function(v){var m=c?[c,v].flat(1):[v].flat(1),p=u[v],g=pn(a,m),y=function S(P){return Array.isArray(P)&&P.forEach(function(E,w){E&&(typeof E=="function"&&(p[w]=E(p,v,u)),He(E)==="object"&&!Array.isArray(E)&&Object.keys(E).forEach(function(F){if(typeof E[F]=="function"){var $=E[F](u[v][w][F],v,u);p[w][F]=He($)==="object"?$[F]:$}}),He(E)==="object"&&Array.isArray(E)&&S(E))}),v},b=function(){var P=typeof g=="function"?g==null?void 0:g(p,v,u):y(g);if(Array.isArray(P)){f=hn(f,P,p);return}He(P)==="object"&&!Array.isArray(o)?o=h(h({},o),P):He(P)==="object"&&Array.isArray(o)?f=h(h({},f),P):P&&(f=hn(f,[P],p))};if(g&&typeof g=="function"&&b(),!(typeof window>"u")){if(Y$(p)){var C=l(p,m);if(Object.keys(C).length<1)return;f=hn(f,[v],C);return}b()}}),n?f:u)};return o=Array.isArray(t)&&Array.isArray(o)?Ke(s(t)):Ju({},s(t),o),o};const q$=G$;function ai(e,t){var r=kt(e,t),n=U(r,2),a=n[0],o=n[1];return[a,o]}var xo=globalThis&&globalThis.__assign||function(){return xo=Object.assign||function(e){for(var t,r=1,n=arguments.length;r"u"||!window.URL)return{};var d=[];s.forEach(function(v,m){d.push({key:m,value:v})}),d=d.reduce(function(v,m){return(v[m.key]=v[m.key]||[]).push(m),v},{}),d=Object.keys(d).map(function(v){var m=d[v];return m.length===1?[v,m[0].value]:[v,m.map(function(p){var g=p.value;return g})]});var f=xo({},e);return d.forEach(function(v){var m=v[0],p=v[1];f[m]=J$(m,p,{},e)}),f},[t.disabled,e,s]);function u(d){if(!(typeof window>"u"||!window.URL)){var f=X$(d);window.location.search!==f.search&&window.history.replaceState({},"",f.toString()),s.toString()!==f.searchParams.toString()&&a({})}}i.useEffect(function(){t.disabled||typeof window>"u"||!window.URL||u(xo(xo({},e),l))},[t.disabled,l]);var c=function(d){u(d)};return i.useEffect(function(){if(t.disabled)return function(){};if(typeof window>"u"||!window.URL)return function(){};var d=function(){a({})};return window.addEventListener("popstate",d),function(){window.removeEventListener("popstate",d)}},[t.disabled]),[l,c]}var Q$={true:!0,false:!1};function J$(e,t,r,n){if(!r)return t;var a=r[e],o=t===void 0?n[e]:t;return a===Number?Number(o):a===Boolean||t==="true"||t==="false"?Q$[o]:Array.isArray(a)?a.find(function(s){return s==o})||n[e]:o}function Li(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Li=function(t){return typeof t}:Li=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Li(e)}var eD=function(){var t=new WeakSet;return function(r,n){if(Li(n)==="object"&&n!==null){if(t.has(n))return;t.add(n)}return n}},ya=function(t){return JSON.stringify(t,eD())},wh=Z.createContext({});const _l=wh;var tD=["children","Wrapper"],nD=["children","Wrapper"],Ph=i.createContext({grid:!1,colProps:void 0,rowProps:void 0}),rD=function(t){var r=t.grid,n=t.rowProps,a=t.colProps;return{grid:!!r,RowWrapper:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l=s.children,u=s.Wrapper,c=ze(s,tD);return r?x.jsx(Hn,h(h(h({gutter:8},n),c),{},{children:l})):u?x.jsx(u,{children:l}):l},ColWrapper:function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l=s.children,u=s.Wrapper,c=ze(s,nD),d=i.useMemo(function(){var f=h(h({},a),c);return typeof f.span>"u"&&typeof f.xs>"u"&&(f.xs=24),f},[c]);return r?x.jsx(Zt,h(h({},d),{},{children:l})):u?x.jsx(u,{children:l}):l}}},Ua=function(t){var r=i.useMemo(function(){return He(t)==="object"?t:{grid:t}},[t]),n=i.useContext(Ph),a=n.grid,o=n.colProps;return i.useMemo(function(){return rD({grid:!!(a||r.grid),rowProps:r==null?void 0:r.rowProps,colProps:(r==null?void 0:r.colProps)||o,Wrapper:r==null?void 0:r.Wrapper})},[r==null?void 0:r.Wrapper,r.grid,a,JSON.stringify([o,r==null?void 0:r.colProps,r==null?void 0:r.rowProps])])},aD=["valueType","customLightMode","lightFilterLabelFormatter","valuePropName","ignoreWidth","defaultProps"],oD=["label","tooltip","placeholder","width","bordered","messageVariables","ignoreFormItem","transform","convertValue","readonly","allowClear","colSize","getFormItemProps","getFieldProps","filedConfig","cacheForSwr","proFieldProps"],$f={xs:104,s:216,sm:216,m:328,md:328,l:440,lg:440,xl:552},iD=["switch","radioButton","radio","rate"];function Eh(e,t){e.displayName="ProFormComponent";var r=function(o){var s=h(h({},o==null?void 0:o.filedConfig),t)||{},l=s.valueType,u=s.customLightMode,c=s.lightFilterLabelFormatter,d=s.valuePropName,f=d===void 0?"value":d,v=s.ignoreWidth,m=s.defaultProps,p=ze(s,aD),g=h(h({},m),o),y=g.label,b=g.tooltip,C=g.placeholder,S=g.width,P=g.bordered,E=g.messageVariables,w=g.ignoreFormItem,F=g.transform,$=g.convertValue,k=g.readonly,O=g.allowClear;g.colSize;var D=g.getFormItemProps,R=g.getFieldProps;g.filedConfig;var T=g.cacheForSwr,N=g.proFieldProps,M=ze(g,oD),I=l||M.valueType,L=i.useMemo(function(){return v||iD.includes(I)},[v,I]),j=i.useState(),_=U(j,2),K=_[1],z=i.useState(),A=U(z,2),V=A[0],X=A[1],H=Z.useContext(_l),Q=i.useMemo(function(){return{formItemProps:D==null?void 0:D(),fieldProps:R==null?void 0:R()}},[R,D,M.dependenciesValues,V]),Y=i.useMemo(function(){var pe=h(h(h(h({},w?Wn({value:M.value}):{}),{},{placeholder:C,disabled:o.disabled},H.fieldProps),Q.fieldProps),M.fieldProps);return pe.style=Wn(pe==null?void 0:pe.style),pe},[w,M.value,M.fieldProps,C,o.disabled,H.fieldProps,Q.fieldProps]),ae=H$(M),q=i.useMemo(function(){return h(h(h(h({},H.formItemProps),ae),Q.formItemProps),M.formItemProps)},[Q.formItemProps,H.formItemProps,M.formItemProps,ae]),ne=i.useMemo(function(){return h(h({messageVariables:E},p),q)},[p,q,E]);tn(!M.defaultValue,"请不要在 Form 中使用 defaultXXX。如果需要默认值请使用 initialValues 和 initialValue。");var ue=i.useContext(bg),G=ue.prefixName,te=i.useMemo(function(){var pe,Ce=ne==null?void 0:ne.name;Array.isArray(Ce)&&(Ce=Ce.join("_")),Array.isArray(G)&&Ce&&(Ce="".concat(G.join("."),".").concat(Ce));var Re=Ce&&"form-".concat((pe=H.formKey)!==null&&pe!==void 0?pe:"","-field-").concat(Ce);return Re},[ya(ne==null?void 0:ne.name),G,H.formKey]),ee=xh(M),le=i.useCallback(function(){var pe;D||R?X([]):M.renderFormItem&&K([]);for(var Ce=arguments.length,Re=new Array(Ce),Fe=0;Fe0?te.map(function(le,re){var ge=ee==null?void 0:ee[re],Ee=(ge==null?void 0:ge["data-item"])||{};return h(h({},Ee),le)}):[]},ue=function G(te){return te.map(function(ee){var le,re=ee.disabled,ge=ee.className,Ee=ee.optionType,me=ee[I],ce=ee[j],fe=(le=ee[K])!==null&&le!==void 0?le:[];return Ee==="optGroup"||ee.options?x.jsx(pD,{label:me,children:G(fe)},ce):i.createElement(mD,h(h({},ee),{},{value:ce,key:ce||(me==null?void 0:me.toString()),disabled:re,"data-item":ee,className:"".concat(ae,"-option ").concat(ge||""),label:me}),(n==null?void 0:n(ee))||me)})};return x.jsx($r,h(h({ref:H,className:q,allowClear:!0,autoClearSearchValue:u,disabled:P,mode:a,showSearch:D,searchValue:V,optionFilterProp:y,optionLabelProp:C,onClear:function(){k==null||k(),w(""),D&&X("")}},T),{},{onSearch:D?function(G){p&&w(G),o==null||o(G),X(G)}:void 0,onChange:function(te,ee){D&&u&&(V||w(""),o==null||o(""),X(""));for(var le=arguments.length,re=new Array(le>2?le-2:0),ge=2;geN?P([N,T]):T===void 0&&N===void 0&&P(void 0)}},$=function(R,T){var N=Ke(S||[]);N[R]=T===null?void 0:T,P(N)},k=(u==null?void 0:u.placeholder)||s,O=x.jsxs(kn.Group,{compact:!0,onBlur:F,children:[x.jsx(ea,h(h({},u),{},{placeholder:Array.isArray(k)?k[0]:k,id:y??"".concat(y,"-0"),style:{width:"calc((100% - ".concat(v,"px) / 2)")},value:S==null?void 0:S[0],defaultValue:p==null?void 0:p[0],onChange:function(R){return $(0,R)}})),x.jsx(kn,{style:{width:v,textAlign:"center",borderLeft:0,borderRight:0,pointerEvents:"none",backgroundColor:"#FFF"},placeholder:d,disabled:!0}),x.jsx(ea,h(h({},u),{},{placeholder:Array.isArray(k)?k[1]:k,id:y??"".concat(y,"-1"),style:{width:"calc((100% - ".concat(v,"px) / 2)"),borderLeft:0},value:S==null?void 0:S[1],defaultValue:p==null?void 0:p[1],onChange:function(R){return $(1,R)}}))]});return l?l(n,h({mode:a},u),O):O}return null};const zD=Z.forwardRef(VD);var BD=function(t){var r=t.text,n=t.mode,a=t.render,o=t.renderFormItem,s=t.format,l=t.fieldProps,u=Gt();if(n==="read"){var c=x.jsx(nn,{title:Nt(r).format((l==null?void 0:l.format)||s||"YYYY-MM-DD HH:mm:ss"),children:Nt(r).fromNow()});return a?a(r,h({mode:n},l),x.jsx(x.Fragment,{children:c})):x.jsx(x.Fragment,{children:c})}if(n==="edit"||n==="update"){var d=u.getMessage("tableForm.selectPlaceholder","请选择"),f=ri(l.value),v=x.jsx(na,h(h({placeholder:d,showTime:!0},l),{},{value:f}));return o?o(r,h({mode:n},l),v):v}return null};const HD=BD;var WD=Z.forwardRef(function(e,t){var r=e.text,n=e.mode,a=e.render,o=e.renderFormItem,s=e.fieldProps,l=e.placeholder,u=e.width;if(n==="read"){var c=x.jsx(px,h({ref:t,width:u||32,src:r},s));return a?a(r,h({mode:n},s),c):c}if(n==="edit"||n==="update"){var d=x.jsx(kn,h({ref:t,placeholder:l},s));return o?o(r,h({mode:n},s),d):d}return null});const kh=WD;var UD=function(t,r){var n,a=t.border,o=a===void 0?!1:a,s=t.children,l=i.useContext(pt.ConfigContext),u=l.getPrefixCls,c=u("pro-field-index-column");return x.jsx("div",{ref:r,className:ve(c,(n={},B(n,"".concat(c,"-border"),o),B(n,"top-three",s>3),n)),children:s})};const _f=Z.forwardRef(UD);var YD=["content","numberFormatOptions","numberPopoverRender"],GD=["text","mode","render","renderFormItem","fieldProps","proFieldKey","plain","valueEnum","placeholder","locale","customSymbol","numberFormatOptions","numberPopoverRender"],qD=new Intl.NumberFormat("zh-Hans-CN",{currency:"CNY",style:"currency"}),XD={style:"currency",currency:"USD"},ZD={style:"currency",currency:"RUB"},QD={style:"currency",currency:"RSD"},JD={style:"currency",currency:"MYR"},eO={style:"currency",currency:"BRL"},Lf={default:qD,"zh-Hans-CN":{currency:"CNY",style:"currency"},"en-US":XD,"ru-RU":ZD,"ms-MY":JD,"sr-RS":QD,"pt-BR":eO},jf=function(t,r,n,a){var o=r;return typeof o=="string"&&(o=Number(o)),!o&&o!==0?"":new Intl.NumberFormat(t||"zh-Hans-CN",h(h({},t===!1?{}:Lf[t||"zh-Hans-CN"]||Lf["zh-Hans-CN"]),{},{maximumFractionDigits:n},a)).format(o)},is=2,tO=Z.forwardRef(function(e,t){var r=e.content;e.numberFormatOptions,e.numberPopoverRender;var n=ze(e,YD),a=kt(function(){return n.defaultValue},{value:n.value,onChange:n.onChange}),o=U(a,2),s=o[0],l=o[1],u=r==null?void 0:r(h(h({},n),{},{value:s})),c={visible:u?n.visible:!1};return x.jsx(Oo,h(h({placement:"topLeft"},c),{},{trigger:["focus","click"],content:u,getPopupContainer:function(f){return(f==null?void 0:f.parentElement)||document.body},children:x.jsx(ea,h(h({ref:t},n),{},{value:s,onChange:l}))}))}),nO=function(t,r){var n,a,o=t.text,s=t.mode,l=t.render,u=t.renderFormItem,c=t.fieldProps;t.proFieldKey,t.plain,t.valueEnum;var d=t.placeholder,f=t.locale,v=f===void 0?(n=c.customSymbol)!==null&&n!==void 0?n:"zh-Hans-CN":f,m=t.customSymbol,p=m===void 0?c.customSymbol:m,g=t.numberFormatOptions,y=g===void 0?c==null?void 0:c.numberFormatOptions:g,b=t.numberPopoverRender,C=b===void 0?(c==null?void 0:c.numberPopoverRender)||!1:b,S=ze(t,GD),P=(a=c==null?void 0:c.precision)!==null&&a!==void 0?a:is,E=Gt();v&&Oa[v]&&(E=Oa[v]);var w=i.useMemo(function(){if(p)return p;var O=E.getMessage("moneySymbol","¥");if(!(S.moneySymbol===!1||c.moneySymbol===!1))return O},[p,c.moneySymbol,E,S.moneySymbol]);if(s==="read"){var F=x.jsx("span",{ref:r,children:jf(w?v:!1,o,P,y??c.numberFormatOptions)});return l?l(o,h({mode:s},c),F):F}if(s==="edit"||s==="update"){var $=function(D){var R=new RegExp("\\B(?=(\\d{".concat(3+Math.max(P-is,0),"})+(?!\\d))"),"g"),T=String(D).split("."),N=U(T,2),M=N[0],I=N[1],L=M.replace(R,","),j="";return I&&P>0&&(j=".".concat(I.slice(0,P===void 0?is:P))),"".concat(L).concat(j)},k=x.jsx(tO,h({content:function(D){if(C!==!1&&D.value){var R=jf(w?v:!1,"".concat($(D.value)),P,h(h({},y),{},{notation:"compact"}));return typeof C=="function"?C==null?void 0:C(D,R):R}},ref:r,precision:P,formatter:function(D){return D&&w?"".concat(w," ").concat($(D)):D==null?void 0:D.toString()},parser:function(D){return w&&D?D.replace(new RegExp("\\".concat(w,"\\s?|(,*)"),"g"),""):D},placeholder:d},rn(c,["numberFormatOptions","precision","numberPopoverRender","customSymbol","moneySymbol","visible"])));return u?u(o,h({mode:s},c),k):k}return null};const Rh=Z.forwardRef(nO);var Af=function(t){return t.map(function(r,n){return Z.isValidElement(r)?Z.cloneElement(r,h({key:n},r==null?void 0:r.props)):x.jsx(Z.Fragment,{children:r},n)})},rO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.fieldProps,l=i.useContext(pt.ConfigContext),u=l.getPrefixCls,c=u("pro-field-option");if(i.useImperativeHandle(r,function(){return{}}),o){var d=o(n,h({mode:a},s),x.jsx(x.Fragment,{}));return!d||(d==null?void 0:d.length)<1||!Array.isArray(d)?null:x.jsx(Xt,{size:16,className:c,children:Af(d)})}return!n||!Array.isArray(n)?Z.isValidElement(n)?n:null:x.jsx(Xt,{size:16,className:c,children:Af(n)})};const aO=Z.forwardRef(rO);var oO=["text","mode","render","renderFormItem","fieldProps","proFieldKey"],iO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.renderFormItem,l=t.fieldProps;t.proFieldKey;var u=ze(t,oO),c=Gt(),d=kt(function(){return u.visible||!1},{value:u.visible,onChange:u.onVisible}),f=U(d,2),v=f[0],m=f[1];if(a==="read"){var p=x.jsx(x.Fragment,{children:"-"});return n&&(p=x.jsxs(Xt,{children:[x.jsx("span",{ref:r,children:v?n:"* * * * *"}),x.jsx("a",{onClick:function(){return m(!v)},children:v?x.jsx(yv,{}):x.jsx(Cg,{})})]})),o?o(n,h({mode:a},l),p):p}if(a==="edit"||a==="update"){var g=x.jsx(kn.Password,h({placeholder:c.getMessage("tableForm.inputPlaceholder","请输入"),ref:r},l));return s?s(n,h({mode:a},l),g):g}return null};const lO=Z.forwardRef(iO);function sO(e){return e===0?null:e>0?"+":"-"}function uO(e){return e===0?"#595959":e>0?"#ff4d4f":"#52c41a"}function cO(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return t>=0?e==null?void 0:e.toFixed(t):e}var dO=function(t,r){var n=t.text,a=t.prefix,o=t.precision,s=t.suffix,l=s===void 0?"%":s,u=t.mode,c=t.showColor,d=c===void 0?!1:c,f=t.render,v=t.renderFormItem,m=t.fieldProps,p=t.placeholder,g=t.showSymbol,y=i.useMemo(function(){return typeof n=="string"&&n.includes("%")?el(n.replace("%","")):el(n)},[n]),b=i.useMemo(function(){return typeof g=="function"?g==null?void 0:g(n):g},[g,n]);if(u==="read"){var C=d?{color:uO(y)}:{},S=x.jsxs("span",{style:C,ref:r,children:[a&&x.jsx("span",{children:a}),b&&x.jsxs(i.Fragment,{children:[sO(y)," "]}),cO(Math.abs(y),o),l&&l]});return f?f(n,h(h({mode:u},m),{},{prefix:a,precision:o,showSymbol:b,suffix:l}),S):S}if(u==="edit"||u==="update"){var P=x.jsx(ea,h({ref:r,formatter:function(w){return w&&a?"".concat(a," ").concat(w).replace(/\B(?=(\d{3})+(?!\d)$)/g,","):w},parser:function(w){return w?w.replace(/.*\s|,/g,""):""},placeholder:p},m));return v?v(n,h({mode:u},m),P):P}return null};const Mh=Z.forwardRef(dO);function fO(e){return e===100?"success":e<0?"exception":e<100?"active":"normal"}var vO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.plain,l=t.renderFormItem,u=t.fieldProps,c=t.placeholder,d=i.useMemo(function(){return typeof n=="string"&&n.includes("%")?el(n.replace("%","")):el(n)},[n]);if(a==="read"){var f=x.jsx(Rv,h({ref:r,size:"small",style:{minWidth:100,maxWidth:320},percent:d,steps:s?10:void 0,status:fO(d)},u));return o?o(d,h({mode:a},u),f):f}if(a==="edit"||a==="update"){var v=x.jsx(ea,h({ref:r,placeholder:c},u));return l?l(n,h({mode:a},u),v):v}return null};const Th=Z.forwardRef(vO);var mO=["radioType","renderFormItem","mode","render"],pO=function(t,r){var n=t.radioType,a=t.renderFormItem,o=t.mode,s=t.render,l=ze(t,mO),u=i.useContext(pt.ConfigContext),c=u.getPrefixCls,d=c("pro-field-radio"),f=ii(l),v=U(f,3),m=v[0],p=v[1],g=v[2],y=i.useRef();if(i.useImperativeHandle(r,function(){return h(h({},y.current||{}),{},{fetchData:function(){return g()}})}),m)return x.jsx(Fr,{size:"small"});if(o==="read"){var b=p!=null&&p.length?p==null?void 0:p.reduce(function(w,F){var $;return h(h({},w),{},B({},($=F.value)!==null&&$!==void 0?$:"",F.label))},{}):void 0,C=x.jsx(x.Fragment,{children:oi(l.text,Or(l.valueEnum||b))});return s?s(l.text,h({mode:o},l.fieldProps),C)||null:C}if(o==="edit"){var S,P=n==="button"?fo.Button:fo,E=x.jsx(fo.Group,h(h({ref:y},l.fieldProps),{},{className:ve((S=l.fieldProps)===null||S===void 0?void 0:S.className,"".concat(d,"-").concat(l.fieldProps.layout||"horizontal")),options:void 0,children:p==null?void 0:p.map(function(w){return x.jsx(P,h(h({},w),{},{children:w.label}),w.value)})}));return a?a(l.text,h({mode:o},l.fieldProps),E)||null:E}return null};const Kf=Z.forwardRef(pO);var hO=function(t,r){var n=t.text,a=t.mode,o=t.format,s=t.render,l=t.renderFormItem,u=t.plain,c=t.showTime,d=t.fieldProps,f=Gt(),v=Array.isArray(n)?n:[],m=U(v,2),p=m[0],g=m[1],y=i.useCallback(function(w){if(typeof(d==null?void 0:d.format)=="function"){var F;return d==null||(F=d.format)===null||F===void 0?void 0:F.call(d,w)}return(d==null?void 0:d.format)||o||"YYYY-MM-DD"},[d,o]),b=p?Nt(p).format(y(Nt(p))):"",C=g?Nt(g).format(y(Nt(g))):"";if(a==="read"){var S=x.jsxs("div",{ref:r,children:[x.jsx("div",{children:b||"-"}),x.jsx("div",{children:C||"-"})]});return s?s(n,h({mode:a},d),x.jsx("span",{children:S})):S}if(a==="edit"||a==="update"){var P=ri(d.value),E=x.jsx(na.RangePicker,h(h({ref:r,format:o,showTime:c,placeholder:[f.getMessage("tableForm.selectPlaceholder","请选择"),f.getMessage("tableForm.selectPlaceholder","请选择")],bordered:u===void 0?!0:!u},d),{},{value:P}));return l?l(n,h({mode:a},d),E):E}return null};const Vf=Z.forwardRef(hO);var gO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.renderFormItem,l=t.fieldProps;if(a==="read"){var u=x.jsx(Ac,h(h({allowHalf:!0,disabled:!0,ref:r},l),{},{value:n}));return o?o(n,h({mode:a},l),x.jsx(x.Fragment,{children:u})):u}if(a==="edit"||a==="update"){var c=x.jsx(Ac,h({allowHalf:!0,ref:r},l));return s?s(n,h({mode:a},l),c):c}return null};const yO=Z.forwardRef(gO);function bO(e){var t="",r=Math.floor(e/86400),n=Math.floor(e/3600),a=Math.floor(e/60%60),o=Math.floor(e%60);return t="".concat(o,"秒"),a>0&&(t="".concat(a,"分钟").concat(t)),n>0&&(t="".concat(n,"小时").concat(t)),r>0&&(t="".concat(r,"天").concat(t)),t}var CO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.renderFormItem,l=t.fieldProps,u=t.placeholder;if(a==="read"){var c=bO(Number(n)),d=x.jsx("span",{ref:r,children:c});return o?o(n,h({mode:a},l),d):d}if(a==="edit"||a==="update"){var f=x.jsx(ea,h({ref:r,min:0,style:{width:"100%"},placeholder:u},l));return s?s(n,h({mode:a},l),f):f}return null};const xO=Z.forwardRef(CO);var SO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.renderFormItem,l=t.fieldProps;if(a==="read"){var u=n;return o?o(n,h({mode:a},l),x.jsx(x.Fragment,{children:u})):x.jsx(x.Fragment,{children:u})}if(a==="edit"||a==="update"){var c=x.jsx(wg,h({ref:r},l));return s?s(n,h({mode:a},l),c):c}return null};const wO=Z.forwardRef(SO);var PO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.renderFormItem,l=t.fieldProps,u=Gt(),c=i.useMemo(function(){var v,m;return n==null||"".concat(n).length<1?"-":n?(v=l==null?void 0:l.checkedChildren)!==null&&v!==void 0?v:u.getMessage("switch.open","打开"):(m=l==null?void 0:l.unCheckedChildren)!==null&&m!==void 0?m:u.getMessage("switch.close","关闭")},[l==null?void 0:l.checkedChildren,l==null?void 0:l.unCheckedChildren,n]);if(a==="read")return o?o(n,h({mode:a},l),x.jsx(x.Fragment,{children:c})):c??"-";if(a==="edit"||a==="update"){var d,f=x.jsx(Rg,h(h({ref:r},rn(l,["value"])),{},{checked:(d=l==null?void 0:l.checked)!==null&&d!==void 0?d:l==null?void 0:l.value}));return s?s(n,h({mode:a},l),f):f}return null};const EO=Z.forwardRef(PO);var kO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.renderFormItem,l=t.fieldProps,u=t.emptyText,c=u===void 0?"-":u,d=l||{},f=d.autoFocus,v=d.prefix,m=v===void 0?"":v,p=d.suffix,g=p===void 0?"":p,y=Gt(),b=i.useRef();if(i.useImperativeHandle(r,function(){return b.current}),i.useEffect(function(){if(f){var w;(w=b.current)===null||w===void 0||w.focus()}},[f]),a==="read"){var C=x.jsxs(x.Fragment,{children:[m,n??c,g]});if(o){var S;return(S=o(n,h({mode:a},l),C))!==null&&S!==void 0?S:c}return C}if(a==="edit"||a==="update"){var P=y.getMessage("tableForm.inputPlaceholder","请输入"),E=x.jsx(kn,h({ref:b,placeholder:P,allowClear:!0},l));return s?s(n,h({mode:a},l),E):E}return null};const RO=Z.forwardRef(kO);var MO=function(t,r){var n=t.text,a=t.mode,o=t.render,s=t.renderFormItem,l=t.fieldProps,u=Gt();if(a==="read"){var c=x.jsx("span",{ref:r,children:n??"-"});return o?o(n,h({mode:a},l),c):c}if(a==="edit"||a==="update"){var d=x.jsx(kn.TextArea,h({ref:r,rows:3,onKeyPress:function(v){v.key==="Enter"&&v.stopPropagation()},placeholder:u.getMessage("tableForm.inputPlaceholder","请输入")},l));return s?s(n,h({mode:a},l),d):d}return null};const TO=Z.forwardRef(MO);var FO=function(t,r){var n=t.text,a=t.mode,o=t.light,s=t.label,l=t.format,u=t.render,c=t.renderFormItem,d=t.plain,f=t.fieldProps,v=t.lightLabel,m=t.labelTrigger,p=i.useState(!1),g=U(p,2),y=g[0],b=g[1],C=i.useContext(pt.SizeContext),S=i.useContext(pt.ConfigContext),P=S.getPrefixCls,E=P("pro-field-date-picker"),w=(f==null?void 0:f.format)||l||"HH:mm:ss",F=Nt.isMoment(n)||typeof n=="number";if(a==="read"){var $=x.jsx("span",{ref:r,children:n?Nt(n,F?void 0:w).format(w):"-"});return u?u(n,h({mode:a},f),x.jsx("span",{children:$})):$}if(a==="edit"||a==="update"){var k,O=f.disabled,D=f.onChange,R=f.placeholder,T=f.allowClear,N=f.value,M=ri(N,w);if(o){var I=M&&M.format(w)||"";k=x.jsxs("div",{className:"".concat(E,"-light"),onClick:function(j){var _,K,z,A=v==null||(_=v.current)===null||_===void 0||(K=_.labelRef)===null||K===void 0||(z=K.current)===null||z===void 0?void 0:z.contains(j.target);b(A?!y:!0)},children:[x.jsx(cp,h(h({value:M,format:l,ref:r},f),{},{onChange:function(j){D==null||D(j),setTimeout(function(){b(!1)},0)},onOpenChange:function(j){m||b(j)},open:y})),x.jsx(sa,{label:s,disabled:O,placeholder:R,size:C,value:I,allowClear:T,onClear:function(){return D==null?void 0:D(null)},expanded:y,ref:v})]})}else k=x.jsx(na.TimePicker,h(h({ref:r,format:l,bordered:d===void 0?!0:!d},f),{},{value:M}));return c?c(n,h({mode:a},f),k):k}return null},NO=function(t){var r=t.text,n=t.mode,a=t.format,o=t.render,s=t.renderFormItem,l=t.plain,u=t.fieldProps,c=(u==null?void 0:u.format)||a||"HH:mm:ss",d=Array.isArray(r)?r:[],f=U(d,2),v=f[0],m=f[1],p=Nt.isMoment(v)||typeof v=="number",g=Nt.isMoment(m)||typeof m=="number",y=v?Nt(v,p?void 0:c).format(c):"",b=m?Nt(m,g?void 0:c).format(c):"";if(n==="read"){var C=x.jsxs("div",{children:[x.jsx("div",{children:y||"-"}),x.jsx("div",{children:b||"-"})]});return o?o(r,h({mode:n},u),x.jsx("span",{children:C})):C}if(n==="edit"||n==="update"){var S=u.value,P=ri(S,c),E=x.jsx(cp.RangePicker,h(h({format:a,bordered:l===void 0?!0:!l},u),{},{value:P}));return s?s(r,h({mode:n},u),E):E}return null};const $O=Z.forwardRef(FO);var DO=["radioType","renderFormItem","mode","light","label","render"],OO=["onSearch","onClear","onChange","onBlur","showSearch","autoClearSearchValue","treeData","searchValue"],IO=function(t,r){t.radioType;var n=t.renderFormItem,a=t.mode,o=t.light,s=t.label,l=t.render,u=ze(t,DO),c=i.useContext(pt.ConfigContext),d=c.getPrefixCls,f=d("pro-field-tree-select"),v=i.useRef(null),m=i.useState(!1),p=U(m,2),g=p[0],y=p[1],b=u.fieldProps||{},C=b.onSearch,S=b.onClear,P=b.onChange,E=b.onBlur,w=b.showSearch,F=b.autoClearSearchValue;b.treeData;var $=b.searchValue,k=ze(b,OO),O=i.useContext(pt.SizeContext),D=ii(h(h({},u),{},{defaultKeyWords:$})),R=U(D,3),T=R[0],N=R[1],M=R[2],I=kt("",{onChange:C,value:$}),L=U(I,2),j=L[0],_=L[1];i.useImperativeHandle(r,function(){return h(h({},v.current||{}),{},{fetchData:function(){return M()}})});var K=i.useMemo(function(){if(a==="read"){var q=(k==null?void 0:k.fieldNames)||{},ne=q.value,ue=ne===void 0?"value":ne,G=q.label,te=G===void 0?"label":G,ee=q.children,le=ee===void 0?"children":ee,re=new Map,ge=function Ee(me){if(!(me!=null&&me.length))return re;for(var ce=me.length,fe=0;fe0?x.jsx("div",{className:"".concat(u,"-action"),children:A}):null,X={name:E.name,field:p,index:g,record:y==null||(r=y.getFieldValue)===null||r===void 0?void 0:r.call(y,[w.listName,E.name,p.name].filter(function(q){return q!==void 0}).flat(1)),fields:v,operation:c,meta:m},H=Ua(),Q=H.grid,Y=(o==null?void 0:o(j,X))||j,ae=(s==null?void 0:s({listDom:x.jsx("div",{className:"".concat(u,"-container"),style:{width:Q?"100%":void 0},children:Y}),action:V},X))||x.jsxs("div",{className:"".concat(u,"-item ").concat(l?"".concat(u,"-item-show-label"):""),style:{display:"flex",alignItems:"flex-end"},children:[x.jsx("div",{className:"".concat(u,"-container"),style:{width:Q?"100%":void 0},children:Y}),V]});return x.jsx($o.Provider,{value:h(h({},p),{},{listName:[w.listName,b,p.name].filter(function(q){return q!==void 0}).flat(1)}),children:ae})},GO=function(t){var r=Gt(),n=t.creatorButtonProps,a=t.prefixCls,o=t.children,s=t.creatorRecord,l=t.action,u=t.fields,c=t.actionGuard,d=t.max,f=t.fieldExtraRender,v=t.meta,m=t.containerClassName,p=t.containerStyle,g=t.onAfterAdd,y=t.onAfterRemove,b=i.useRef(new Map),C=i.useState(!1),S=U(C,2),P=S[0],E=S[1],w=i.useMemo(function(){return u.map(function(O){var D,R;if(!(!((D=b.current)===null||D===void 0)&&D.has(O.key.toString()))){var T;(T=b.current)===null||T===void 0||T.set(O.key.toString(),ec())}var N=(R=b.current)===null||R===void 0?void 0:R.get(O.key.toString());return h(h({},O),{},{uuid:N})})},[u]),F=i.useMemo(function(){var O=h({},l),D=w.length;return c!=null&&c.beforeAddRow?O.add=xt(Ve().mark(function R(){var T,N,M,I,L,j=arguments;return Ve().wrap(function(K){for(;;)switch(K.prev=K.next){case 0:for(T=j.length,N=new Array(T),M=0;M0?x.jsx("div",{style:{display:"none"},children:H}):null]},[o,M,_,w]),A=U(z,2),V=A[0],X=A[1];return x.jsx(N,{children:x.jsxs("div",{className:ve(I,B({},"".concat(I,"-twoLine"),c==="twoLine")),style:u,ref:t,children:[X,(f||v||E)&&x.jsx("div",{className:"".concat(I,"-title"),style:C,onClick:function(){O(!k)},children:E?x.jsxs("div",{style:{display:"flex",width:"100%",alignItems:"center",justifyContent:"space-between"},children:[K,x.jsx("span",{onClick:function(Q){return Q.stopPropagation()},children:E})]}):K}),s&&k?null:V]})})});$h.displayName="ProForm-Group";const vI=$h;var nl={exports:{}};nl.exports;(function(e,t){var r=200,n="__lodash_hash_undefined__",a=800,o=16,s=9007199254740991,l="[object Arguments]",u="[object Array]",c="[object AsyncFunction]",d="[object Boolean]",f="[object Date]",v="[object Error]",m="[object Function]",p="[object GeneratorFunction]",g="[object Map]",y="[object Number]",b="[object Null]",C="[object Object]",S="[object Proxy]",P="[object RegExp]",E="[object Set]",w="[object String]",F="[object Undefined]",$="[object WeakMap]",k="[object ArrayBuffer]",O="[object DataView]",D="[object Float32Array]",R="[object Float64Array]",T="[object Int8Array]",N="[object Int16Array]",M="[object Int32Array]",I="[object Uint8Array]",L="[object Uint8ClampedArray]",j="[object Uint16Array]",_="[object Uint32Array]",K=/[\\^$.*+?()[\]{}|]/g,z=/^\[object .+?Constructor\]$/,A=/^(?:0|[1-9]\d*)$/,V={};V[D]=V[R]=V[T]=V[N]=V[M]=V[I]=V[L]=V[j]=V[_]=!0,V[l]=V[u]=V[k]=V[d]=V[O]=V[f]=V[v]=V[m]=V[g]=V[y]=V[C]=V[P]=V[E]=V[w]=V[$]=!1;var X=typeof hi=="object"&&hi&&hi.Object===Object&&hi,H=typeof self=="object"&&self&&self.Object===Object&&self,Q=X||H||Function("return this")(),Y=t&&!t.nodeType&&t,ae=Y&&!0&&e&&!e.nodeType&&e,q=ae&&ae.exports===Y,ne=q&&X.process,ue=function(){try{var W=ae&&ae.require&&ae.require("util").types;return W||ne&&ne.binding&&ne.binding("util")}catch{}}(),G=ue&&ue.isTypedArray;function te(W,oe,he){switch(he.length){case 0:return W.call(oe);case 1:return W.call(oe,he[0]);case 2:return W.call(oe,he[0],he[1]);case 3:return W.call(oe,he[0],he[1],he[2])}return W.apply(oe,he)}function ee(W,oe){for(var he=-1,qe=Array(W);++he-1}function $t(W,oe){var he=this.__data__,qe=st(he,W);return qe<0?(++this.size,he.push([W,oe])):he[qe][1]=oe,this}$e.prototype.clear=xe,$e.prototype.delete=Je,$e.prototype.get=dt,$e.prototype.has=ut,$e.prototype.set=$t;function Dt(W){var oe=-1,he=W==null?0:W.length;for(this.clear();++oe1?he[Pt-1]:void 0,Lt=Pt>2?he[2]:void 0;for(Mt=W.length>3&&typeof Mt=="function"?(Pt--,Mt):void 0,Lt&&Xa(he[0],he[1],Lt)&&(Mt=Pt<3?void 0:Mt,Pt=1),oe=Object(oe);++qe-1&&W%1==0&&W0){if(++oe>=a)return arguments[0]}else oe=0;return W.apply(void 0,arguments)}}function gr(W){if(W!=null){try{return ie.call(W)}catch{}try{return W+""}catch{}}return""}function Tn(W,oe){return W===oe||W!==W&&oe!==oe}var fa=qt(function(){return arguments}())?qt:function(W){return yr(W)&&se.call(W,"callee")&&!ct.call(W,"callee")},Qa=Array.isArray;function zr(W){return W!=null&&ui(W.length)&&!Br(W)}function li(W){return yr(W)&&zr(W)}var si=mt||mi;function Br(W){if(!Fn(W))return!1;var oe=It(W);return oe==m||oe==p||oe==c||oe==S}function ui(W){return typeof W=="number"&&W>-1&&W%1==0&&W<=s}function Fn(W){var oe=typeof W;return W!=null&&(oe=="object"||oe=="function")}function yr(W){return W!=null&&typeof W=="object"}function jl(W){if(!yr(W)||It(W)!=C)return!1;var oe=et(W);if(oe===null)return!0;var he=se.call(oe,"constructor")&&oe.constructor;return typeof he=="function"&&he instanceof he&&ie.call(he)==Re}var va=G?le(G):cr;function Al(W){return Zn(W,ci(W))}function ci(W){return zr(W)?De(W,!0):Xn(W)}var di=jr(function(W,oe,he){ua(W,oe,he)});function fi(W){return function(){return W}}function vi(W){return W}function mi(){return!1}e.exports=di})(nl,nl.exports);var mI=nl.exports;const Dh=ja(mI);var pI=["children","trigger","onVisibleChange","drawerProps","onFinish","submitTimeout","title","width","visible"];function hI(e){var t,r,n,a,o=e.children,s=e.trigger,l=e.onVisibleChange,u=e.drawerProps,c=e.onFinish,d=e.submitTimeout,f=e.title,v=e.width,m=e.visible,p=ze(e,pI);tn(!p.footer||!(u!=null&&u.footer),"DrawerForm 是一个 ProForm 的特殊布局,如果想自定义按钮,请使用 submit.render 自定义。");var g=i.useContext(pt.ConfigContext),y=i.useState([]),b=U(y,2),C=b[1],S=i.useState(!1),P=U(S,2),E=P[0],w=P[1],F=kt(!!m,{value:m,onChange:l}),$=U(F,2),k=$[0],O=$[1],D=i.useRef(null),R=i.useCallback(function(_){D.current===null&&_&&C([]),D.current=_},[]),T=i.useRef(),N=i.useCallback(function(){var _,K,z,A=(_=(K=(z=p.formRef)===null||z===void 0?void 0:z.current)!==null&&K!==void 0?K:p.form)!==null&&_!==void 0?_:T.current;A&&(u!=null&&u.destroyOnClose)&&A.resetFields()},[u==null?void 0:u.destroyOnClose,p.form,p.formRef]);i.useEffect(function(){k&&m&&(l==null||l(!0))},[m,k]);var M=i.useMemo(function(){return s?Z.cloneElement(s,h(h({key:"trigger"},s.props),{},{onClick:function(){var _=xt(Ve().mark(function z(A){var V,X;return Ve().wrap(function(Q){for(;;)switch(Q.prev=Q.next){case 0:O(!k),(V=s.props)===null||V===void 0||(X=V.onClick)===null||X===void 0||X.call(V,A);case 2:case"end":return Q.stop()}},z)}));function K(z){return _.apply(this,arguments)}return K}()})):null},[O,s,k]),I=i.useMemo(function(){var _,K,z,A,V,X;return p.submitter===!1?!1:Dh({searchConfig:{submitText:(_=(K=g.locale)===null||K===void 0||(z=K.Modal)===null||z===void 0?void 0:z.okText)!==null&&_!==void 0?_:"确认",resetText:(A=(V=g.locale)===null||V===void 0||(X=V.Modal)===null||X===void 0?void 0:X.cancelText)!==null&&A!==void 0?A:"取消"},resetButtonProps:{preventDefault:!0,disabled:d?E:void 0,onClick:function(Q){var Y;O(!1),N(),u==null||(Y=u.onClose)===null||Y===void 0||Y.call(u,Q)}}},p.submitter)},[p.submitter,(t=g.locale)===null||t===void 0||(r=t.Modal)===null||r===void 0?void 0:r.okText,(n=g.locale)===null||n===void 0||(a=n.Modal)===null||a===void 0?void 0:a.cancelText,d,E,O,N,u]),L=i.useCallback(function(_,K){return x.jsxs(x.Fragment,{children:[_,D.current&&K?mv.createPortal(K,D.current):K]})},[]),j=Qr(function(){var _=xt(Ve().mark(function K(z){var A,V,X;return Ve().wrap(function(Q){for(;;)switch(Q.prev=Q.next){case 0:return A=c==null?void 0:c(z),d&&A instanceof Promise&&(w(!0),V=setTimeout(function(){return w(!1)},d),A.finally(function(){clearTimeout(V),w(!1)})),Q.next=4,A;case 4:return X=Q.sent,X&&O(!1),Q.abrupt("return",X);case 7:case"end":return Q.stop()}},K)}));return function(K){return _.apply(this,arguments)}}());return x.jsxs(x.Fragment,{children:[x.jsx(Mg,h(h({title:f,width:v||800},u),{},{visible:k,onClose:function(K){var z;d&&E||(N(),O(!1),u==null||(z=u.onClose)===null||z===void 0||z.call(u,K))},afterVisibleChange:function(K){var z;K||N(),u==null||(z=u.afterVisibleChange)===null||z===void 0||z.call(u,K)},footer:p.submitter!==!1&&x.jsx("div",{ref:R,style:{display:"flex",justifyContent:"flex-end"}}),children:x.jsx(x.Fragment,{children:x.jsx(Ya,h(h({formComponentType:"DrawerForm",layout:"vertical",formRef:T},p),{},{submitter:I,onFinish:function(){var _=xt(Ve().mark(function z(A){var V;return Ve().wrap(function(H){for(;;)switch(H.prev=H.next){case 0:return H.next=2,j(A);case 2:return V=H.sent,V===!0&&N(),H.abrupt("return",V);case 5:case"end":return H.stop()}},z)}));function K(z){return _.apply(this,arguments)}return K}(),contentRender:L,children:o}))})})),M]})}var gI=["size","collapse","collapseLabel","initialValues","onValuesChange","form","placement","formRef","bordered","ignoreRules","footerRender"],yI=function(t){var r=t.items,n=t.prefixCls,a=t.size,o=a===void 0?"middle":a,s=t.collapse,l=t.collapseLabel,u=t.onValuesChange,c=t.bordered,d=t.values,f=t.footerRender,v=t.placement,m=Gt(),p="".concat(n,"-light-filter"),g=i.useState(!1),y=U(g,2),b=y[0],C=y[1],S=i.useState(function(){return h({},d)}),P=U(S,2),E=P[0],w=P[1];i.useEffect(function(){w(h({},d))},[d]);var F=i.useMemo(function(){var D=[],R=[];return r.forEach(function(T){var N=T.props||{},M=N.secondary;M||s?D.push(T):R.push(T)}),{collapseItems:D,outsideItems:R}},[t.items]),$=F.collapseItems,k=F.outsideItems,O=function(){return l||(s?x.jsx(U0,{className:"".concat(p,"-collapse-icon")}):x.jsx(sa,{size:o,label:m.getMessage("form.lightFilter.more","更多筛选"),expanded:b}))};return x.jsx("div",{className:ve(p,"".concat(p,"-").concat(o),B({},"".concat(p,"-effective"),Object.keys(d).some(function(D){return d[D]}))),children:x.jsxs("div",{className:"".concat(p,"-container"),children:[k.map(function(D,R){var T=D.key,N=D.props.fieldProps,M=N!=null&&N.placement?N==null?void 0:N.placement:v;return x.jsx("div",{className:"".concat(p,"-item"),children:Z.cloneElement(D,{fieldProps:h(h({},D.props.fieldProps),{},{placement:M}),proFieldProps:{light:!0,label:D.props.label,bordered:c},bordered:c})},T||R)}),$.length?x.jsx("div",{className:"".concat(p,"-item"),children:x.jsx(yh,{padding:24,onVisibleChange:C,visible:b,placement:v,label:O(),footerRender:f,footer:{onConfirm:function(){u(h({},E)),C(!1)},onClear:function(){var R={};$.forEach(function(T){var N=T.props.name;R[N]=void 0}),u(R)}},children:$.map(function(D){var R=D.key,T=D.props,N=T.name,M=T.fieldProps,I=h(h({},M),{},{onChange:function(_){return w(h(h({},E),{},B({},N,_!=null&&_.target?_.target.value:_))),!1}});E.hasOwnProperty(N)&&(I[D.props.valuePropName||"value"]=E[N]);var L=M!=null&&M.placement?M==null?void 0:M.placement:v;return x.jsx("div",{className:"".concat(p,"-line"),children:Z.cloneElement(D,{fieldProps:h(h({},I),{},{placement:L})})},R)})})},"more"):null]})})};function bI(e){var t=e.size,r=e.collapse,n=e.collapseLabel,a=e.initialValues,o=e.onValuesChange,s=e.form,l=e.placement,u=e.formRef,c=e.bordered;e.ignoreRules;var d=e.footerRender,f=ze(e,gI),v=i.useContext(pt.ConfigContext),m=v.getPrefixCls,p=m("pro-form"),g=i.useState(function(){return h({},a)}),y=U(g,2),b=y[0],C=y[1],S=i.useRef();return i.useImperativeHandle(u,function(){return S.current}),x.jsx(Ya,h(h({size:t,initialValues:a,form:s,contentRender:function(E){return x.jsx(yI,{prefixCls:p,items:E.flatMap(function(w){return(w==null?void 0:w.type.displayName)==="ProForm-Group"?w.props.children:w}),size:t,bordered:c,collapse:r,collapseLabel:n,placement:l,values:b||{},footerRender:d,onValuesChange:function(F){var $,k,O=h(h({},b),F);C(O),($=S.current)===null||$===void 0||$.setFieldsValue(O),(k=S.current)===null||k===void 0||k.submit(),o&&o(F,O)}})},formRef:S,formItemProps:{colon:!1,labelAlign:"left"},fieldProps:{style:{width:void 0}}},rn(f,["labelWidth"])),{},{onValuesChange:function(E,w){var F;C(w),o==null||o(E,w),(F=S.current)===null||F===void 0||F.submit()}}))}var CI=["children","trigger","onVisibleChange","modalProps","onFinish","submitTimeout","title","width","visible"];function xI(e){var t,r,n,a,o=e.children,s=e.trigger,l=e.onVisibleChange,u=e.modalProps,c=e.onFinish,d=e.submitTimeout,f=e.title,v=e.width,m=e.visible,p=ze(e,CI);tn(!p.footer||!(u!=null&&u.footer),"ModalForm 是一个 ProForm 的特殊布局,如果想自定义按钮,请使用 submit.render 自定义。");var g=i.useContext(pt.ConfigContext),y=i.useState([]),b=U(y,2),C=b[1],S=i.useState(!1),P=U(S,2),E=P[0],w=P[1],F=kt(!!m,{value:m,onChange:l}),$=U(F,2),k=$[0],O=$[1],D=i.useRef(null),R=i.useCallback(function(_){D.current===null&&_&&C([]),D.current=_},[]),T=i.useRef(),N=i.useCallback(function(){var _,K,z,A=(_=(K=p.form)!==null&&K!==void 0?K:(z=p.formRef)===null||z===void 0?void 0:z.current)!==null&&_!==void 0?_:T.current;A&&(u!=null&&u.destroyOnClose)&&A.resetFields()},[u==null?void 0:u.destroyOnClose,p.form,p.formRef]);i.useEffect(function(){k&&m&&(l==null||l(!0))},[m,k]);var M=i.useMemo(function(){return s?Z.cloneElement(s,h(h({key:"trigger"},s.props),{},{onClick:function(){var _=xt(Ve().mark(function z(A){var V,X;return Ve().wrap(function(Q){for(;;)switch(Q.prev=Q.next){case 0:O(!k),(V=s.props)===null||V===void 0||(X=V.onClick)===null||X===void 0||X.call(V,A);case 2:case"end":return Q.stop()}},z)}));function K(z){return _.apply(this,arguments)}return K}()})):null},[O,s,k]),I=i.useMemo(function(){var _,K,z,A,V,X,H,Q;return p.submitter===!1?!1:Dh({searchConfig:{submitText:(_=(K=u==null?void 0:u.okText)!==null&&K!==void 0?K:(z=g.locale)===null||z===void 0||(A=z.Modal)===null||A===void 0?void 0:A.okText)!==null&&_!==void 0?_:"确认",resetText:(V=(X=u==null?void 0:u.cancelText)!==null&&X!==void 0?X:(H=g.locale)===null||H===void 0||(Q=H.Modal)===null||Q===void 0?void 0:Q.cancelText)!==null&&V!==void 0?V:"取消"},resetButtonProps:{preventDefault:!0,disabled:d?E:void 0,onClick:function(ae){var q;O(!1),N(),u==null||(q=u.onCancel)===null||q===void 0||q.call(u,ae)}}},p.submitter)},[(t=g.locale)===null||t===void 0||(r=t.Modal)===null||r===void 0?void 0:r.cancelText,(n=g.locale)===null||n===void 0||(a=n.Modal)===null||a===void 0?void 0:a.okText,u,p.submitter,O,E,d,N]),L=i.useCallback(function(_,K){return x.jsxs(x.Fragment,{children:[_,D.current&&K?mv.createPortal(K,D.current):K]})},[]),j=i.useCallback(function(){var _=xt(Ve().mark(function K(z){var A,V,X;return Ve().wrap(function(Q){for(;;)switch(Q.prev=Q.next){case 0:return A=c==null?void 0:c(z),d&&A instanceof Promise&&(w(!0),V=setTimeout(function(){return w(!1)},d),A.finally(function(){clearTimeout(V),w(!1)})),Q.next=4,A;case 4:return X=Q.sent,X&&O(!1),Q.abrupt("return",X);case 7:case"end":return Q.stop()}},K)}));return function(K){return _.apply(this,arguments)}}(),[c,O,d]);return x.jsxs(x.Fragment,{children:[x.jsx(Ag,h(h({title:f,width:v||800},u),{},{visible:k,onCancel:function(K){var z;d&&E||(O(!1),u==null||(z=u.onCancel)===null||z===void 0||z.call(u,K))},afterClose:function(){var K;N(),u==null||(K=u.afterClose)===null||K===void 0||K.call(u)},footer:p.submitter!==!1&&x.jsx("div",{ref:R,style:{display:"flex",justifyContent:"flex-end"}}),children:x.jsx(Ya,h(h({formComponentType:"ModalForm",layout:"vertical",formRef:T},p),{},{submitter:I,onFinish:function(){var _=xt(Ve().mark(function z(A){var V;return Ve().wrap(function(H){for(;;)switch(H.prev=H.next){case 0:return H.next=2,j(A);case 2:return V=H.sent,V===!0&&N(),H.abrupt("return",V);case 5:case"end":return H.stop()}},z)}));function K(z){return _.apply(this,arguments)}return K}(),contentRender:L,children:o}))})),M]})}var SI=function(t,r,n,a){return t?x.jsxs(x.Fragment,{children:[n.getMessage("tableForm.collapsed","展开"),a&&"(".concat(a,")"),x.jsx(So,{style:{marginLeft:"0.5em",transition:"0.3s all",transform:"rotate(".concat(t?0:.5,"turn)")}})]}):x.jsxs(x.Fragment,{children:[n.getMessage("tableForm.expand","收起"),x.jsx(So,{style:{marginLeft:"0.5em",transition:"0.3s all",transform:"rotate(".concat(t?0:.5,"turn)")}})]})},wI=function(t){var r=t.setCollapsed,n=t.collapsed,a=n===void 0?!1:n,o=t.submitter,s=t.style,l=t.hiddenNum,u=i.useContext(pt.ConfigContext),c=u.getPrefixCls,d=Gt(),f=K$(t.collapseRender)||SI;return x.jsxs(Xt,{style:s,size:16,children:[o,t.collapseRender!==!1&&x.jsx("a",{className:c("pro-form-collapse-button"),onClick:function(){return r(!a)},children:f==null?void 0:f(a,t,d,l)})]})};const PI=wI;var EI=["collapsed","layout","defaultCollapsed","defaultColsNumber","span","searchGutter","searchText","resetText","optionRender","collapseRender","onReset","onCollapse","labelWidth","style","split","preserve","ignoreRules","showHiddenNum"],ss,us,kI={xs:513,sm:513,md:785,lg:992,xl:1057,xxl:1/0},Bf={vertical:[[513,1,"vertical"],[785,2,"vertical"],[1057,3,"vertical"],[1/0,4,"vertical"]],default:[[513,1,"vertical"],[701,2,"vertical"],[1062,3,"horizontal"],[1352,3,"horizontal"],[1/0,4,"horizontal"]]},RI=function(t,r,n){if(n&&typeof n=="number")return{span:n,layout:t};var a=n?["xs","sm","md","lg","xl","xxl"].map(function(s){return[kI[s],24/n[s],"horizontal"]}):Bf[t||"default"],o=(a||Bf.default).find(function(s){return rp-1)&&!!T&&C>=24;S+=1;var A=Z.isValidElement(R)&&(R.key||"".concat((L=R.props)===null||L===void 0?void 0:L.name))||T;return Z.isValidElement(R)&&z?t.preserve?{itemDom:Z.cloneElement(R,{hidden:!0,key:A||T}),hidden:!0,colSpan:_}:{itemDom:null,colSpan:0,hidden:!0}:{itemDom:R,colSpan:_,hidden:!1}}),$=F.map(function(R,T){var N,M,I=R.itemDom,L=R.colSpan,j=I==null||(N=I.props)===null||N===void 0?void 0:N.hidden;if(j)return I;var _=Z.isValidElement(I)&&(I.key||"".concat((M=I.props)===null||M===void 0?void 0:M.name))||T;24-w%2417&&R(L.width)},children:x.jsx(Ya,h(h({isKeyPressSubmit:!0,preserve:C},w),{},{className:ve($,w.className),onReset:f,style:g,layout:T.layout,fieldProps:{style:{width:"100%"}},formItemProps:M,groupProps:{titleStyle:{display:"inline-block",marginRight:16}},contentRender:function(L,j,_){return x.jsx(TI,{spanSize:T,collapsed:t,form:_,collapseRender:d,defaultCollapsed:a,onCollapse:v,optionRender:c,submitter:j,items:L,split:y,resetText:e.resetText,searchText:e.searchText,searchGutter:u,preserve:C,ignoreRules:S,showLength:N,showHiddenNum:E})}}))},"resize-observer")}var $I=["onFinish","step","formRef","title","stepProps"];function DI(e){var t=i.useRef(),r=i.useContext(Oh),n=e.onFinish,a=e.step,o=e.formRef;e.title,e.stepProps;var s=ze(e,$I);return tn(!s.submitter,"StepForm 不包含提交按钮,请在 StepsForm 上"),i.useImperativeHandle(o,function(){return t.current}),i.useEffect(function(){if(e.name||e.step){var l=(e.name||e.step).toString();return r==null||r.regForm(l,e),function(){r==null||r.unRegForm(l)}}},[]),r&&(r!=null&&r.formArrayRef)&&(r.formArrayRef.current[a||0]=t),x.jsx(Ya,h({formRef:t,onFinish:function(){var l=xt(Ve().mark(function c(d){var f;return Ve().wrap(function(m){for(;;)switch(m.prev=m.next){case 0:if(s.name&&(r==null||r.onFormFinish(s.name,d)),!n){m.next=9;break}return r==null||r.setLoading(!0),m.next=5,n==null?void 0:n(d);case 5:return f=m.sent,f&&(r==null||r.next()),r==null||r.setLoading(!1),m.abrupt("return");case 9:r!=null&&r.lastStep||r==null||r.next();case 10:case"end":return m.stop()}},c)}));function u(c){return l.apply(this,arguments)}return u}(),layout:"vertical"},s))}var OI=["current","onCurrentChange","submitter","stepsFormRender","stepsRender","stepFormRender","stepsProps","onFinish","formProps","containerStyle","formRef","formMapRef"],Oh=Z.createContext(void 0),II={horizontal:function(t){var r=t.stepsDom,n=t.formDom;return x.jsxs(x.Fragment,{children:[x.jsx(Hn,{gutter:{xs:8,sm:16,md:24},children:x.jsx(Zt,{span:24,children:r})}),x.jsx(Hn,{gutter:{xs:8,sm:16,md:24},children:x.jsx(Zt,{span:24,children:n})})]})},vertical:function(t){var r=t.stepsDom,n=t.formDom;return x.jsxs(Hn,{align:"stretch",wrap:!0,gutter:{xs:8,sm:16,md:24},children:[x.jsx(Zt,{xxl:4,xl:6,lg:7,md:8,sm:10,xs:12,children:Z.cloneElement(r,{style:{height:"100%"}})}),x.jsx(Zt,{children:x.jsx("div",{style:{display:"flex",alignItems:"center",width:"100%",height:"100%"},children:n})})]})}};function _I(e){var t=i.useContext(pt.ConfigContext),r=t.getPrefixCls,n=r("pro-steps-form");e.current,e.onCurrentChange;var a=e.submitter,o=e.stepsFormRender,s=e.stepsRender,l=e.stepFormRender,u=e.stepsProps,c=e.onFinish,d=e.formProps,f=e.containerStyle,v=e.formRef,m=e.formMapRef,p=ze(e,OI),g=i.useRef(new Map),y=i.useRef(new Map),b=i.useRef([]),C=i.useState([]),S=U(C,2),P=S[0],E=S[1],w=i.useState(!1),F=U(w,2),$=F[0],k=F[1],O=Gt(),D=kt(0,{value:e.current,onChange:e.onCurrentChange}),R=U(D,2),T=R[0],N=R[1],M=i.useMemo(function(){return II[(u==null?void 0:u.direction)||"horizontal"]},[u==null?void 0:u.direction]),I=i.useMemo(function(){return T===P.length-1},[P.length,T]),L=i.useCallback(function(G,te){y.current.has(G)||E(function(ee){return[].concat(Ke(ee),[G])}),y.current.set(G,te)},[]),j=i.useCallback(function(G){E(function(te){return te.filter(function(ee){return ee!==G})}),y.current.delete(G),g.current.delete(G)},[]);i.useImperativeHandle(m,function(){return b.current}),i.useImperativeHandle(v,function(){var G;return(G=b.current[T||0])===null||G===void 0?void 0:G.current},[T]);var _=i.useCallback(function(){var G=xt(Ve().mark(function te(ee,le){var re,ge;return Ve().wrap(function(me){for(;;)switch(me.prev=me.next){case 0:if(g.current.set(ee,le),!(!I||!c)){me.next=3;break}return me.abrupt("return");case 3:return k(!0),re=Ju.apply(void 0,[{}].concat(Ke(Array.from(g.current.values())))),me.prev=5,me.next=8,c(re);case 8:ge=me.sent,ge&&(N(0),b.current.forEach(function(ce){var fe;return(fe=ce.current)===null||fe===void 0?void 0:fe.resetFields()})),me.next=15;break;case 12:me.prev=12,me.t0=me.catch(5),console.log(me.t0);case 15:return me.prev=15,k(!1),me.finish(15);case 18:case"end":return me.stop()}},te,null,[[5,12,15,18]])}));return function(te,ee){return G.apply(this,arguments)}}(),[I,c,k,N]),K=i.useMemo(function(){return x.jsx("div",{className:"".concat(n,"-steps-container"),style:{maxWidth:Math.min(P.length*320,1160)},children:x.jsx(Vc,h(h({},u),{},{current:T,onChange:void 0,children:P.map(function(G){var te=y.current.get(G);return x.jsx(Vc.Step,h({title:te==null?void 0:te.title},te==null?void 0:te.stepProps),G)})}))})},[P,n,T,u]),z=Qr(function(){var G,te=b.current[T];(G=te.current)===null||G===void 0||G.submit()}),A=Qr(function(){T<1||N(T-1)}),V=i.useMemo(function(){return a!==!1&&x.jsx(_n,h(h({type:"primary",loading:$},a==null?void 0:a.submitButtonProps),{},{onClick:function(){var te;a==null||(te=a.onSubmit)===null||te===void 0||te.call(a),z()},children:O.getMessage("stepsForm.next","下一步")}),"next")},[O,$,z,a]),X=i.useMemo(function(){return a!==!1&&x.jsx(_n,h(h({},a==null?void 0:a.resetButtonProps),{},{onClick:function(){var te;A(),a==null||(te=a.onReset)===null||te===void 0||te.call(a)},children:O.getMessage("stepsForm.prev","上一步")}),"pre")},[O,A,a]),H=i.useMemo(function(){return a!==!1&&x.jsx(_n,h(h({type:"primary",loading:$},a==null?void 0:a.submitButtonProps),{},{onClick:function(){var te;a==null||(te=a.onSubmit)===null||te===void 0||te.call(a),z()},children:O.getMessage("stepsForm.submit","提交")}),"submit")},[O,$,z,a]),Q=Qr(function(){T>P.length-2||N(T+1)}),Y=i.useMemo(function(){var G=[],te=T||0;if(te<1?G.push(V):te+1===P.length?G.push(X,H):G.push(X,V),G=G.filter(Z.isValidElement),a&&a.render){var ee,le={form:(ee=b.current[T])===null||ee===void 0?void 0:ee.current,onSubmit:z,step:T,onPre:A};return a.render(le,G)}return a&&(a==null?void 0:a.render)===!1?null:G},[P.length,V,z,X,A,T,H,a]),ae=i.useMemo(function(){return Rn(e.children).map(function(G,te){var ee=G.props,le=ee.name||"".concat(te),re=T===te,ge=re?{contentRender:l,submitter:!1}:{};return x.jsx("div",{className:ve("".concat(n,"-step"),B({},"".concat(n,"-step-active"),re)),children:Z.cloneElement(G,h(h(h(h({},ge),d),ee),{},{name:le,step:te,key:le}))},le)})},[d,n,e.children,T,l]),q=i.useMemo(function(){return s?s(P.map(function(G){var te;return{key:G,title:(te=y.current.get(G))===null||te===void 0?void 0:te.title}}),K):K},[P,K,s]),ne=i.useMemo(function(){return x.jsxs("div",{className:"".concat(n,"-container"),style:f,children:[ae,o?null:x.jsx(Xt,{children:Y})]})},[f,ae,n,o,Y]),ue=i.useMemo(function(){var G={stepsDom:q,formDom:ne};return o?o(M(G),Y):M(G)},[q,ne,M,o,Y]);return x.jsx("div",{className:n,children:x.jsx(zt.Provider,h(h({},p),{},{children:x.jsx(Oh.Provider,{value:{loading:$,setLoading:k,regForm:L,keyArray:P,next:Q,formArrayRef:b,formMapRef:y,lastStep:I,unRegForm:j,onFormFinish:_},children:ue})}))})}function Ll(e){return x.jsx(gh,{children:x.jsx(_I,h({},e))})}Ll.StepForm=DI;Ll.useForm=zt.useForm;var LI=function(t){var r=t.children;return x.jsx(x.Fragment,{children:r})};const jI=LI;var AI=["steps","columns","forceUpdate","grid"],KI=function(t){var r=t.steps,n=t.columns,a=t.forceUpdate,o=t.grid,s=ze(t,AI),l=Qu(s),u=i.useCallback(function(d){var f,v;(f=(v=l.current).onCurrentChange)===null||f===void 0||f.call(v,d),a([])},[a,l]),c=i.useMemo(function(){return r==null?void 0:r.map(function(d,f){return i.createElement(Ih,h(h({grid:o},d),{},{key:f,layoutType:"StepForm",columns:n[f]}))})},[n,o,r]);return x.jsx(Ll,h(h({},s),{},{onCurrentChange:u,children:c}))};const VI=KI;var zI=function(t,r){var n=r.genItems;if(t.valueType==="dependency"){var a,o,s,l=(a=t.getFieldProps)===null||a===void 0?void 0:a.call(t);return tn(Array.isArray((o=t.name)!==null&&o!==void 0?o:l==null?void 0:l.name),'SchemaForm: fieldProps.name should be NamePath[] when valueType is "dependency"'),tn(typeof t.columns=="function",'SchemaForm: columns should be a function when valueType is "dependency"'),Array.isArray((s=t.name)!==null&&s!==void 0?s:l==null?void 0:l.name)?i.createElement(tc,h(h({name:t.name},l),{},{key:t.key}),function(u){return!t.columns||typeof t.columns!="function"?null:n(t.columns(u))}):null}return!0},BI=function(t){if(t.valueType==="divider"){var r;return i.createElement(Cv,h(h({},(r=t.getFieldProps)===null||r===void 0?void 0:r.call(t)),{},{key:t.key}))}return!0},HI=function(t,r){var n=r.action,a=r.formRef,o=r.type,s=r.originItem,l=h(h({},rn(t,["dataIndex","width","render","renderFormItem","renderText","title"])),{},{name:t.dataIndex,width:t.width,render:t!=null&&t.render?function(f,v,m){var p,g,y;return t==null||(p=t.render)===null||p===void 0?void 0:p.call(t,f,v,m,n==null?void 0:n.current,h(h({type:o},t),{},{formItemProps:(g=t.getFormItemProps)===null||g===void 0?void 0:g.call(t),fieldProps:(y=t.getFieldProps)===null||y===void 0?void 0:y.call(t)}))}:void 0}),u=function(){return x.jsx(tl,h(h({},l),{},{ignoreFormItem:!0}))},c=t!=null&&t.renderFormItem?function(f,v){var m,p,g,y=Wn(h(h({},v),{},{onChange:void 0}));return t==null||(m=t.renderFormItem)===null||m===void 0?void 0:m.call(t,h(h({type:o},t),{},{formItemProps:(p=t.getFormItemProps)===null||p===void 0?void 0:p.call(t),fieldProps:(g=t.getFieldProps)===null||g===void 0?void 0:g.call(t),originProps:s}),h(h({},y),{},{defaultRender:u,type:o}),a.current)}:void 0;if(t!=null&&t.renderFormItem){var d=c==null?void 0:c(null,{});if(!d||t.ignoreFormItem)return d}return i.createElement(tl,h(h({},l),{},{key:"".concat(t.key,"-").concat(t.index),renderFormItem:c}))},WI=function(t,r){var n=r.genItems;if(t.valueType==="formList"&&t.dataIndex){var a,o,s,l,u,c,d,f,v,m,p;return!t.columns||!Array.isArray(t.columns)?null:x.jsx(XO,h(h({name:t.dataIndex,label:t.label,initialValue:t.initialValue,colProps:t.colProps,rowProps:t.rowProps},(a=t.getFieldProps)===null||a===void 0?void 0:a.call(t)),{},{isValidateList:(o=((u=t.getFormItemProps)===null||u===void 0?void 0:u.call(t))||((c=t.getFieldProps)===null||c===void 0?void 0:c.call(t)))===null||o===void 0||(s=o.rules)===null||s===void 0||(l=s[0])===null||l===void 0?void 0:l.required,emptyListMessage:(d=((m=t.getFormItemProps)===null||m===void 0?void 0:m.call(t))||((p=t.getFieldProps)===null||p===void 0?void 0:p.call(t)))===null||d===void 0||(f=d.rules)===null||f===void 0||(v=f[0])===null||v===void 0?void 0:v.message,children:n(t.columns)}),t.key)}return!0},UI=function(t,r){var n=r.genItems;if(t.valueType==="formSet"&&t.dataIndex){var a,o;return!t.columns||!Array.isArray(t.columns)?null:i.createElement(iI,h(h({},(a=t.getFormItemProps)===null||a===void 0?void 0:a.call(t)),{},{key:t.key,initialValue:t.initialValue,name:t.dataIndex,label:t.label,colProps:t.colProps,rowProps:t.rowProps},(o=t.getFieldProps)===null||o===void 0?void 0:o.call(t)),n(t.columns))}return!0},YI=function(t,r){var n=r.genItems;if(t.valueType==="group"){var a;return!t.columns||!Array.isArray(t.columns)?null:x.jsx(o_,h(h({label:t.label,colProps:t.colProps,rowProps:t.rowProps},(a=t.getFieldProps)===null||a===void 0?void 0:a.call(t)),{},{children:n(t.columns)}),t.key)}return!0},GI=function(t){return t.valueType&&typeof t.valueType=="string"&&["index","indexBorder","option"].includes(t==null?void 0:t.valueType)?null:!0},Hf=[GI,YI,WI,UI,BI,zI],qI=function(t,r){for(var n=0;n0&&arguments[0]!==void 0?arguments[0]:[],z=Wf(K);if(!z)throw new Error("nameList is require");var A=(_=D())===null||_===void 0?void 0:_.getFieldValue(z),V=z?hn({},z,A):A;return pn(a(V,g,z),z)},getFieldFormatValueObject:function(_){var K,z=Wf(_),A=(K=D())===null||K===void 0?void 0:K.getFieldValue(z),V=z?hn({},z,A):A;return a(V,g,z)},validateFieldsReturnFormatValue:function(){var j=xt(Ve().mark(function K(z){var A,V,X;return Ve().wrap(function(Q){for(;;)switch(Q.prev=Q.next){case 0:if(!(!Array.isArray(z)&&z)){Q.next=2;break}throw new Error("nameList must be array");case 2:return Q.next=4,(A=D())===null||A===void 0?void 0:A.validateFields(z);case 4:return V=Q.sent,X=a(V,g),Q.abrupt("return",X||{});case 7:case"end":return Q.stop()}},K)}));function _(K){return j.apply(this,arguments)}return _}(),formRef:$}},[g,a]),T=i.useMemo(function(){return Z.Children.toArray(t).map(function(j,_){return _===0&&Z.isValidElement(j)&&b?Z.cloneElement(j,h(h({},j.props),{},{autoFocus:b})):j})},[b,t]),N=i.useMemo(function(){return typeof n=="boolean"||!n?{}:n},[n]);i.useImperativeHandle(o,function(){return h(h({},w),R)},[R,w]);var M=i.useMemo(function(){if(n!==!1)return x.jsx(JI,h(h({},N),{},{onReset:function(){var _,K,z=a((_=$.current)===null||_===void 0?void 0:_.getFieldsValue(),g);if(N==null||(K=N.onReset)===null||K===void 0||K.call(N,z),m==null||m(z),f){var A,V=Object.keys(a((A=$.current)===null||A===void 0?void 0:A.getFieldsValue(),!1)).reduce(function(X,H){return h(h({},X),{},B({},H,z[H]||void 0))},d);v(su(f,V,"set"))}},submitButtonProps:h({loading:u},N.submitButtonProps)}),"submitter")},[n,N,u,a,g,m,f,d,v]),I=i.useMemo(function(){var j=C?x.jsx(O,{children:T}):T;return r?r(j,M,$.current):j},[C,O,T,r,M]),L=xh(e.initialValues);return i.useEffect(function(){if(!(f||!e.initialValues||!L||E.request)){var j=Mr(e.initialValues,L);tn(j,"initialValues 只在 form 初始化时生效,如果你需要异步加载推荐使用 request,或者 initialValues ?
: null "),tn(j,"The initialValues only take effect when the form is initialized, if you need to load asynchronously recommended request, or the initialValues ? : null ")}},[e.initialValues]),i.useEffect(function(){var j,_,K=a((j=$.current)===null||j===void 0||(_=j.getFieldsValue)===null||_===void 0?void 0:_.call(j,!0),g);s==null||s(K,$.current)},[]),x.jsx(Zu.Provider,{value:R,children:x.jsx(pt.SizeContext.Provider,{value:E.size||F,children:x.jsxs(Ph.Provider,{value:{grid:C,colProps:P},children:[E.component!==!1&&x.jsx("input",{type:"text",style:{display:"none"}}),I]})})})}var Uf=0;function Ya(e){var t=e.extraUrlParams,r=t===void 0?{}:t,n=e.syncToUrl,a=e.isKeyPressSubmit,o=e.syncToUrlAsImportant,s=o===void 0?!1:o,l=e.syncToInitialValues,u=l===void 0?!0:l;e.children,e.contentRender,e.submitter;var c=e.fieldProps,d=e.formItemProps,f=e.groupProps,v=e.dateFormatter,m=v===void 0?"string":v,p=e.formRef;e.onInit;var g=e.form,y=e.formComponentType;e.onReset,e.grid,e.rowProps,e.colProps;var b=e.omitNil,C=b===void 0?!0:b,S=e.request,P=e.params,E=e.initialValues,w=e.formKey,F=w===void 0?Uf:w;e.readonly;var $=ze(e,t_),k=i.useRef({}),O=ai(!1),D=U(O,2),R=D[0],T=D[1],N=Z$({},{disabled:!n}),M=U(N,2),I=M[0],L=M[1],j=i.useRef(ec());i.useEffect(function(){Uf+=0},[]);var _=I$({request:S,params:P,proFieldKey:F}),K=U(_,1),z=K[0],A=i.useState(function(){return n?su(n,I,"get"):{}}),V=U(A,2),X=V[0],H=V[1],Q=i.useRef({}),Y=i.useRef({}),ae=i.useCallback(function(ue,G,te){return q$(P$(ue,m,Y.current,G,te),Q.current,G)},[m]);i.useEffect(function(){u||H({})},[u]),i.useEffect(function(){n&&L(h(h({},I),r))},[r,n]);var q=i.useMemo(function(){if(!(typeof window>"u")&&y&&["DrawerForm"].includes(y))return function(ue){return ue.parentNode||document.body}},[y]),ne=Qr(xt(Ve().mark(function ue(){var G,te,ee,le,re,ge;return Ve().wrap(function(me){for(;;)switch(me.prev=me.next){case 0:if($.onFinish){me.next=2;break}return me.abrupt("return");case 2:if(!R){me.next=4;break}return me.abrupt("return");case 4:return T(!0),me.prev=5,ee=k==null||(G=k.current)===null||G===void 0||(te=G.getFieldsFormatValue)===null||te===void 0?void 0:te.call(G),me.next=9,$.onFinish(ee);case 9:n&&(ge=Object.keys(k==null||(le=k.current)===null||le===void 0||(re=le.getFieldsFormatValue)===null||re===void 0?void 0:re.call(le,void 0,!1)).reduce(function(ce,fe){var ie;return h(h({},ce),{},B({},fe,(ie=ee[fe])!==null&&ie!==void 0?ie:void 0))},r),Object.keys(I).forEach(function(ce){ge[ce]!==!1&&ge[ce]!==0&&!ge[ce]&&(ge[ce]=void 0)}),L(su(n,ge,"set"))),T(!1),me.next=16;break;case 13:me.prev=13,me.t0=me.catch(5),T(!1);case 16:case"end":return me.stop()}},ue,null,[[5,13]])})));return i.useImperativeHandle(p,function(){return k.current},[!z]),!z&&e.request?x.jsx("div",{style:{paddingTop:50,paddingBottom:50,textAlign:"center"},children:x.jsx(Fr,{})}):x.jsx(Fh.Provider,{value:{mode:e.readonly?"read":"edit"},children:x.jsx(gh,{children:x.jsx(_l.Provider,{value:{formRef:k,fieldProps:c,formItemProps:d,groupProps:f,formComponentType:y,getPopupContainer:q,formKey:j.current,setFieldValueType:function(G,te){var ee=te.valueType,le=ee===void 0?"text":ee,re=te.dateFormat,ge=te.transform;Array.isArray(G)&&(Q.current=hn(Q.current,G,ge),Y.current=hn(Y.current,G,{valueType:le,dateFormat:re}))}},children:x.jsx(zt,h(h({onKeyPress:function(G){if(a&&G.key==="Enter"){var te;(te=k.current)===null||te===void 0||te.submit()}},autoComplete:"off",form:g},rn($,["autoFocusFirstInput"])),{},{initialValues:s?h(h(h({},z),E),X):h(h(h({},X),z),E),onValuesChange:function(G,te){var ee;$==null||(ee=$.onValuesChange)===null||ee===void 0||ee.call($,ae(G,!!C),ae(te,!!C))},onFinish:ne,children:x.jsx(n_,h(h({transformKey:ae,autoComplete:"off",loading:R,onUrlSearchChange:L},e),{},{formRef:k,initialValues:h(h({},E),z)}))}))})})})}var r_=["label","size","disabled","onChange","className","style","children","valuePropName","placeholder","labelFormatter","bordered","footerRender","allowClear","otherFieldProps","valueType","placement"],a_=function(t){var r,n=t.label,a=t.size,o=t.disabled,s=t.onChange,l=t.className,u=t.style,c=t.children,d=t.valuePropName,f=t.placeholder,v=t.labelFormatter,m=t.bordered,p=t.footerRender,g=t.allowClear,y=t.otherFieldProps,b=t.valueType,C=t.placement,S=ze(t,r_),P=i.useContext(pt.ConfigContext),E=P.getPrefixCls,w=E("pro-field-light-wrapper"),F=i.useState(t[d]),$=U(F,2),k=$[0],O=$[1],D=ai(!1),R=U(D,2),T=R[0],N=R[1],M=function(){for(var _,K=arguments.length,z=new Array(K),A=0;A");return a}return{Provider:r,useContainer:n}}function w_(){var e,t,r,n,a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},o=i.useRef(),s=i.useRef(null),l=i.useRef(),u=i.useRef(),c=i.useState(""),d=U(c,2),f=d[0],v=d[1],m=i.useRef([]),p=kt(function(){return a.size||a.defaultSize||"middle"},{value:a.size,onChange:a.onSizeChange}),g=U(p,2),y=g[0],b=g[1],C=i.useMemo(function(){var k,O={};return(k=a.columns)===null||k===void 0||k.forEach(function(D,R){var T=D.key,N=D.dataIndex,M=D.fixed,I=D.disable,L=Ga(T??N,R);L&&(O[L]={show:!0,fixed:M,disable:I})}),O},[a.columns]),S=kt(function(){var k,O,D=a.columnsState||{},R=D.persistenceType,T=D.persistenceKey;if(T&&R&&typeof window<"u"){var N=window[R];try{var M=N==null?void 0:N.getItem(T);if(M)return JSON.parse(M)}catch(I){console.warn(I)}}return a.columnsStateMap||((k=a.columnsState)===null||k===void 0?void 0:k.value)||((O=a.columnsState)===null||O===void 0?void 0:O.defaultValue)||C},{value:((e=a.columnsState)===null||e===void 0?void 0:e.value)||a.columnsStateMap,onChange:((t=a.columnsState)===null||t===void 0?void 0:t.onChange)||a.onColumnsStateChange}),P=U(S,2),E=P[0],w=P[1];i.useLayoutEffect(function(){var k=a.columnsState||{},O=k.persistenceType,D=k.persistenceKey;if(D&&O&&typeof window<"u"){var R=window[O];try{var T=R==null?void 0:R.getItem(D);w(T?JSON.parse(T):C)}catch(N){console.warn(N)}}},[a.columnsState,C,w]),tn(!a.columnsStateMap,"columnsStateMap已经废弃,请使用 columnsState.value 替换"),tn(!a.columnsStateMap,"columnsStateMap has been discarded, please use columnSstate.value replacement");var F=i.useCallback(function(){var k=a.columnsState||{},O=k.persistenceType,D=k.persistenceKey;if(!(!D||!O||typeof window>"u")){var R=window[O];try{R==null||R.removeItem(D)}catch(T){console.error(T)}}},[a.columnsState]);i.useEffect(function(){var k,O;if(!(!(!((k=a.columnsState)===null||k===void 0)&&k.persistenceKey)||!(!((O=a.columnsState)===null||O===void 0)&&O.persistenceType))&&!(typeof window>"u")){var D=a.columnsState,R=D.persistenceType,T=D.persistenceKey,N=window[R];try{N==null||N.setItem(T,JSON.stringify(E))}catch(M){console.error(M)}}},[(r=a.columnsState)===null||r===void 0?void 0:r.persistenceKey,E,(n=a.columnsState)===null||n===void 0?void 0:n.persistenceType]);var $={action:o.current,setAction:function(O){o.current=O},sortKeyColumns:m.current,setSortKeyColumns:function(O){m.current=O},propsRef:u,columnsMap:E,keyWords:f,setKeyWords:function(O){return v(O)},setTableSize:b,tableSize:y,prefixName:l.current,setPrefixName:function(O){l.current=O},setColumnsMap:w,columns:a.columns,rootDomRef:s,clearPersistenceStorage:F};return Object.defineProperty($,"prefixName",{get:function(){return l.current}}),Object.defineProperty($,"sortKeyColumns",{get:function(){return m.current}}),Object.defineProperty($,"action",{get:function(){return o.current}}),$}var P_=S_(w_);const Ir=P_;var E_=["key","dataIndex","children"],cs=function(t){var r=t.title,n=t.show,a=t.children,o=t.columnKey,s=t.fixed,l=Ir.useContainer(),u=l.columnsMap,c=l.setColumnsMap;return n?x.jsx(nn,{title:r,children:x.jsx("span",{onClick:function(f){f.stopPropagation(),f.preventDefault();var v=u[o]||{},m=typeof v.disable=="boolean"&&v.disable;if(!m){var p=h(h({},u),{},B({},o,h(h({},v),{},{fixed:s})));c(p)}},children:a})}):null},k_=function(t){var r=t.columnKey,n=t.isLeaf,a=t.title,o=t.className,s=t.fixed,l=qn(),u=x.jsxs("span",{className:"".concat(o,"-list-item-option"),children:[x.jsx(cs,{columnKey:r,fixed:"left",title:l.getMessage("tableToolBar.leftPin","固定在列首"),show:s!=="left",children:x.jsx(sy,{})}),x.jsx(cs,{columnKey:r,fixed:void 0,title:l.getMessage("tableToolBar.noPin","不固定"),show:!!s,children:x.jsx(ry,{})}),x.jsx(cs,{columnKey:r,fixed:"right",title:l.getMessage("tableToolBar.rightPin","固定在列尾"),show:s!=="right",children:x.jsx(Q1,{})})]});return x.jsxs("span",{className:"".concat(o,"-list-item"),children:[x.jsx("div",{className:"".concat(o,"-list-item-title"),children:a}),n?null:u]},r)},ds=function(t){var r,n,a=t.list,o=t.draggable,s=t.checkable,l=t.className,u=t.showTitle,c=u===void 0?!0:u,d=t.title,f=t.listHeight,v=f===void 0?280:f,m=Ir.useContainer(),p=m.columnsMap,g=m.setColumnsMap,y=m.sortKeyColumns,b=m.setSortKeyColumns,C=a&&a.length>0,S=i.useMemo(function(){if(!C)return{};var F=[],$=function k(O,D){return O.map(function(R){var T,N=R.key;R.dataIndex;var M=R.children,I=ze(R,E_),L=Ga(N,I.index),j=p[L||"null"]||{show:!0};j.show!==!1&&(D==null?void 0:D.show)!==!1&&!M&&F.push(L);var _=h(h({key:L},rn(I,["className"])),{},{selectable:!1,disabled:j.disable===!0,disableCheckbox:typeof j.disable=="boolean"?j.disable:(T=j.disable)===null||T===void 0?void 0:T.checkbox,isLeaf:D?!0:void 0});return M&&(_.children=k(M,j)),_})};return{list:$(a),keys:F}},[p,a,C]),P=Jt(function(F,$,k){var O=h({},p),D=Ke(y),R=D.findIndex(function(I){return I===F}),T=D.findIndex(function(I){return I===$}),N=k>T;if(!(R<0)){var M=D[R];D.splice(R,1),k===0?D.unshift(M):D.splice(N?T:T+1,0,M),D.forEach(function(I,L){O[I]=h(h({},O[I]||{}),{},{order:L})}),g(O),b(D)}}),E=Jt(function(F){var $=F.node.key,k=h({},p[$]);k.show=F.checked,g(h(h({},p),{},B({},$,k)))});if(!C)return null;var w=x.jsx(ep,{itemHeight:24,draggable:o&&!!(!((r=S.list)===null||r===void 0)&&r.length)&&((n=S.list)===null||n===void 0?void 0:n.length)>1,checkable:s,onDrop:function($){var k=$.node.key,O=$.dragNode.key,D=$.dropPosition,R=$.dropToGap,T=D===-1||!R?D+1:D;P(O,k,T)},blockNode:!0,onCheck:function($,k){return E(k)},checkedKeys:S.keys,showLine:!1,titleRender:function($){var k=h(h({},$),{},{children:void 0});return x.jsx(k_,h(h({className:l},k),{},{title:Ra(k.title,k),columnKey:k.key}))},height:v,treeData:S.list});return x.jsxs(x.Fragment,{children:[c&&x.jsx("span",{className:"".concat(l,"-list-title"),children:d}),w]})},R_=function(t){var r=t.localColumns,n=t.className,a=t.draggable,o=t.checkable,s=t.listsHeight,l=[],u=[],c=[],d=qn();r.forEach(function(m){if(!m.hideInSetting){var p=m.fixed;if(p==="left"){u.push(m);return}if(p==="right"){l.push(m);return}c.push(m)}});var f=l&&l.length>0,v=u&&u.length>0;return x.jsxs("div",{className:ve("".concat(n,"-list"),B({},"".concat(n,"-list-group"),f||v)),children:[x.jsx(ds,{title:d.getMessage("tableToolBar.leftFixedTitle","固定在左侧"),list:u,draggable:a,checkable:o,className:n,listHeight:s}),x.jsx(ds,{list:c,draggable:a,checkable:o,title:d.getMessage("tableToolBar.noFixedTitle","不固定"),showTitle:v||f,className:n,listHeight:s}),x.jsx(ds,{title:d.getMessage("tableToolBar.rightFixedTitle","固定在右侧"),list:l,draggable:a,checkable:o,className:n,listHeight:s})]})};function M_(e){var t,r,n=i.useRef({}),a=Ir.useContainer(),o=e.columns,s=e.checkedReset,l=s===void 0?!0:s,u=a.columnsMap,c=a.setColumnsMap,d=a.clearPersistenceStorage;i.useEffect(function(){var P,E;if(!((P=a.propsRef.current)===null||P===void 0||(E=P.columnsState)===null||E===void 0)&&E.value){var w,F;n.current=JSON.parse(JSON.stringify(((w=a.propsRef.current)===null||w===void 0||(F=w.columnsState)===null||F===void 0?void 0:F.value)||{}))}},[]);var f=Jt(function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,E={},w=function F($){$.forEach(function(k){var O=k.key,D=k.fixed,R=k.index,T=k.children,N=Ga(O,R);N&&(E[N]={show:P,fixed:D}),T&&F(T)})};w(o),c(E)}),v=Jt(function(P){P.target.checked?f():f(!1)}),m=Jt(function(){d==null||d(),c(n.current)}),p=Object.values(u).filter(function(P){return!P||P.show===!1}),g=p.length>0&&p.length!==o.length,y=qn(),b=i.useContext(pt.ConfigContext),C=b.getPrefixCls,S=C("pro-table-column-setting");return x.jsx(Oo,{arrowPointAtCenter:!0,title:x.jsxs("div",{className:"".concat(S,"-title"),children:[x.jsx(Sa,{indeterminate:g,checked:p.length===0&&p.length!==o.length,onChange:function(E){return v(E)},children:y.getMessage("tableToolBar.columnDisplay","列展示")}),l?x.jsx("a",{onClick:m,className:"".concat(S,"-action-rest-button"),children:y.getMessage("tableToolBar.reset","重置")}):null,e!=null&&e.extra?x.jsx(Xt,{size:12,align:"center",children:e.extra}):null]}),overlayClassName:"".concat(S,"-overlay"),trigger:"click",placement:"bottomRight",content:x.jsx(R_,{checkable:(t=e.checkable)!==null&&t!==void 0?t:!0,draggable:(r=e.draggable)!==null&&r!==void 0?r:!0,className:S,localColumns:o,listsHeight:e.listsHeight}),children:e.children||x.jsx(nn,{title:y.getMessage("tableToolBar.columnSetting","列设置"),children:x.jsx(xv,{})})})}function T_(e,t){return D_(e)||$_(e,t)||N_(e,t)||F_()}function F_(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function N_(e,t){if(e){if(typeof e=="string")return Yf(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Yf(e,t)}}function Yf(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u",r=i.useState(function(){return t?!1:window.matchMedia(e).matches}),n=T_(r,2),a=n[0],o=n[1];return i.useLayoutEffect(function(){if(!t){var s=window.matchMedia(e),l=function(c){return o(c.matches)};return s.addListener(l),function(){return s.removeListener(l)}}},[e]),a}function O_(e,t){return j_(e)||L_(e,t)||__(e,t)||I_()}function I_(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function __(e,t){if(e){if(typeof e=="string")return Gf(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Gf(e,t)}}function Gf(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r"u")return t;var r=Object.keys(Sr).find(function(n){var a=Sr[n].matchMedia;return!!window.matchMedia(a).matches});return t=r,t},K_=function(){var t=ha(Sr.md.matchMedia),r=ha(Sr.lg.matchMedia),n=ha(Sr.xxl.matchMedia),a=ha(Sr.xl.matchMedia),o=ha(Sr.sm.matchMedia),s=ha(Sr.xs.matchMedia),l=i.useState(A_()),u=O_(l,2),c=u[0],d=u[1];return i.useEffect(function(){if(n){d("xxl");return}if(a){d("xl");return}if(r){d("lg");return}if(t){d("md");return}if(o){d("sm");return}if(s){d("xs");return}d("md")},[t,r,n,a,o,s]),c};var V_=["label","key"],z_=function(t){var r=t.items,n=r===void 0?[]:r,a=t.type,o=a===void 0?"inline":a,s=t.prefixCls,l=t.activeKey,u=kt(l,{value:l,onChange:t.onChange}),c=U(u,2),d=c[0],f=c[1];if(n.length<1)return null;var v=n.find(function(m){return m.key===d})||n[0];return o==="inline"?x.jsx("div",{className:ve("".concat(s,"-menu"),"".concat(s,"-inline-menu")),children:n.map(function(m,p){return x.jsx("div",{onClick:function(){f(m.key)},className:ve("".concat(s,"-inline-menu-item"),v.key===m.key?"".concat(s,"-inline-menu-item-active"):void 0),children:m.label},m.key||p)})}):o==="tab"?x.jsx(ta,{activeKey:v.key,onTabClick:function(p){return f(p)},children:n.map(function(m,p){var g=m.label,y=m.key,b=ze(m,V_);return x.jsx(ta.TabPane,h({tab:g},b),y||p)})}):x.jsx("div",{className:ve("".concat(s,"-menu"),"".concat(s,"-dropdownmenu")),children:x.jsx(Io,{trigger:["click"],menu:{selectedKeys:[v.key],onClick:function(p){f(p.key)},items:n.map(function(m,p){return{key:m.key||p,disabled:m.disabled,label:m.label}})},children:x.jsxs(Xt,{className:"".concat(s,"-dropdownmenu-label"),children:[v.label,x.jsx(So,{})]})})})};const B_=z_;function H_(e){if(Z.isValidElement(e))return e;if(e){var t=e,r=t.icon,n=t.tooltip,a=t.onClick,o=t.key;return r&&n?x.jsx(nn,{title:n,children:x.jsx("span",{onClick:function(){a&&a(o)},children:r},o)}):r}return null}var W_=function(t){var r=t.prefixCls,n=t.tabs,a=n===void 0?{}:n,o=t.multipleLine,s=t.filtersNode;return o?x.jsx("div",{className:"".concat(r,"-extra-line"),children:a.items&&a.items.length?x.jsx(ta,{activeKey:a.activeKey,onChange:a.onChange,tabBarExtraContent:s,children:a.items.map(function(l,u){return x.jsx(ta.TabPane,h({},l),l.key||u)})}):s}):null},U_=function(t){var r=t.prefixCls,n=t.title,a=t.subTitle,o=t.tooltip,s=t.className,l=t.style,u=t.search,c=t.onSearch,d=t.multipleLine,f=d===void 0?!1:d,v=t.filter,m=t.actions,p=m===void 0?[]:m,g=t.settings,y=g===void 0?[]:g,b=t.tabs,C=b===void 0?{}:b,S=t.menu,P=qn(),E=K_(),w=E==="sm"||E==="xs",F=P.getMessage("tableForm.inputPlaceholder","请输入"),$=i.useMemo(function(){return u?Z.isValidElement(u)?u:x.jsx(kn.Search,h(h({style:{width:200},placeholder:F},u),{},{onSearch:function(){for(var z,A=arguments.length,V=new Array(A),X=0;Xae||Y!==void 0&&y&&y.length<=ae&&H.run(!1)},[k==null?void 0:k.current]),i.useEffect(function(){j&&H.run(!1)},[k==null?void 0:k.pageSize]),Xs(function(){return H.run(!1),l||(v.current=!1),function(){H.cancel()}},[].concat(Ke(A),[l])),{dataSource:y,setDataSource:b,loading:P,reload:function(){var Q=xt(Ve().mark(function ae(){return Ve().wrap(function(ne){for(;;)switch(ne.prev=ne.next){case 0:return ne.next=2,H.run(!1);case 2:case"end":return ne.stop()}},ae)}));function Y(){return Q.apply(this,arguments)}return Y}(),pageInfo:k,pollingLoading:N,reset:function(){var Q=xt(Ve().mark(function ae(){var q,ne,ue,G,te,ee,le,re;return Ve().wrap(function(Ee){for(;;)switch(Ee.prev=Ee.next){case 0:q=n||{},ne=q.pageInfo,ue=ne||{},G=ue.defaultCurrent,te=G===void 0?1:G,ee=ue.defaultPageSize,le=ee===void 0?20:ee,re={current:te,total:0,pageSize:le},D(re);case 4:case"end":return Ee.stop()}},ae)}));function Y(){return Q.apply(this,arguments)}return Y}(),setPageInfo:function(){var Q=xt(Ve().mark(function ae(q){return Ve().wrap(function(ue){for(;;)switch(ue.prev=ue.next){case 0:D(h(h({},k),q));case 1:case"end":return ue.stop()}},ae)}));function Y(ae){return Q.apply(this,arguments)}return Y}()}};const iL=oL;var lL=function(t){return function(r,n){var a,o,s=r.fixed,l=r.index,u=n.fixed,c=n.index;if(s==="left"&&u!=="left"||u==="right"&&s!=="right")return-2;if(u==="left"&&s!=="left"||s==="right"&&u!=="right")return 2;var d=r.key||"".concat(l),f=n.key||"".concat(c);if(!((a=t[d])===null||a===void 0)&&a.order||!((o=t[f])===null||o===void 0)&&o.order){var v,m;return(((v=t[d])===null||v===void 0?void 0:v.order)||0)-(((m=t[f])===null||m===void 0?void 0:m.order)||0)}return(r.index||0)-(n.index||0)}},sL=["children"],uL=["",null,void 0],qf=function(){for(var t=arguments.length,r=new Array(t),n=0;nY.length?(Y.push(V),Y):(Y.splice((s==null?void 0:s.current)*(s==null?void 0:s.pageSize)-1,0,V),Y)}return[].concat(Ke(n.dataSource),[V])},R=function(){return h(h({},F),{},{size:u,rowSelection:l===!1?void 0:l,className:r,style:c,columns:k.map(function(K){return K.isExtraColumns?K.extraColumn:K}),loading:n.loading,dataSource:E.newLineRecord?D(n.dataSource):n.dataSource,pagination:s,onChange:function(z,A,V,X){var H;if((H=F.onChange)===null||H===void 0||H.call(F,z,A,V,X),O||y(Zr(A)),Array.isArray(V)){var Q=V.reduce(function(ne,ue){return h(h({},ne),{},B({},"".concat(ue.field),ue.order))},{});g(Zr(Q))}else{var Y,ae=(Y=V.column)===null||Y===void 0?void 0:Y.sorter,q=(ae==null?void 0:ae.toString())===ae;g(Zr(B({},"".concat(q?ae:V.field),V.order))||{})}}})},T=x.jsx(ka,h(h({},R()),{},{rowKey:t})),N=e.tableViewRender?e.tableViewRender(h(h({},R()),{},{rowSelection:l!==!1?l:void 0}),T):T,M=i.useMemo(function(){if(e.editable&&!e.name){var _,K,z,A;return x.jsxs(x.Fragment,{children:[d,p,i.createElement(Ln,h(h({},(_=e.editable)===null||_===void 0?void 0:_.formProps),{},{formRef:(K=e.editable)===null||K===void 0||(z=K.formProps)===null||z===void 0?void 0:z.formRef,component:!1,form:(A=e.editable)===null||A===void 0?void 0:A.form,onValuesChange:E.onValuesChange,key:"table",submitter:!1,omitNil:!1,dateFormatter:e.dateFormatter}),N)]})}return x.jsxs(x.Fragment,{children:[d,p,N]})},[p,e.loading,!!e.editable,N,d]),I=m===!1||e.name?M:x.jsx(y9,h(h({ghost:e.ghost,bordered:_h("table",P),bodyStyle:d?{paddingTop:0}:{padding:0}},m),{},{children:M})),L=function(){return e.tableRender?e.tableRender(e,I,{toolbar:d||void 0,alert:p||void 0,table:N||void 0}):I},j=x.jsxs("div",{className:ve(S,B({},"".concat(S,"-polling"),n.pollingLoading)),style:v,ref:$.rootDomRef,children:[C?null:f,o!=="form"&&e.tableExtraRender&&x.jsx("div",{className:"".concat(S,"-extra"),children:e.tableExtraRender(e,n.dataSource||[])}),o!=="form"&&L()]});return!b||!(b!=null&&b.fullScreen)?j:x.jsx(pt,{getPopupContainer:function(){return $.rootDomRef.current||document.body},children:j})}var yL={},bL=function(t){var r;t.cardBordered;var n=t.request,a=t.className,o=t.params,s=o===void 0?yL:o,l=t.defaultData,u=t.headerTitle,c=t.postData,d=t.ghost,f=t.pagination,v=t.actionRef,m=t.columns,p=m===void 0?[]:m,g=t.toolBarRender,y=t.onLoad,b=t.onRequestError;t.style,t.cardProps,t.tableStyle,t.tableClassName,t.columnsStateMap,t.onColumnsStateChange;var C=t.options,S=t.search,P=t.name,E=t.onLoadingChange,w=t.rowSelection,F=w===void 0?!1:w,$=t.beforeSearchSubmit,k=t.tableAlertRender,O=t.defaultClassName,D=t.formRef,R=t.type,T=R===void 0?"table":R,N=t.columnEmptyText,M=N===void 0?"-":N,I=t.toolbar,L=t.rowKey,j=t.manualRequest,_=t.polling,K=t.tooltip,z=t.revalidateOnFocus,A=z===void 0?!1:z,V=ze(t,hL),X=ve(O,a),H=i.useRef(),Q=i.useRef(),Y=D||Q;i.useImperativeHandle(v,function(){return H.current});var ae=Yn(F?(F==null?void 0:F.defaultSelectedRowKeys)||[]:void 0,{value:F?F.selectedRowKeys:void 0}),q=U(ae,2),ne=q[0],ue=q[1],G=i.useRef([]),te=i.useCallback(function(ye,de){ue(ye),(!F||!(F!=null&&F.selectedRowKeys))&&(G.current=de)},[ue]),ee=Yn(function(){if(!(j||S!==!1))return{}}),le=U(ee,2),re=le[0],ge=le[1],Ee=Yn({}),me=U(Ee,2),ce=me[0],fe=me[1],ie=Yn({}),se=U(ie,2),pe=se[0],Ce=se[1];i.useEffect(function(){var ye=v_(p),de=ye.sort,be=ye.filter;fe(be),Ce(de)},[]);var Re=qn(),Fe=He(f)==="object"?f:{defaultCurrent:1,defaultPageSize:20,pageSize:20,current:1},Se=Ir.useContainer(),ke=i.useMemo(function(){if(n)return function(){var ye=xt(Ve().mark(function de(be){var Me,Ye;return Ve().wrap(function($e){for(;;)switch($e.prev=$e.next){case 0:return Me=h(h(h({},be||{}),re),s),delete Me._timestamp,$e.next=4,n(Me,pe,ce);case 4:return Ye=$e.sent,$e.abrupt("return",Ye);case 6:case"end":return $e.stop()}},de)}));return function(de){return ye.apply(this,arguments)}}()},[re,s,ce,pe,n]),Pe=iL(ke,l,{pageInfo:f===!1?!1:Fe,loading:t.loading,dataSource:t.dataSource,onDataSourceChange:t.onDataSourceChange,onLoad:y,onLoadingChange:E,onRequestError:b,postData:c,revalidateOnFocus:A,manual:re===void 0,polling:_,effects:[ya(s),ya(re),ya(ce),ya(pe)],debounceTime:t.debounceTime,onPageInfoChange:function(de){var be,Me;T==="list"||!f||!ke||(f==null||(be=f.onChange)===null||be===void 0||be.call(f,de.current,de.pageSize),f==null||(Me=f.onShowSizeChange)===null||Me===void 0||Me.call(f,de.current,de.pageSize))}});i.useEffect(function(){var ye;if(!(t.manualRequest||!t.request||!A||!((ye=t.form)===null||ye===void 0)&&ye.ignoreRules)){var de=function(){document.visibilityState==="visible"&&Pe.reload()};return document.addEventListener("visibilitychange",de),function(){return document.removeEventListener("visibilitychange",de)}}},[]);var Qe=Z.useRef(new Map),et=Z.useMemo(function(){return typeof L=="function"?L:function(ye,de){var be;return de===-1?ye==null?void 0:ye[L]:t.name?de==null?void 0:de.toString():(be=ye==null?void 0:ye[L])!==null&&be!==void 0?be:de==null?void 0:de.toString()}},[t.name,L]);i.useMemo(function(){var ye;if(!((ye=Pe.dataSource)===null||ye===void 0)&&ye.length){var de=new Map,be=Pe.dataSource.map(function(Me){var Ye=et(Me,-1);return de.set(Ye,Me),Ye});return Qe.current=de,be}return[]},[Pe.dataSource,et]),i.useEffect(function(){G.current=ne==null?void 0:ne.map(function(ye){var de;return(de=Qe.current)===null||de===void 0?void 0:de.get(ye)})},[ne]);var vt=i.useMemo(function(){var ye=f===!1?!1:h({},f),de=h(h({},Pe.pageInfo),{},{setPageInfo:function(Me){var Ye=Me.pageSize,lt=Me.current,$e=Pe.pageInfo;if(Ye===$e.pageSize||$e.current===1){Pe.setPageInfo({pageSize:Ye,current:lt});return}n&&Pe.setDataSource([]),Pe.setPageInfo({pageSize:Ye,current:T==="list"?lt:1})}});return n&&ye&&(delete ye.onChange,delete ye.onShowSizeChange),s_(ye,de,Re)},[f,Pe,Re]);Xs(function(){var ye;t.request&&s&&Pe.dataSource&&(Pe==null||(ye=Pe.pageInfo)===null||ye===void 0?void 0:ye.current)!==1&&Pe.setPageInfo({current:1})},[s]),Se.setPrefixName(t.name);var ct=i.useCallback(function(){F&&F.onChange&&F.onChange([],[],{type:"none"}),te([],[])},[F,te]);Se.setAction(H.current),Se.propsRef.current=t;var ht=V8(h(h({},t.editable),{},{tableName:t.name,getRowKey:et,childrenColumnName:((r=t.expandable)===null||r===void 0?void 0:r.childrenColumnName)||"children",dataSource:Pe.dataSource||[],setDataSource:function(de){var be,Me;(be=t.editable)===null||be===void 0||(Me=be.onValuesChange)===null||Me===void 0||Me.call(be,void 0,de),Pe.setDataSource(de)}}));u_(H,Pe,{fullScreen:function(){var de;if(!(!(!((de=Se.rootDomRef)===null||de===void 0)&&de.current)||!document.fullscreenEnabled))if(document.fullscreenElement)document.exitFullscreen();else{var be;(be=Se.rootDomRef)===null||be===void 0||be.current.requestFullscreen()}},onCleanSelected:function(){ct()},resetAll:function(){var de;ct(),fe({}),Ce({}),Se.setKeyWords(void 0),Pe.setPageInfo({current:1}),Y==null||(de=Y.current)===null||de===void 0||de.resetFields(),ge({})},editableUtils:ht}),v&&(v.current=H.current);var Ge=i.useMemo(function(){var ye;return Ah({columns:p,counter:Se,columnEmptyText:M,type:T,editableUtils:ht,rowKey:L,childrenColumnName:(ye=t.expandable)===null||ye===void 0?void 0:ye.childrenColumnName}).sort(lL(Se.columnsMap))},[p,Se==null?void 0:Se.sortKeyColumns,Se==null?void 0:Se.columnsMap,M,T,ht.editableKeys&&ht.editableKeys.join(",")]);Kp(function(){if(Ge&&Ge.length>0){var ye=Ge.map(function(de){return Ga(de.key,de.index)});Se.setSortKeyColumns(ye)}},[Ge],["render","renderFormItem"],100),Xs(function(){var ye=Pe.pageInfo,de=f||{},be=de.current,Me=be===void 0?ye==null?void 0:ye.current:be,Ye=de.pageSize,lt=Ye===void 0?ye==null?void 0:ye.pageSize:Ye;f&&(Me||lt)&&(lt!==(ye==null?void 0:ye.pageSize)||Me!==(ye==null?void 0:ye.current))&&Pe.setPageInfo({pageSize:lt||ye.pageSize,current:Me||ye.current})},[f&&f.pageSize,f&&f.current]);var _e=h(h({selectedRowKeys:ne},F),{},{onChange:function(de,be,Me){F&&F.onChange&&F.onChange(de,be,Me),te(de,be)}}),mt=S!==!1&&(S==null?void 0:S.filterType)==="light",tt=function(de){if(C&&C.search){var be,Me,Ye=C.search===!0?{}:C.search,lt=Ye.name,$e=lt===void 0?"keyword":lt,xe=(be=C.search)===null||be===void 0||(Me=be.onSearch)===null||Me===void 0?void 0:Me.call(be,Se.keyWords);if(xe!==!1){ge(h(h({},de),{},B({},$e,Se.keyWords)));return}}ge(de)},we=i.useMemo(function(){if(He(Pe.loading)==="object"){var ye;return((ye=Pe.loading)===null||ye===void 0?void 0:ye.spinning)||!1}return Pe.loading},[Pe.loading]),We=S===!1&&T!=="form"?null:x.jsx(x_,{pagination:vt,beforeSearchSubmit:$,action:H,columns:p,onFormSearchSubmit:function(de){tt(de)},ghost:d,onReset:t.onReset,onSubmit:t.onSubmit,loading:!!we,manualRequest:j,search:S,form:t.form,formRef:Y,type:t.type||"table",cardBordered:t.cardBordered,dateFormatter:t.dateFormatter}),Te=g===!1?null:x.jsx(nL,{headerTitle:u,hideToolbar:C===!1&&!u&&!g&&!I&&!mt,selectedRows:G.current,selectedRowKeys:ne,tableColumn:Ge,tooltip:K,toolbar:I,onFormSearchSubmit:function(de){ge(h(h({},re),de))},searchNode:mt?We:null,options:C,actionRef:H,toolBarRender:g}),Le=F!==!1?x.jsx(l_,{selectedRowKeys:ne,selectedRows:G.current,onCleanSelected:ct,alertOptionRender:V.tableAlertOptionRender,alertInfoRender:k,alwaysShowAlert:F==null?void 0:F.alwaysShowAlert}):null;return x.jsx(gL,h(h({},t),{},{name:P,size:Se.tableSize,onSizeChange:Se.setTableSize,pagination:vt,searchNode:We,rowSelection:F!==!1?_e:void 0,className:X,tableColumn:Ge,isLightFilter:mt,action:Pe,alertDom:Le,toolbarDom:Te,onSortChange:Ce,onFilterChange:fe,editableUtils:ht,getRowKey:et}))},Kh=function(t){var r=i.useContext(pt.ConfigContext),n=r.getPrefixCls,a=t.ErrorBoundary===!1?Z.Fragment:t.ErrorBoundary||c8;return x.jsx(Ir.Provider,{initialState:t,children:x.jsx(s8,{children:x.jsx(a,{children:x.jsx(bL,h({defaultClassName:n("pro-table")},t))})})})};Kh.Summary=ka.Summary;const TL=Kh;export{px as I,xI as M,TL as P,sy as V,Py as g,ky as s}; diff --git a/dist/assets/Table-a5e1b546.js b/dist/assets/Table-a5e1b546.js new file mode 100644 index 0000000000000000000000000000000000000000..11cef3948c02de00c702b7ef0b17e17fede99def --- /dev/null +++ b/dist/assets/Table-a5e1b546.js @@ -0,0 +1,44 @@ +import{A as Ft,f as p,w as ho,a as ee,v as dp,C as Ut,j as Ve,c as pe,b as B,e as po,d as Xs,x as en,_ as De,y as Zs,z as rn,q as yn,B as bn,p as Cn,l as xn,u as Le,o as qi,S as Fo,D as Xi,L as Na,E as Qs,F as wf,G as Js,H as fp,h as eu,I as es,J as vp,K as mp,M as hp,N as pp,t as zn,O as gp,P as yp,Q as bp,R as Yu,T as tu,U as Pf,V as Ef,W as ea,X as kf,Y as nu,Z as Rf,$ as ir,a0 as Zi,a1 as Ff,a2 as ta,a3 as Cp,a4 as Mf,a5 as Nf,a6 as Tf,a7 as Qi,a8 as xp,i as Gu,a9 as $f,aa as Sp,ab as rt,ac as Df,ad as pt,ae as $e,m as Dl,af as hn,ag as pn,ah as ru,ai as Mr,aj as Of,ak as wp,al as If,am as _f,an as Pp,ao as Lf,ap as jf,aq as Ep,ar as kp}from"./_setToString-64803aa4.js";import{r as s,_ as ne,k as kt,R as G,g as Ta,j as C,c as fi,e as Af}from"./umi-6680b95f.js";import{b as Kf,R as Mo,P as Rp,K as Ye,i as Vf,u as xt,c as Fp,d as qu,F as Ji,g as el,e as Rr,f as zf,h as tl,a as nr,E as Bf,T as un,j as nl,p as au,k as Mp,C as pa,l as Np,S as Gt}from"./TextArea-268b64d7.js";import{i as Tp,a as $p,T as ga,C as Hf}from"./index-e2aeedec.js";import{T as Dp,s as ou,a as ao,F as _t,I as Zr,b as Op,D as Wf,S as Uf,R as Ip}from"./useDebounce-f20bbecc.js";import{d as Xu,r as _p,e as iu,f as No,P as Lp,D as jp,g as Zu,h as Qu,I as En,S as Yf,E as Ju,R as Bn,C as qt,j as Ap}from"./util-5cf3b889.js";import{t as lr,u as rl,B as On}from"./button-8d21fb6b.js";import{u as al,b as Gf,B as qf,d as lu,g as Xf,a as Nr,L as Kp,c as go,S as Vp,D as zp}from"./index-d8ba9a0a.js";import{S as Fr,a as Bp,d as Hp}from"./index-b794056b.js";import{_ as To,D as $o,a as Wp,O as Up,P as Yp,M as Gp}from"./index-91d57c39.js";import{D as Zf}from"./DeleteOutlined-60e63eb1.js";import{C as qp,P as Qf,a as Xp}from"./progress-ab875831.js";import{A as Zp}from"./index-8e2c24ae.js";var Qp={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z"}}]},name:"calendar",theme:"outlined"};const Jp=Qp;var eg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Jp}))},tg=s.forwardRef(eg);const Jf=tg;var ng={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"filled"};const rg=ng;var ag=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:rg}))},og=s.forwardRef(ag);const ig=og;var lg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"}}]},name:"caret-down",theme:"outlined"};const sg=lg;var ug=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:sg}))},cg=s.forwardRef(ug);const dg=cg;var fg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M858.9 689L530.5 308.2c-9.4-10.9-27.5-10.9-37 0L165.1 689c-12.2 14.2-1.2 35 18.5 35h656.8c19.7 0 30.7-20.8 18.5-35z"}}]},name:"caret-up",theme:"outlined"};const vg=fg;var mg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:vg}))},hg=s.forwardRef(mg);const pg=hg;var gg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};const yg=gg;var bg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:yg}))},Cg=s.forwardRef(bg);const ev=Cg;var xg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M840 836H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm0-724H184c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h656c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zM610.8 378c6 0 9.4-7 5.7-11.7L515.7 238.7a7.14 7.14 0 00-11.3 0L403.6 366.3a7.23 7.23 0 005.7 11.7H476v268h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V378h62.8z"}}]},name:"column-height",theme:"outlined"};const Sg=xg;var wg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Sg}))},Pg=s.forwardRef(wg);const Eg=Pg;var kg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M272.9 512l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L186.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H532c6.7 0 10.4-7.7 6.3-12.9L272.9 512zm304 0l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L490.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H836c6.7 0 10.4-7.7 6.3-12.9L576.9 512z"}}]},name:"double-left",theme:"outlined"};const Rg=kg;var Fg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Rg}))},Mg=s.forwardRef(Fg);const Ng=Mg;var Tg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z"}}]},name:"double-right",theme:"outlined"};const $g=Tg;var Dg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:$g}))},Og=s.forwardRef(Dg);const Ig=Og;var _g={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file",theme:"outlined"};const Lg=_g;var jg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Lg}))},Ag=s.forwardRef(jg);const tv=Ag;var Kg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V642H349v196zm531.1-684H143.9c-24.5 0-39.8 26.7-27.5 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"}}]},name:"filter",theme:"filled"};const Vg=Kg;var zg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Vg}))},Bg=s.forwardRef(zg);const Hg=Bg;var Wg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880.1 154H143.9c-24.5 0-39.8 26.7-27.5 48L349 597.4V838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V597.4L907.7 202c12.2-21.3-3.1-48-27.6-48zM603.4 798H420.6V642h182.9v156zm9.6-236.6l-9.5 16.6h-183l-9.5-16.6L212.7 226h598.6L613 561.4z"}}]},name:"filter",theme:"outlined"};const Ug=Wg;var Yg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Ug}))},Gg=s.forwardRef(Yg);const qg=Gg;var Xg={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 444H820V330.4c0-17.7-14.3-32-32-32H473L355.7 186.2a8.15 8.15 0 00-5.5-2.2H96c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h698c13 0 24.8-7.9 29.7-20l134-332c1.5-3.8 2.3-7.9 2.3-12 0-17.7-14.3-32-32-32zM136 256h188.5l119.6 114.4H748V444H238c-13 0-24.8 7.9-29.7 20L136 643.2V256zm635.3 512H159l103.3-256h612.4L771.3 768z"}}]},name:"folder-open",theme:"outlined"};const Zg=Xg;var Qg=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Zg}))},Jg=s.forwardRef(Qg);const e0=Jg;var t0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 298.4H521L403.7 186.2a8.15 8.15 0 00-5.5-2.2H144c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V330.4c0-17.7-14.3-32-32-32zM840 768H184V256h188.5l119.6 114.4H840V768z"}}]},name:"folder",theme:"outlined"};const n0=t0;var r0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:n0}))},a0=s.forwardRef(r0);const o0=a0;var i0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M391 240.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L200 146.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L280 333.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L401 410c5.1.6 9.5-3.7 8.9-8.9L391 240.9zm10.1 373.2L240.8 633c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L146.3 824a8.03 8.03 0 000 11.3l42.4 42.3c3.1 3.1 8.2 3.1 11.3 0L333.7 744l43.7 43.7A8.01 8.01 0 00391 783l18.9-160.1c.6-5.1-3.7-9.4-8.8-8.8zm221.8-204.2L783.2 391c6.6-.8 9.4-8.9 4.7-13.6L744 333.6 877.7 200c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.3a8.03 8.03 0 00-11.3 0L690.3 279.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L614.1 401c-.6 5.2 3.7 9.5 8.8 8.9zM744 690.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L623 614c-5.1-.6-9.5 3.7-8.9 8.9L633 783.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L824 877.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L744 690.4z"}}]},name:"fullscreen-exit",theme:"outlined"};const l0=i0;var s0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:l0}))},u0=s.forwardRef(s0);const c0=u0;var d0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M290 236.4l43.9-43.9a8.01 8.01 0 00-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7a8.01 8.01 0 0013.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 000 11.3l42.4 42.4zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 00-11.3 0l-42.4 42.3a8.03 8.03 0 000 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 004.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9L845 694.9zm-463.7-94.6a8.03 8.03 0 00-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 00-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z"}}]},name:"fullscreen",theme:"outlined"};const f0=d0;var v0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:f0}))},m0=s.forwardRef(v0);const h0=m0;var p0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M300 276.5a56 56 0 1056-97 56 56 0 00-56 97zm0 284a56 56 0 1056-97 56 56 0 00-56 97zM640 228a56 56 0 10112 0 56 56 0 00-112 0zm0 284a56 56 0 10112 0 56 56 0 00-112 0zM300 844.5a56 56 0 1056-97 56 56 0 00-56 97zM640 796a56 56 0 10112 0 56 56 0 00-112 0z"}}]},name:"holder",theme:"outlined"};const g0=p0;var y0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:g0}))},b0=s.forwardRef(y0);const C0=b0;var x0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"minus-square",theme:"outlined"};const S0=x0;var w0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:S0}))},P0=s.forwardRef(w0);const E0=P0;var k0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M328 544h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8z"}},{tag:"path",attrs:{d:"M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"plus-square",theme:"outlined"};const R0=k0;var F0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:R0}))},M0=s.forwardRef(F0);const N0=M0;var T0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H188V494h440v326z"}},{tag:"path",attrs:{d:"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8a325.95 325.95 0 016.5 140.9h74.9c14.8-103.6-11.3-213-81-302.3z"}}]},name:"rotate-left",theme:"outlined"};const $0=T0;var D0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:$0}))},O0=s.forwardRef(D0);const I0=O0;var _0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2A399.75 399.75 0 00123.5 631h74.9c-.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8z"}},{tag:"path",attrs:{d:"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H396V494h440v326z"}}]},name:"rotate-right",theme:"outlined"};const L0=_0;var j0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:L0}))},A0=s.forwardRef(j0);const K0=A0;var V0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3a32.05 32.05 0 00.6 45.3l183.7 179.1-43.4 252.9a31.95 31.95 0 0046.4 33.7L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3z"}}]},name:"star",theme:"filled"};const z0=V0;var B0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:z0}))},H0=s.forwardRef(B0);const W0=H0;var U0={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z"}}]},name:"swap-right",theme:"outlined"};const Y0=U0;var G0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Y0}))},q0=s.forwardRef(G0);const X0=q0;var Z0={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 780H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM505.7 669a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V176c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8z"}}]},name:"vertical-align-bottom",theme:"outlined"};const Q0=Z0;var J0=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:Q0}))},e1=s.forwardRef(J0);const t1=e1;var n1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 474H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zm-353.6-74.7c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H550V104c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v156h-62.8c-6 0-9.4 7-5.7 11.7l100.8 127.6zm11.4 225.4a7.14 7.14 0 00-11.3 0L405.6 752.3a7.23 7.23 0 005.7 11.7H474v156c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V764h62.8c6 0 9.4-7 5.7-11.7L517.7 624.7z"}}]},name:"vertical-align-middle",theme:"outlined"};const r1=n1;var a1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:r1}))},o1=s.forwardRef(a1);const i1=o1;var l1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M859.9 168H164.1c-4.5 0-8.1 3.6-8.1 8v60c0 4.4 3.6 8 8.1 8h695.8c4.5 0 8.1-3.6 8.1-8v-60c0-4.4-3.6-8-8.1-8zM518.3 355a8 8 0 00-12.6 0l-112 141.7a7.98 7.98 0 006.3 12.9h73.9V848c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V509.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 355z"}}]},name:"vertical-align-top",theme:"outlined"};const s1=l1;var u1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:s1}))},c1=s.forwardRef(u1);const d1=c1;var f1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"warning",theme:"filled"};const v1=f1;var m1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:v1}))},h1=s.forwardRef(m1);const p1=h1;var g1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-in",theme:"outlined"};const y1=g1;var b1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:y1}))},C1=s.forwardRef(b1);const x1=C1;var S1={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z"}}]},name:"zoom-out",theme:"outlined"};const w1=S1;var P1=function(e,r){return s.createElement(Ft,p(p({},e),{},{ref:r,icon:w1}))},E1=s.forwardRef(P1);const k1=E1;function ts(t){return t!=null&&t===t.window}function R1(t,e){var r,n;if(typeof window>"u")return 0;var a=e?"scrollTop":"scrollLeft",o=0;return ts(t)?o=t[e?"pageYOffset":"pageXOffset"]:t instanceof Document?o=t.documentElement[a]:(t instanceof HTMLElement||t)&&(o=t[a]),t&&!ts(t)&&typeof o!="number"&&(o=(n=((r=t.ownerDocument)!==null&&r!==void 0?r:t).documentElement)===null||n===void 0?void 0:n[a]),o}function F1(t,e,r,n){var a=r-e;return t/=n/2,t<1?a/2*t*t*t+e:a/2*((t-=2)*t*t+2)+e}function M1(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=e.getContainer,n=r===void 0?function(){return window}:r,a=e.callback,o=e.duration,l=o===void 0?450:o,i=n(),u=R1(i,!0),c=Date.now(),d=function f(){var v=Date.now(),m=v-c,h=F1(m>l?l:m,u,t,l);ts(i)?i.scrollTo(window.pageXOffset,h):i instanceof Document||i.constructor.name==="HTMLDocument"?i.documentElement.scrollTop=h:i.scrollTop=h,m0&&arguments[0]!==void 0?arguments[0]:!0,e=s.useRef({}),r=Kf();return s.useEffect(function(){var n=Xu.subscribe(function(a){e.current=a,t&&r()});return function(){return Xu.unsubscribe(n)}},[]),e.current}var ns=s.createContext("default"),ec=function(e){var r=e.children,n=e.size;return s.createElement(ns.Consumer,null,function(a){return s.createElement(ns.Provider,{value:n||a},r)})},N1=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);af?"".concat(f,"+"):c,$=O==="0"||O===0,F=c===null||$&&!E,N=(o!=null||i!=null)&&F,R=m&&!$,I=R?"":O,L=s.useMemo(function(){var ue=I==null||I==="";return(ue||$&&!E)&&!R},[I,$,E,R]),j=s.useRef(c);L||(j.current=c);var _=j.current,A=s.useRef(I);L||(A.current=I);var K=A.current,z=s.useRef(R);L||(z.current=R);var V=s.useMemo(function(){if(!b)return ne({},x);var ue={marginTop:b[1]};return k==="rtl"?ue.left=parseInt(b[0],10):ue.right=-parseInt(b[0],10),ne(ne({},ue),x)},[k,b,x]),X=g??(typeof _=="string"||typeof _=="number"?_:void 0),W=L||!l?null:s.createElement("span",{className:"".concat(D,"-status-text")},l),Z=!_||Ve(_)!=="object"?void 0:po(_,function(ue){return{style:ne(ne({},V),ue.style)}}),U=pe(B(B(B({},"".concat(D,"-status-dot"),N),"".concat(D,"-status-").concat(o),!!o),"".concat(D,"-status-").concat(i),eo(i))),ae={};i&&!eo(i)&&(ae.background=i);var q=pe(D,B(B(B({},"".concat(D,"-status"),N),"".concat(D,"-not-a-wrapper"),!a),"".concat(D,"-rtl"),k==="rtl"),S);if(!a&&N){var te=V.color;return s.createElement("span",ne({},P,{className:q,style:V}),s.createElement("span",{className:U,style:ae}),l&&s.createElement("span",{style:{color:te},className:"".concat(D,"-status-text")},l))}return s.createElement("span",ne({},P,{className:q}),a,s.createElement(Xs,{visible:!L,motionName:"".concat(D,"-zoom"),motionAppear:!1,motionDeadline:1e3},function(ue){var Y=ue.className,J=M("scroll-number",n),Q=z.current,ie=pe(B(B(B(B(B(B({},"".concat(D,"-dot"),Q),"".concat(D,"-count"),!Q),"".concat(D,"-count-sm"),y==="small"),"".concat(D,"-multiple-words"),!Q&&K&&K.toString().length>1),"".concat(D,"-status-").concat(o),!!o),"".concat(D,"-status-").concat(i),eo(i))),le=ne({},V);return i&&!eo(i)&&(le=le||{},le.background=i),s.createElement(z1,{prefixCls:J,show:!L,motionClassName:Y,className:ie,count:K,title:X,style:le,key:"scrollNumber"},Z)}),W)};av.Ribbon=L1;const Nn=av;var H1={getNow:function(){return kt()},getFixedDate:function(e){return kt(e,"YYYY-MM-DD")},getEndDate:function(e){var r=e.clone();return r.endOf("month")},getWeekDay:function(e){var r=e.clone().locale("en_US");return r.weekday()+r.localeData().firstDayOfWeek()},getYear:function(e){return e.year()},getMonth:function(e){return e.month()},getDate:function(e){return e.date()},getHour:function(e){return e.hour()},getMinute:function(e){return e.minute()},getSecond:function(e){return e.second()},addYear:function(e,r){var n=e.clone();return n.add(r,"year")},addMonth:function(e,r){var n=e.clone();return n.add(r,"month")},addDate:function(e,r){var n=e.clone();return n.add(r,"day")},setYear:function(e,r){var n=e.clone();return n.year(r)},setMonth:function(e,r){var n=e.clone();return n.month(r)},setDate:function(e,r){var n=e.clone();return n.date(r)},setHour:function(e,r){var n=e.clone();return n.hour(r)},setMinute:function(e,r){var n=e.clone();return n.minute(r)},setSecond:function(e,r){var n=e.clone();return n.second(r)},isAfter:function(e,r){return e.isAfter(r)},isValidate:function(e){return e.isValid()},locale:{getWeekFirstDay:function(e){var r=kt().locale(e);return r.localeData().firstDayOfWeek()},getWeekFirstDate:function(e,r){var n=r.clone(),a=n.locale(e);return a.weekday(0)},getWeek:function(e,r){var n=r.clone(),a=n.locale(e);return a.week()},getShortWeekDays:function(e){var r=kt().locale(e);return r.localeData().weekdaysMin()},getShortMonths:function(e){var r=kt().locale(e);return r.localeData().monthsShort()},format:function(e,r,n){var a=r.clone(),o=a.locale(e);return o.format(n)},parse:function(e,r,n){for(var a=[],o=0;o1&&(l=e.addDate(l,-7)),l}function io(t,e,r){var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;switch(e){case"year":return r.addYear(t,n*10);case"quarter":case"month":return r.addYear(t,n);default:return r.addMonth(t,n)}}function Jt(t,e){var r=e.generateConfig,n=e.locale,a=e.format;return typeof a=="function"?a(t):r.locale.format(n.locale,t,a)}function fv(t,e){var r=e.generateConfig,n=e.locale,a=e.formatList;return!t||typeof a[0]=="function"?null:r.locale.parse(n.locale,t,a)}function is(t){var e=t.cellDate,r=t.mode,n=t.disabledDate,a=t.generateConfig;if(!n)return!1;var o=function(h,y,g){for(var b=y;b<=g;){var x=void 0;switch(h){case"date":{if(x=a.setDate(e,b),!n(x))return!1;break}case"month":{if(x=a.setMonth(e,b),!is({cellDate:x,mode:"month",generateConfig:a,disabledDate:n}))return!1;break}case"year":{if(x=a.setYear(e,b),!is({cellDate:x,mode:"year",generateConfig:a,disabledDate:n}))return!1;break}}b+=1}return!0};switch(r){case"date":case"week":return n(e);case"month":{var l=1,i=a.getDate(a.getEndDate(e));return o("date",l,i)}case"quarter":{var u=Math.floor(a.getMonth(e)/3)*3,c=u+2;return o("month",u,c)}case"year":return o("month",0,11);case"decade":{var d=a.getYear(e),f=Math.floor(d/$n)*$n,v=f+$n-1;return o("year",f,v)}}}function uy(t){var e=s.useContext(gn),r=e.hideHeader;if(r)return null;var n=t.prefixCls,a=t.generateConfig,o=t.locale,l=t.value,i=t.format,u="".concat(n,"-header");return s.createElement($a,{prefixCls:u},l?Jt(l,{locale:o,format:i,generateConfig:a}):" ")}function cy(t){var e=t.value,r=t.generateConfig,n=t.disabledMinutes,a=t.disabledSeconds,o=t.minutes,l=t.seconds,i=t.use12Hours,u=function(d,f,v,m){var h=e||r.getNow(),y=Math.max(0,f),g=Math.max(0,v),b=Math.max(0,m),x=n&&n(y);if(x!=null&&x.includes(g)){var S=o.find(function(P){return!x.includes(P.value)});if(S)g=S.value;else return null}var w=a&&a(y,g);if(w!=null&&w.includes(b)){var E=l.find(function(P){return!w.includes(P.value)});if(E)b=E.value;else return null}return h=ov(r,h,!i||!d?y:y+12,g,b),h};return u}function vv(t,e){for(var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"0",n=String(t);n.length=1?r|0:1,l=t;l<=e;l+=o)a.push({label:vv(l,2),value:l,disabled:(n||[]).includes(l)});return a}function vy(t){var e=t.generateConfig,r=t.prefixCls,n=t.operationRef,a=t.activeColumnIndex,o=t.value,l=t.showHour,i=t.showMinute,u=t.showSecond,c=t.use12Hours,d=t.hourStep,f=d===void 0?1:d,v=t.minuteStep,m=v===void 0?1:v,h=t.secondStep,y=h===void 0?1:h,g=t.disabledHours,b=t.disabledMinutes,x=t.disabledSeconds,S=t.disabledTime,w=t.hideDisabledOptions,E=t.onSelect,P=[],T="".concat(r,"-content"),M="".concat(r,"-time-panel"),k,D=o?e.getHour(o):-1,O=D,$=o?e.getMinute(o):-1,F=o?e.getSecond(o):-1,N=e.getNow(),R=s.useMemo(function(){if(S){var Y=S(N);return[Y.disabledHours,Y.disabledMinutes,Y.disabledSeconds]}return[g,b,x]},[g,b,x,S,N]),I=ee(R,3),L=I[0],j=I[1],_=I[2],A=Ol(0,23,f,L&&L()),K=Zs(function(){return A},A,fy);c&&(k=O>=12,O%=12);var z=s.useMemo(function(){if(!c)return[!1,!1];var Y=[!0,!0];return K.forEach(function(J){var Q=J.disabled,ie=J.value;Q||(ie>=12?Y[1]=!1:Y[0]=!1)}),Y},[c,K]),V=ee(z,2),X=V[0],W=V[1],Z=s.useMemo(function(){return c?K.filter(k?function(Y){return Y.value>=12}:function(Y){return Y.value<12}).map(function(Y){var J=Y.value%12,Q=J===0?"12":vv(J,2);return p(p({},Y),{},{label:Q,value:J})}):K},[c,k,K]),U=Ol(0,59,m,j&&j(D)),ae=Ol(0,59,y,_&&_(D,$)),q=cy({value:o,generateConfig:e,disabledMinutes:j,disabledSeconds:_,minutes:U,seconds:ae,use12Hours:c});n.current={onUpDown:function(J){var Q=P[a];if(Q)for(var ie=Q.units.findIndex(function(ve){return ve.value===Q.value}),le=Q.units.length,ge=1;ge2&&arguments[2]!==void 0?arguments[2]:!1;(we===y||it)&&(fe(xe),T&&T(xe),ae&&ae(xe,qe),M&&!ya(i,xe,ce)&&!(v!=null&&v(xe))&&M(xe))},ot=function(xe){if($y.includes(we)){var qe,it,ft=we==="date";switch(xe===Ye.PAGE_UP||xe===Ye.PAGE_DOWN?it=ft?i.addMonth:i.addYear:it=ft?i.addDate:i.addMonth,xe){case Ye.LEFT:case Ye.PAGE_UP:qe=it(he,-1);break;case Ye.RIGHT:case Ye.PAGE_DOWN:qe=it(he,1);break;case Ye.UP:case Ye.DOWN:qe=it(he,Number("".concat(xe===Ye.UP?"-":"").concat(ft?oo:cu)));break}if(qe)return!(v!=null&&v(qe))}return!0},Je=function(xe){if(le.current&&le.current.onKeyDown){var qe=!0,it=xe.which;if([Ye.LEFT,Ye.RIGHT,Ye.UP,Ye.DOWN,Ye.PAGE_UP,Ye.PAGE_DOWN,Ye.ENTER].includes(it)&&(xe.preventDefault(),it!==Ye.ENTER&&b===0&&(qe=ot(it))),qe)return le.current.onKeyDown(xe)}return rn(!1,"Panel not correct handle keyDown event. Please help to fire issue about this."),!1},Se=function(xe){le.current&&le.current.onBlur&&le.current.onBlur(xe)};Z&&J!=="right"&&(Z.current={onKeyDown:Je,onClose:function(){le.current&&le.current.onClose&&le.current.onClose()}}),s.useEffect(function(){u&&!ge.current&&be(u)},[u]),s.useEffect(function(){ge.current=!1},[]);var He,je=p(p({},t),{},{operationRef:le,prefixCls:n,viewDate:he,value:ce,onViewDateChange:Re,sourceMode:dt,onPanelChange:We,disabledDate:v});switch(delete je.onChange,delete je.onSelect,we){case"decade":He=s.createElement(oy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"year":He=s.createElement(Ty,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"month":He=s.createElement(wy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"quarter":He=s.createElement(Fy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"week":He=s.createElement(by,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;case"time":delete je.showTime,He=s.createElement(pv,ne({},je,Ve(S)==="object"?S:null,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}));break;default:S?He=s.createElement(yy,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}})):He=s.createElement(uu,ne({},je,{onSelect:function(xe,qe){Re(xe),Oe(xe,qe)}}))}var ze,ye,de=function(){var xe=i.getNow(),qe=G1(i.getHour(xe),i.getMinute(xe),i.getSecond(xe),z?I:1,V?j:1,X?A:1),it=ov(i,xe,qe[0],qe[1],qe[2]);Oe(it,"submit")};q||(ze=gv(n,we,E),ye=yv({prefixCls:n,components:F,needConfirmButton:K,okDisabled:!ce||v&&v(ce),locale:l,showNow:x,onNow:K&&de,onOk:function(){ce&&(Oe(ce,"submit",!0),$&&$(ce))}}));var Ce;if(w&&we==="date"&&y==="date"&&!S){var Me=i.getNow(),Be="".concat(n,"-today-btn"),nt=v&&v(Me);Ce=s.createElement("a",{className:pe(Be,nt&&"".concat(Be,"-disabled")),"aria-disabled":nt,onClick:function(){nt||Oe(Me,"mouse",!0)}},l.today)}return s.createElement(gn.Provider,{value:p(p({},W),{},{mode:we,hideHeader:"hideHeader"in t?P:W.hideHeader,hidePrevBtn:Y&&J==="right",hideNextBtn:Y&&J==="left"})},s.createElement("div",{tabIndex:b,className:pe("".concat(n,"-panel"),a,(e={},B(e,"".concat(n,"-panel-has-range"),Q&&Q[0]&&Q[1]),B(e,"".concat(n,"-panel-has-range-hover"),ie&&ie[0]&&ie[1]),B(e,"".concat(n,"-panel-rtl"),N==="rtl"),e)),style:o,onKeyDown:Je,onBlur:Se,onMouseDown:D,ref:U},He,ze||ye||Ce?s.createElement("div",{className:"".concat(n,"-footer")},ze,ye,Ce):null))}var Dy={bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:1,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:0,adjustY:1}}};function Cv(t){var e,r=t.prefixCls,n=t.popupElement,a=t.popupStyle,o=t.visible,l=t.dropdownClassName,i=t.dropdownAlign,u=t.transitionName,c=t.getPopupContainer,d=t.children,f=t.range,v=t.popupPlacement,m=t.direction,h="".concat(r,"-dropdown"),y=function(){return v!==void 0?v:m==="rtl"?"bottomRight":"bottomLeft"};return s.createElement(Fp,{showAction:[],hideAction:[],popupPlacement:y(),builtinPlacements:Dy,prefixCls:h,popupTransitionName:u,popup:n,popupAlign:i,popupVisible:o,popupClassName:pe(l,(e={},B(e,"".concat(h,"-range"),f),B(e,"".concat(h,"-rtl"),m==="rtl"),e)),popupStyle:a,getPopupContainer:c},d)}function ss(t){var e=t.open,r=t.value,n=t.isClickOutside,a=t.triggerOpen,o=t.forwardKeyDown,l=t.onKeyDown,i=t.blurToCancel,u=t.onSubmit,c=t.onCancel,d=t.onFocus,f=t.onBlur,v=t.currentFocusedKey,m=t.key,h=m===void 0?"start":m,y=s.useState(!1),g=ee(y,2),b=g[0],x=g[1],S=s.useState(!1),w=ee(S,2),E=w[0],P=w[1],T=s.useRef(),M=s.useRef(!1),k=s.useRef(!1),D=s.useRef(!1),O={onMouseDown:function(){x(!0),a(!0)},onKeyDown:function(F){var N=function(){D.current=!0};if(l(F,N),!D.current){switch(F.which){case Ye.ENTER:{e?u()!==!1&&x(!0):a(!0),F.preventDefault();return}case Ye.TAB:{b&&e&&!F.shiftKey?(x(!1),F.preventDefault()):!b&&e&&!o(F)&&F.shiftKey&&(x(!0),F.preventDefault());return}case Ye.ESC:{x(!0),c();return}}!e&&![Ye.SHIFT].includes(F.which)?a(!0):b||o(F)}},onFocus:function(F){x(!0),P(!0),v&&(v.current=h),clearTimeout(T.current),d&&d(F)},onBlur:function(F){if(M.current||!n(document.activeElement)){M.current=!1;return}i?setTimeout(function(){for(var N=document,R=N.activeElement;R&&R.shadowRoot;)R=R.shadowRoot.activeElement;n(R)&&c()},0):e&&(a(!1),k.current&&u()),P(!1),v?(v.current="",T.current=setTimeout(function(){v.current||f==null||f(F)},100)):f==null||f(F)}};return s.useEffect(function(){k.current=!1},[e]),s.useEffect(function(){k.current=!0},[r]),s.useEffect(function(){return Q1(function($){var F=J1($),N=n(F);e?N?(!E||N)&&a(!1):(M.current=!0,requestAnimationFrame(function(){M.current=!1})):E&&!N&&(M.current=!0)})}),s.useEffect(function(){return function(){return clearTimeout(T.current)}},[]),[O,{focused:E,typing:b}]}function us(t){var e=t.valueTexts,r=t.onTextChange,n=s.useState(""),a=ee(n,2),o=a[0],l=a[1],i=s.useRef([]);i.current=e;function u(d){l(d),r(d)}function c(){l(i.current[0])}return s.useEffect(function(){e.every(function(d){return d!==o})&&c()},[e.join("||")]),[o,u,c]}function Ni(t,e){var r=e.formatList,n=e.generateConfig,a=e.locale;return Zs(function(){if(!t)return[[""],""];for(var o="",l=[],i=0;i1&&arguments[1]!==void 0?arguments[1]:!1;if(cancelAnimationFrame(c.current),b){u(g);return}c.current=requestAnimationFrame(function(){u(g)})}var f=Ni(i,{formatList:r,generateConfig:n,locale:a}),v=ee(f,2),m=v[1];function h(g){d(g)}function y(){var g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;d(null,g)}return s.useEffect(function(){y(!0)},[t]),s.useEffect(function(){return function(){return cancelAnimationFrame(c.current)}},[]),[m,h,y]}function Oy(t){var e,r=t.prefixCls,n=r===void 0?"rc-picker":r,a=t.id,o=t.tabIndex,l=t.style,i=t.className,u=t.dropdownClassName,c=t.dropdownAlign,d=t.popupStyle,f=t.transitionName,v=t.generateConfig,m=t.locale,h=t.inputReadOnly,y=t.allowClear,g=t.autoFocus,b=t.showTime,x=t.picker,S=x===void 0?"date":x,w=t.format,E=t.use12Hours,P=t.value,T=t.defaultValue,M=t.open,k=t.defaultOpen,D=t.defaultOpenValue,O=t.suffixIcon,$=t.clearIcon,F=t.disabled,N=t.disabledDate,R=t.placeholder,I=t.getPopupContainer,L=t.pickerRef,j=t.panelRender,_=t.onChange,A=t.onOpenChange,K=t.onFocus,z=t.onBlur,V=t.onMouseDown,X=t.onMouseUp,W=t.onMouseEnter,Z=t.onMouseLeave,U=t.onContextMenu,ae=t.onClick,q=t.onKeyDown,te=t.onSelect,ue=t.direction,Y=t.autoComplete,J=Y===void 0?"off":Y,Q=t.inputRender,ie=s.useRef(null),le=S==="date"&&!!b||S==="time",ge=mv(lv(w,S,b,E)),Pe=s.useRef(null),ve=s.useRef(null),ce=s.useRef(null),fe=xt(null,{value:P,defaultValue:T}),oe=ee(fe,2),se=oe[0],he=oe[1],be=s.useState(se),Re=ee(be,2),Fe=Re[0],Ee=Re[1],ke=s.useRef(null),we=xt(!1,{value:M,defaultValue:k,postState:function(_e){return F?!1:_e},onChange:function(_e){A&&A(_e),!_e&&ke.current&&ke.current.onClose&&ke.current.onClose()}}),Ge=ee(we,2),Qe=Ge[0],ct=Ge[1],dt=Ni(Fe,{formatList:ge,generateConfig:v,locale:m}),mt=ee(dt,2),We=mt[0],Oe=mt[1],ot=us({valueTexts:We,onTextChange:function(_e){var at=fv(_e,{locale:m,formatList:ge,generateConfig:v});at&&(!N||!N(at))&&Ee(at)}}),Je=ee(ot,3),Se=Je[0],He=Je[1],je=Je[2],ze=function(_e){Ee(_e),he(_e),_&&!ya(v,se,_e)&&_(_e,_e?Jt(_e,{generateConfig:v,locale:m,format:ge[0]}):"")},ye=function(_e){F&&_e||ct(_e)},de=function(_e){return Qe&&ke.current&&ke.current.onKeyDown?ke.current.onKeyDown(_e):(rn(!1,"Picker not correct forward KeyDown operation. Please help to fire issue about this."),!1)},Ce=function(){for(var _e=arguments.length,at=new Array(_e),Ot=0;Ot<_e;Ot++)at[Ot]=arguments[Ot];ae==null||ae.apply(void 0,at),ie.current&&(ie.current.focus(),ye(!0))},Me=ss({blurToCancel:le,open:Qe,value:Se,triggerOpen:ye,forwardKeyDown:de,isClickOutside:function(_e){return!uv([Pe.current,ve.current,ce.current],_e)},onSubmit:function(){return!Fe||N&&N(Fe)?!1:(ze(Fe),ye(!1),je(),!0)},onCancel:function(){ye(!1),Ee(se),je()},onKeyDown:function(_e,at){q==null||q(_e,at)},onFocus:K,onBlur:z}),Be=ee(Me,2),nt=Be[0],Ne=Be[1],xe=Ne.focused,qe=Ne.typing;s.useEffect(function(){Qe||(Ee(se),!We.length||We[0]===""?He(""):Oe!==Se&&je())},[Qe,We]),s.useEffect(function(){Qe||je()},[S]),s.useEffect(function(){Ee(se)},[se]),L&&(L.current={focus:function(){ie.current&&ie.current.focus()},blur:function(){ie.current&&ie.current.blur()}});var it=cs(Se,{formatList:ge,generateConfig:v,locale:m}),ft=ee(it,3),At=ft[0],Kt=ft[1],Rt=ft[2],zt=p(p({},t),{},{className:void 0,style:void 0,pickerValue:void 0,onPickerValueChange:void 0,onChange:null}),et=s.createElement(bv,ne({},zt,{generateConfig:v,className:pe(B({},"".concat(n,"-panel-focused"),!qe)),value:Fe,locale:m,tabIndex:-1,onSelect:function(_e){te==null||te(_e),Ee(_e)},direction:ue,onPanelChange:function(_e,at){var Ot=t.onPanelChange;Rt(!0),Ot==null||Ot(_e,at)}}));j&&(et=j(et));var tt=s.createElement("div",{className:"".concat(n,"-panel-container"),onMouseDown:function(_e){_e.preventDefault()}},et),lt;O&&(lt=s.createElement("span",{className:"".concat(n,"-suffix")},O));var ut;y&&se&&!F&&(ut=s.createElement("span",{onMouseDown:function(_e){_e.preventDefault(),_e.stopPropagation()},onMouseUp:function(_e){_e.preventDefault(),_e.stopPropagation(),ze(null),ye(!1)},className:"".concat(n,"-clear"),role:"button"},$||s.createElement("span",{className:"".concat(n,"-clear-btn")})));var wt=p(p(p({id:a,tabIndex:o,disabled:F,readOnly:h||typeof ge[0]=="function"||!qe,value:At||Se,onChange:function(_e){He(_e.target.value)},autoFocus:g,placeholder:R,ref:ie,title:Se},nt),{},{size:sv(S,ge[0],v)},hv(t)),{},{autoComplete:J}),St=Q?Q(wt):s.createElement("input",wt),Ae=function(_e,at){(at==="submit"||at!=="key"&&!le)&&(ze(_e),ye(!1))},Ue=ue==="rtl"?"bottomRight":"bottomLeft";return s.createElement(gn.Provider,{value:{operationRef:ke,hideHeader:S==="time",panelRef:Pe,onSelect:Ae,open:Qe,defaultOpenValue:D,onDateMouseEnter:Kt,onDateMouseLeave:Rt}},s.createElement(Cv,{visible:Qe,popupElement:tt,popupStyle:d,prefixCls:n,dropdownClassName:u,dropdownAlign:c,getPopupContainer:I,transitionName:f,popupPlacement:Ue,direction:ue},s.createElement("div",{ref:ce,className:pe(n,i,(e={},B(e,"".concat(n,"-disabled"),F),B(e,"".concat(n,"-focused"),xe),B(e,"".concat(n,"-rtl"),ue==="rtl"),e)),style:l,onMouseDown:V,onMouseUp:X,onMouseEnter:W,onMouseLeave:Z,onContextMenu:U,onClick:Ce},s.createElement("div",{className:pe("".concat(n,"-input"),B({},"".concat(n,"-input-placeholder"),!!At)),ref:ve},St,lt,ut))))}var Iy=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;lm(d);case"month":return v(g)>v(d);case"week":return f(g)>f(d);default:return!ar(u,g,d)&&u.isAfter(g,d)}return!1},[l,i[1],d,e]),y=s.useCallback(function(g){if(l&&l(g))return!0;if(i[0]&&c)return!ar(u,g,d)&&u.isAfter(c,g);if(r&&c)switch(n){case"quarter":return m(g)0&&arguments[0]!==void 0?arguments[0]:!1,Te=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Xe=null;Ie&&Rn&&Rn[0]&&Rn[1]&&h.isAfter(Rn[1],Rn[0])&&(Xe=Rn);var yt=P;if(P&&Ve(P)==="object"&&P.defaultValue){var Bt=P.defaultValue;yt=p(p({},P),{},{defaultValue:Ct(Bt,Se)||void 0})}var Br=null;return L&&(Br=function(Mn,jn){return L(Mn,jn,{range:Se?"end":"start"})}),s.createElement(Oa.Provider,{value:{inRange:!0,panelPosition:vt,rangedValue:mr||ft,hoverRangedValue:Xe}},s.createElement(bv,ne({},t,Te,{dateRender:Br,showTime:yt,mode:zt[Se],generateConfig:h,style:void 0,direction:se,disabledDate:Se===0?wt:St,disabledTime:function(Mn){return I?I(Mn,Se===0?"start":"end"):!1},className:pe(B({},"".concat(o,"-panel-focused"),Se===0?!Ke:!an)),value:Ct(ft,Se),locale:y,tabIndex:-1,onPanelChange:function(Mn,jn){Se===0&&Vr(!0),Se===1&&ua(!0),tt(Sn(zt,jn,Se),Sn(ft,Mn,Se));var Qn=Mn;vt==="right"&&zt[Se]===jn&&(Qn=io(Qn,jn,h,-1)),xe(Qn,Se)},onOk:null,onSelect:void 0,onChange:void 0,defaultValue:Se===0?Ct(ft,1):Ct(ft,0)})))}var yr=0,Bu=0;if(Se&&Ge.current&&ct.current&&we.current){yr=Ge.current.offsetWidth+ct.current.offsetWidth;var op=We.current.offsetLeft>yr?We.current.offsetLeft-yr:We.current.offsetLeft;we.current.offsetWidth&&We.current.offsetWidth&&yr>we.current.offsetWidth-We.current.offsetWidth-(se==="rtl"?0:op)&&(Bu=yr)}var ip=se==="rtl"?{right:yr}:{left:yr};function lp(){var vt,Te=gv(o,zt[Se],U),Xe=yv({prefixCls:o,components:fe,needConfirmButton:Fe,okDisabled:!Ct(ft,Se)||R&&R(ft[Se]),locale:y,rangeList:ap,onOk:function(){Ct(ft,Se)&&(qn(ft,Se),ve&&ve(ft))}});if(E!=="time"&&!P){var yt=Ne(Se),Bt=io(yt,E,h),Br=zt[Se],Zn=Br===E,Mn=Nl(Zn?"left":!1,{pickerValue:yt,onPickerValueChange:function(dn){xe(dn,Se)}}),jn=Nl("right",{pickerValue:Bt,onPickerValueChange:function(dn){xe(io(dn,E,h,-1),Se)}});se==="rtl"?vt=s.createElement(s.Fragment,null,jn,Zn&&Mn):vt=s.createElement(s.Fragment,null,Mn,Zn&&jn)}else vt=Nl();var Qn=s.createElement(s.Fragment,null,s.createElement("div",{className:"".concat(o,"-panels")},vt),(Te||Xe)&&s.createElement("div",{className:"".concat(o,"-footer")},Te,Xe));return j&&(Qn=j(Qn)),s.createElement("div",{className:"".concat(o,"-panel-container"),style:{marginLeft:Bu},ref:we,onMouseDown:function(dn){dn.preventDefault()}},Qn)}var sp=s.createElement("div",{className:pe("".concat(o,"-range-wrapper"),"".concat(o,"-").concat(E,"-range-wrapper")),style:{minWidth:sn}},s.createElement("div",{ref:We,className:"".concat(o,"-range-arrow"),style:ip}),lp()),Hu;z&&(Hu=s.createElement("span",{className:"".concat(o,"-suffix")},z));var Wu;K&&(Ct(Ce,0)&&!ze[0]||Ct(Ce,1)&&!ze[1])&&(Wu=s.createElement("span",{onMouseDown:function(Te){Te.preventDefault(),Te.stopPropagation()},onMouseUp:function(Te){Te.preventDefault(),Te.stopPropagation();var Xe=Ce;ze[0]||(Xe=Sn(Xe,null,0)),ze[1]||(Xe=Sn(Xe,null,1)),qn(Xe,null),_n(!1,Se)},className:"".concat(o,"-clear")},V||s.createElement("span",{className:"".concat(o,"-clear-btn")})));var Uu={size:sv(E,Oe[0],h)},Tl=0,$l=0;Ge.current&&Qe.current&&ct.current&&(Se===0?$l=Ge.current.offsetWidth:(Tl=yr,$l=Qe.current.offsetWidth));var up=se==="rtl"?{right:Tl}:{left:Tl},cp=function(Te,Xe){var yt=Sn(ft,Te,Se);Xe==="submit"||Xe!=="key"&&!Fe?(qn(yt,Se),Se===0?Vr():ua()):At(yt)};return s.createElement(gn.Provider,{value:{operationRef:je,hideHeader:E==="time",onDateMouseEnter:Ml,onDateMouseLeave:ii,hideRanges:!0,onSelect:cp,open:Ie}},s.createElement(Cv,{visible:Ie,popupElement:sp,popupStyle:c,prefixCls:o,dropdownClassName:d,dropdownAlign:v,getPopupContainer:m,transitionName:f,range:!0,direction:se},s.createElement("div",ne({ref:ke,className:pe(o,"".concat(o,"-range"),u,(e={},B(e,"".concat(o,"-disabled"),ze[0]&&ze[1]),B(e,"".concat(o,"-focused"),Se===0?me:Mt),B(e,"".concat(o,"-rtl"),se==="rtl"),e)),style:i,onClick:on,onMouseEnter:le,onMouseLeave:ge,onMouseDown:zr,onMouseUp:ie},hv(t)),s.createElement("div",{className:pe("".concat(o,"-input"),(r={},B(r,"".concat(o,"-input-active"),Se===0),B(r,"".concat(o,"-input-placeholder"),!!ri),r)),ref:Ge},s.createElement("input",ne({id:l,disabled:ze[0],readOnly:W||typeof Oe[0]=="function"||!Ke,value:ri||vr,onChange:function(Te){la(Te.target.value)},autoFocus:b,placeholder:Ct(g,0)||"",ref:dt},H,Uu,{autoComplete:Re}))),s.createElement("div",{className:"".concat(o,"-range-separator"),ref:ct},k),s.createElement("div",{className:pe("".concat(o,"-input"),(n={},B(n,"".concat(o,"-input-active"),Se===1),B(n,"".concat(o,"-input-placeholder"),!!gr),n)),ref:Qe},s.createElement("input",ne({disabled:ze[1],readOnly:W||typeof Oe[0]=="function"||!an,value:gr||ht,onChange:function(Te){Nt(Te.target.value)},placeholder:Ct(g,1)||"",ref:mt},Tt,Uu,{autoComplete:Re}))),s.createElement("div",{className:"".concat(o,"-active-bar"),style:p(p({},up),{},{width:$l,position:"absolute"})}),Hu,Wu)))}var Vy=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;l=0;c-=1){var d=e.get(c)||new Set;d.forEach(function(f){var v=f.parent,m=f.node;if(!(n(m)||!f.parent||u.has(f.parent.key))){if(n(f.parent.node)){u.add(v.key);return}var h=!0,y=!1;(v.children||[]).filter(function(g){return!n(g.node)}).forEach(function(g){var b=g.key,x=a.has(b);h&&!x&&(h=!1),!y&&(x||o.has(b))&&(y=!0)}),h&&a.add(v.key),y&&o.add(v.key),u.add(v.key)}})}return{checkedKeys:Array.from(a),halfCheckedKeys:Array.from(xv(o,a))}}function Hy(t,e,r,n,a){for(var o=new Set(t),l=new Set(e),i=0;i<=n;i+=1){var u=r.get(i)||new Set;u.forEach(function(v){var m=v.key,h=v.node,y=v.children,g=y===void 0?[]:y;!o.has(m)&&!l.has(m)&&!a(h)&&g.filter(function(b){return!a(b.node)}).forEach(function(b){o.delete(b.key)})})}l=new Set;for(var c=new Set,d=n;d>=0;d-=1){var f=r.get(d)||new Set;f.forEach(function(v){var m=v.parent,h=v.node;if(!(a(h)||!v.parent||c.has(v.parent.key))){if(a(v.parent.node)){c.add(m.key);return}var y=!0,g=!1;(m.children||[]).filter(function(b){return!a(b.node)}).forEach(function(b){var x=b.key,S=o.has(x);y&&!S&&(y=!1),!g&&(S||l.has(x))&&(g=!0)}),y||o.delete(m.key),g&&l.add(m.key),c.add(m.key)}})}return{checkedKeys:Array.from(o),halfCheckedKeys:Array.from(xv(l,o))}}function Pn(t,e,r,n){var a=[],o;n?o=n:o=zy;var l=new Set(t.filter(function(d){var f=!!mn(r,d);return f||a.push(d),f})),i=new Map,u=0;Object.keys(r).forEach(function(d){var f=r[d],v=f.level,m=i.get(v);m||(m=new Set,i.set(v,m)),m.add(f),u=Math.max(u,v)}),rn(!a.length,"Tree missing follow keys: ".concat(a.slice(0,100).map(function(d){return"'".concat(d,"'")}).join(", ")));var c;return e===!0?c=By(l,i,u,o):c=Hy(l,e.halfCheckedKeys,i,u,o),c}var _o=s.createContext(null),du="__RC_CASCADER_SPLIT__",Sv="SHOW_PARENT",wv="SHOW_CHILD";function Pr(t){return t.join(du)}function fa(t){return t.map(Pr)}function Wy(t){return t.split(du)}function Uy(t){var e=t||{},r=e.label,n=e.value,a=e.children,o=n||"value";return{label:r||"label",value:o,key:o,children:a||"children"}}function to(t,e){var r,n;return(r=t.isLeaf)!==null&&r!==void 0?r:!(!((n=t[e.children])===null||n===void 0)&&n.length)}function Yy(t){var e=t.parentElement;if(e){var r=t.offsetTop-e.offsetTop;r-e.scrollTop<0?e.scrollTo({top:r}):r+t.offsetHeight-e.scrollTop>e.offsetHeight&&e.scrollTo({top:r+t.offsetHeight-e.offsetHeight})}}function lc(t,e,r){var n=new Set(t),a=e();return t.filter(function(o){var l=a[o],i=l?l.parent:null,u=l?l.children:null;return r===wv?!(u&&u.some(function(c){return c.key&&n.has(c.key)})):!(i&&!i.node.disabled&&n.has(i.key))})}function yo(t,e,r){for(var n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=e,o=[],l=function(){var c,d,f,v=t[i],m=(c=a)===null||c===void 0?void 0:c.findIndex(function(y){var g=y[r.value];return n?String(g)===String(v):g===v}),h=m!==-1?(d=a)===null||d===void 0?void 0:d[m]:null;o.push({value:(f=h==null?void 0:h[r.value])!==null&&f!==void 0?f:v,index:m,option:h}),a=h==null?void 0:h[r.children]},i=0;i1&&arguments[1]!==void 0?arguments[1]:null;return d.map(function(v,m){for(var h=Pv(f?f.pos:"0",m),y=Lo(v[o],h),g,b=0;b1&&arguments[1]!==void 0?arguments[1]:{},r=e.initWrapper,n=e.processEntity,a=e.onProcessFinished,o=e.externalGetKey,l=e.childrenPropName,i=e.fieldNames,u=arguments.length>2?arguments[2]:void 0,c=o||u,d={},f={},v={posEntities:d,keyEntities:f};return r&&(v=r(v)||v),Zy(t,function(m){var h=m.node,y=m.index,g=m.pos,b=m.key,x=m.parentPos,S=m.level,w=m.nodes,E={node:h,nodes:w,index:y,key:b,pos:g,level:S},P=Lo(b,g);d[g]=E,f[P]=E,E.parent=d[x],E.parent&&(E.parent.children=E.parent.children||[],E.parent.children.push(E)),n&&n(E,v)},{externalGetKey:c,childrenPropName:l,fieldNames:i}),a&&a(v),v}function lo(t,e){var r=e.expandedKeys,n=e.selectedKeys,a=e.loadedKeys,o=e.loadingKeys,l=e.checkedKeys,i=e.halfCheckedKeys,u=e.dragOverNodeKey,c=e.dropPosition,d=e.keyEntities,f=mn(d,t),v={eventKey:t,expanded:r.indexOf(t)!==-1,selected:n.indexOf(t)!==-1,loaded:a.indexOf(t)!==-1,loading:o.indexOf(t)!==-1,checked:l.indexOf(t)!==-1,halfChecked:i.indexOf(t)!==-1,pos:String(f?f.pos:""),dragOver:u===t&&c===0,dragOverGapTop:u===t&&c===-1,dragOverGapBottom:u===t&&c===1};return v}function Wt(t){var e=t.data,r=t.expanded,n=t.selected,a=t.checked,o=t.loaded,l=t.loading,i=t.halfChecked,u=t.dragOver,c=t.dragOverGapTop,d=t.dragOverGapBottom,f=t.pos,v=t.active,m=t.eventKey,h=p(p({},e),{},{expanded:r,selected:n,checked:a,loaded:o,loading:l,halfChecked:i,dragOver:u,dragOverGapTop:c,dragOverGapBottom:d,pos:f,active:v,key:m});return"props"in h||Object.defineProperty(h,"props",{get:function(){return rn(!1,"Second param return from event is node data instead of TreeNode instance. Please read value directly instead of reading from `props`."),t}}),h}const Qy=function(t,e){var r=s.useRef({options:null,info:null}),n=s.useCallback(function(){return r.current.options!==t&&(r.current.options=t,r.current.info=jo(t,{fieldNames:e,initWrapper:function(o){return p(p({},o),{},{pathKeyEntities:{}})},processEntity:function(o,l){var i=o.nodes.map(function(u){return u[e.value]}).join(du);l.pathKeyEntities[i]=o,o.key=i}})),r.current.info.pathKeyEntities},[e,t]);return n},Jy=function(t,e){return s.useCallback(function(r){var n=[],a=[];return r.forEach(function(o){var l=yo(o,t,e);l.every(function(i){return i.option})?a.push(o):n.push(o)}),[a,n]},[t,e])};function sc(t){var e=s.useRef();e.current=t;var r=s.useCallback(function(){return e.current.apply(e,arguments)},[]);return r}function eb(t){return s.useMemo(function(){if(!t)return[!1,{}];var e={matchInputWidth:!0,limit:50};return t&&Ve(t)==="object"&&(e=p(p({},e),t)),e.limit<=0&&delete e.limit,[!0,e]},[t])}var so="__rc_cascader_search_mark__",tb=function(e,r,n){var a=n.label;return r.some(function(o){return String(o[a]).toLowerCase().includes(e.toLowerCase())})},nb=function(e,r,n,a){return r.map(function(o){return o[a.label]}).join(" / ")};const rb=function(t,e,r,n,a,o){var l=a.filter,i=l===void 0?tb:l,u=a.render,c=u===void 0?nb:u,d=a.limit,f=d===void 0?50:d,v=a.sort;return s.useMemo(function(){var m=[];if(!t)return[];function h(y,g){y.forEach(function(b){if(!(!v&&f>0&&m.length>=f)){var x=[].concat(De(g),[b]),S=b[r.children];if((!S||S.length===0||o)&&i(t,x,{label:r.label})){var w;m.push(p(p({},b),{},(w={},B(w,r.label,c(t,x,n,r)),B(w,so,x),B(w,r.children,void 0),w)))}S&&h(b[r.children],x)}})}return h(e,[]),v&&m.sort(function(y,g){return v(y[so],g[so],t,r)}),f>0?m.slice(0,f):m},[t,e,r,n,c,o,i,v,f])};function ab(t){var e,r=t.prefixCls,n=t.checked,a=t.halfChecked,o=t.disabled,l=t.onClick,i=s.useContext(_o),u=i.checkable,c=typeof u!="boolean"?u:null;return s.createElement("span",{className:pe("".concat(r),(e={},B(e,"".concat(r,"-checked"),n),B(e,"".concat(r,"-indeterminate"),!n&&a),B(e,"".concat(r,"-disabled"),o),e)),onClick:l},c)}var kv="__cascader_fix_label__";function ob(t){var e=t.prefixCls,r=t.multiple,n=t.options,a=t.activeValue,o=t.prevValuePath,l=t.onToggleOpen,i=t.onSelect,u=t.onActive,c=t.checkedSet,d=t.halfCheckedSet,f=t.loadingKeys,v=t.isSelectable,m="".concat(e,"-menu"),h="".concat(e,"-menu-item"),y=s.useContext(_o),g=y.fieldNames,b=y.changeOnSelect,x=y.expandTrigger,S=y.expandIcon,w=y.loadingIcon,E=y.dropdownMenuColumnStyle,P=x==="hover",T=s.useMemo(function(){return n.map(function(M){var k,D=M.disabled,O=M[so],$=(k=M[kv])!==null&&k!==void 0?k:M[g.label],F=M[g.value],N=to(M,g),R=O?O.map(function(A){return A[g.value]}):[].concat(De(o),[F]),I=Pr(R),L=f.includes(I),j=c.has(I),_=d.has(I);return{disabled:D,label:$,value:F,isLeaf:N,isLoading:L,checked:j,halfChecked:_,option:M,fullPath:R,fullPathKey:I}})},[n,c,g,d,f,o]);return s.createElement("ul",{className:m,role:"menu"},T.map(function(M){var k,D=M.disabled,O=M.label,$=M.value,F=M.isLeaf,N=M.isLoading,R=M.checked,I=M.halfChecked,L=M.option,j=M.fullPath,_=M.fullPathKey,A=function(){if(!D){var X=De(j);P&&F&&X.pop(),u(X)}},K=function(){v(L)&&i(j,F)},z;return typeof L.title=="string"?z=L.title:typeof O=="string"&&(z=O),s.createElement("li",{key:_,className:pe(h,(k={},B(k,"".concat(h,"-expand"),!F),B(k,"".concat(h,"-active"),a===$),B(k,"".concat(h,"-disabled"),D),B(k,"".concat(h,"-loading"),N),k)),style:E,role:"menuitemcheckbox",title:z,"aria-checked":R,"data-path-key":_,onClick:function(){A(),(!r||F)&&K()},onDoubleClick:function(){b&&l(!1)},onMouseEnter:function(){P&&A()},onMouseDown:function(X){X.preventDefault()}},r&&s.createElement(ab,{prefixCls:"".concat(e,"-checkbox"),checked:R,halfChecked:I,disabled:D,onClick:function(X){X.stopPropagation(),K()}}),s.createElement("div",{className:"".concat(h,"-content")},O),!N&&S&&!F&&s.createElement("div",{className:"".concat(h,"-expand-icon")},S),N&&w&&s.createElement("div",{className:"".concat(h,"-loading-icon")},w))}))}const ib=function(){var t=al(),e=t.multiple,r=t.open,n=s.useContext(_o),a=n.values,o=s.useState([]),l=ee(o,2),i=l[0],u=l[1];return s.useEffect(function(){if(r&&!e){var c=a[0];u(c||[])}},[r]),[i,u]},lb=function(t,e,r,n,a,o){var l=al(),i=l.direction,u=l.searchValue,c=l.toggleOpen,d=l.open,f=i==="rtl",v=s.useMemo(function(){for(var E=-1,P=e,T=[],M=[],k=n.length,D=function(I){var L=P.findIndex(function(j){return j[r.value]===n[I]});if(L===-1)return"break";E=L,T.push(E),M.push(n[I]),P=P[E][r.children]},O=0;O1){var P=h.slice(0,-1);b(P)}else c(!1)},w=function(){var P,T=((P=g[y])===null||P===void 0?void 0:P[r.children])||[],M=T.find(function(D){return!D.disabled});if(M){var k=[].concat(De(h),[M[r.value]]);b(k)}};s.useImperativeHandle(t,function(){return{onKeyDown:function(P){var T=P.which;switch(T){case Ye.UP:case Ye.DOWN:{var M=0;T===Ye.UP?M=-1:T===Ye.DOWN&&(M=1),M!==0&&x(M);break}case Ye.LEFT:{if(u)break;f?w():S();break}case Ye.RIGHT:{if(u)break;f?S():w();break}case Ye.BACKSPACE:{u||S();break}case Ye.ENTER:{if(h.length){var k=g[y],D=(k==null?void 0:k[so])||[];D.length?o(D.map(function(O){return O[r.value]}),D[D.length-1]):o(h,g[y])}break}case Ye.ESC:c(!1),d&&P.stopPropagation()}},onKeyUp:function(){}}})};var sb=s.forwardRef(function(t,e){var r,n,a,o,l=al(),i=l.prefixCls,u=l.multiple,c=l.searchValue,d=l.toggleOpen,f=l.notFoundContent,v=l.direction,m=s.useRef(),h=v==="rtl",y=s.useContext(_o),g=y.options,b=y.values,x=y.halfValues,S=y.fieldNames,w=y.changeOnSelect,E=y.onSelect,P=y.searchOptions,T=y.dropdownPrefixCls,M=y.loadData,k=y.expandTrigger,D=T||i,O=s.useState([]),$=ee(O,2),F=$[0],N=$[1],R=function(Q){if(!(!M||c)){var ie=yo(Q,g,S),le=ie.map(function(ve){var ce=ve.option;return ce}),ge=le[le.length-1];if(ge&&!to(ge,S)){var Pe=Pr(Q);N(function(ve){return[].concat(De(ve),[Pe])}),M(le)}}};s.useEffect(function(){F.length&&F.forEach(function(J){var Q=Wy(J),ie=yo(Q,g,S,!0).map(function(ge){var Pe=ge.option;return Pe}),le=ie[ie.length-1];(!le||le[S.children]||to(le,S))&&N(function(ge){return ge.filter(function(Pe){return Pe!==J})})})},[g,F,S]);var I=s.useMemo(function(){return new Set(fa(b))},[b]),L=s.useMemo(function(){return new Set(fa(x))},[x]),j=ib(),_=ee(j,2),A=_[0],K=_[1],z=function(Q){K(Q),R(Q)},V=function(Q){var ie=Q.disabled,le=to(Q,S);return!ie&&(le||w||u)},X=function(Q,ie){var le=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;E(Q),!u&&(ie||w&&(k==="hover"||le))&&d(!1)},W=s.useMemo(function(){return c?P:g},[c,P,g]),Z=s.useMemo(function(){for(var J=[{options:W}],Q=W,ie=function(){var ve=A[le],ce=Q.find(function(oe){return oe[S.value]===ve}),fe=ce==null?void 0:ce[S.children];if(!(fe!=null&&fe.length))return"break";Q=fe,J.push({options:fe})},le=0;le":$,N=t.loadingIcon,R=t.children,I=t.dropdownMatchSelectWidth,L=I===void 0?!1:I,j=t.showCheckedStrategy,_=j===void 0?Sv:j,A=Le(t,ub),K=Gf(r),z=!!f,V=xt(l,{value:i,postState:uc}),X=ee(V,2),W=X[0],Z=X[1],U=s.useMemo(function(){return Uy(o)},[JSON.stringify(o)]),ae=s.useMemo(function(){return g||[]},[g]),q=Qy(ae,U),te=s.useCallback(function(Je){var Se=q();return Je.map(function(He){var je=Se[He].nodes;return je.map(function(ze){return ze[U.value]})})},[q,U]),ue=xt("",{value:v,postState:function(Se){return Se||""}}),Y=ee(ue,2),J=Y[0],Q=Y[1],ie=function(Se,He){Q(Se),He.source!=="blur"&&m&&m(Se)},le=eb(h),ge=ee(le,2),Pe=ge[0],ve=ge[1],ce=rb(J,ae,U,b||a,ve,u),fe=Jy(ae,U),oe=s.useMemo(function(){var Je=fe(W),Se=ee(Je,2),He=Se[0],je=Se[1];if(!z||!W.length)return[He,[],je];var ze=fa(He),ye=q(),de=Pn(ze,!0,ye),Ce=de.checkedKeys,Me=de.halfCheckedKeys;return[te(Ce),te(Me),je]},[z,W,q,te,fe]),se=ee(oe,3),he=se[0],be=se[1],Re=se[2],Fe=s.useMemo(function(){var Je=fa(he),Se=lc(Je,q,_);return[].concat(De(Re),De(te(Se)))},[he,q,te,Re,_]),Ee=Gy(Fe,ae,U,z,d),ke=sc(function(Je){if(Z(Je),c){var Se=uc(Je),He=Se.map(function(ye){return yo(ye,ae,U).map(function(de){return de.option})}),je=z?Se:Se[0],ze=z?He:He[0];c(je,ze)}}),we=sc(function(Je){if(Q(""),!z)ke(Je);else{var Se=Pr(Je),He=fa(he),je=fa(be),ze=He.includes(Se),ye=Re.some(function(it){return Pr(it)===Se}),de=he,Ce=Re;if(ye&&!ze)Ce=Re.filter(function(it){return Pr(it)!==Se});else{var Me=ze?He.filter(function(it){return it!==Se}):[].concat(De(He),[Se]),Be=q(),nt;if(ze){var Ne=Pn(Me,{checked:!1,halfCheckedKeys:je},Be);nt=Ne.checkedKeys}else{var xe=Pn(Me,!0,Be);nt=xe.checkedKeys}var qe=lc(nt,q,_);de=te(qe)}ke([].concat(De(Ce),De(de)))}}),Ge=function(Se,He){if(He.type==="clear"){ke([]);return}var je=He.values[0].valueCells;we(je)},Qe=w!==void 0?w:S,ct=P||E,dt=k||M,mt=function(Se){D==null||D(Se),O==null||O(Se)},We=s.useMemo(function(){return{options:ae,fieldNames:U,values:he,halfValues:be,changeOnSelect:u,onSelect:we,checkable:f,searchOptions:ce,dropdownPrefixCls:b,loadData:x,expandTrigger:y,expandIcon:F,loadingIcon:N,dropdownMenuColumnStyle:T}},[ae,U,he,be,u,we,f,ce,b,x,y,F,N,T]),Oe=!(J?ce:ae).length,ot=J&&ve.matchInputWidth||Oe?{}:{minWidth:"auto"};return s.createElement(_o.Provider,{value:We},s.createElement(qf,ne({},A,{ref:e,id:K,prefixCls:a,dropdownMatchSelectWidth:L,dropdownStyle:ot,displayValues:Ee,onDisplayValuesChange:Ge,mode:z?"multiple":void 0,searchValue:J,onSearch:ie,showSearch:Pe,OptionList:sb,emptyOptions:Oe,open:Qe,dropdownClassName:ct,placement:dt,onDropdownVisibleChange:mt,getRawInputElement:function(){return R}})))});Ao.SHOW_PARENT=Sv;Ao.SHOW_CHILD=wv;var db=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a2&&arguments[2]!==void 0?arguments[2]:!0,te=function(){T(function(Y){var J=new Map(Y),Q=J.delete(U);return Q?J:Y})};return T(function(ue){return new Map(ue).set(U,{url:ae,canPreview:q})}),te},W=function(U){U.stopPropagation(),R(!1),_(null)};return s.useEffect(function(){O(z)},[z]),s.useEffect(function(){!N&&A&&O(z)},[z,A,N]),s.createElement(Tb,{value:{isPreviewGroup:!0,previewUrls:V,setPreviewUrls:T,current:D,setCurrent:O,setShowPreview:R,setMousePosition:_,registerImage:X}},a,s.createElement(Nv,ne({"aria-hidden":!N,visible:N,prefixCls:n,onClose:W,mousePosition:j,src:V.get(D),icons:l,getContainer:h,countRender:x},S)))},wi=1,Pi=50,Xa=1,Db=.2,Ob=function(e){var r,n=e.visible,a=e.maskTransitionName,o=e.getContainer,l=e.prefixCls,i=e.rootClassName,u=e.icons,c=e.countRender,d=e.showSwitch,f=e.showProgress,v=e.current,m=e.count,h=e.scale,y=e.onSwitchLeft,g=e.onSwitchRight,b=e.onClose,x=e.onZoomIn,S=e.onZoomOut,w=e.onRotateRight,E=e.onRotateLeft,P=u.rotateLeft,T=u.rotateRight,M=u.zoomIn,k=u.zoomOut,D=u.close,O=u.left,$=u.right,F="".concat(l,"-operations-operation"),N="".concat(l,"-operations-icon"),R=[{icon:D,onClick:b,type:"close"},{icon:M,onClick:x,type:"zoomIn",disabled:h===Pi},{icon:k,onClick:S,type:"zoomOut",disabled:h===wi},{icon:T,onClick:w,type:"rotateRight"},{icon:P,onClick:E,type:"rotateLeft"}],I=s.createElement(s.Fragment,null,d&&s.createElement(s.Fragment,null,s.createElement("div",{className:pe("".concat(l,"-switch-left"),B({},"".concat(l,"-switch-left-disabled"),v===0)),onClick:y},O),s.createElement("div",{className:pe("".concat(l,"-switch-right"),B({},"".concat(l,"-switch-right-disabled"),v===m-1)),onClick:g},$)),s.createElement("ul",{className:"".concat(l,"-operations")},f&&s.createElement("li",{className:"".concat(l,"-operations-progress")},(r=c==null?void 0:c(v+1,m))!==null&&r!==void 0?r:"".concat(v+1," / ").concat(m)),R.map(function(L){var j,_=L.icon,A=L.onClick,K=L.type,z=L.disabled;return s.createElement("li",{className:pe(F,(j={},B(j,"".concat(l,"-operations-operation-").concat(K),!0),B(j,"".concat(l,"-operations-operation-disabled"),!!z),j)),onClick:A,key:K},s.isValidElement(_)?s.cloneElement(_,{className:N}):_)})));return s.createElement(Xs,{visible:n,motionName:a},function(L){var j=L.className,_=L.style;return s.createElement(Lp,{open:!0,getContainer:o??document.body},s.createElement("div",{className:pe("".concat(l,"-operations-wrapper"),j,i),style:_},I))})},cc={x:0,y:0,rotate:0,scale:1};function Ib(t){var e=s.useRef(null),r=s.useRef([]),n=s.useState(cc),a=ee(n,2),o=a[0],l=a[1],i=function(){l(cc)},u=function(f){e.current===null&&(r.current=[],e.current=ho(function(){l(function(v){var m=v;return r.current.forEach(function(h){m=p(p({},m),h)}),e.current=null,m})})),r.current.push(p(p({},o),f))},c=function(f,v,m){var h=t.current,y=h.width,g=h.height,b=h.offsetWidth,x=h.offsetHeight,S=h.offsetLeft,w=h.offsetTop,E=f,P=o.scale*f;P>Pi?(E=Pi/o.scale,P=Pi):Pn){if(e>0)return B({},t,o);if(e<0&&an)return B({},t,e<0?o:-o);return{}}function _b(t,e,r,n){var a=Mv(),o=a.width,l=a.height,i=null;return t<=o&&e<=l?i={x:0,y:0}:(t>o||e>l)&&(i=p(p({},dc("x",r,t,o)),dc("y",n,e,l))),i}var Lb=["prefixCls","src","alt","onClose","afterClose","visible","icons","rootClassName","getContainer","countRender","scaleStep","transitionName","maskTransitionName"],Nv=function(e){var r=e.prefixCls,n=e.src,a=e.alt,o=e.onClose;e.afterClose;var l=e.visible,i=e.icons,u=i===void 0?{}:i,c=e.rootClassName,d=e.getContainer,f=e.countRender,v=e.scaleStep,m=v===void 0?.5:v,h=e.transitionName,y=h===void 0?"zoom":h,g=e.maskTransitionName,b=g===void 0?"fade":g,x=Le(e,Lb),S=s.useRef(),w=s.useRef({deltaX:0,deltaY:0,transformX:0,transformY:0}),E=s.useState(!1),P=ee(E,2),T=P[0],M=P[1],k=s.useContext(vu),D=k.previewUrls,O=k.current,$=k.isPreviewGroup,F=k.setCurrent,N=D.size,R=Array.from(D.keys()),I=R.indexOf(O),L=$?D.get(O):n,j=$&&N>1,_=$&&N>=1,A=Ib(S),K=A.transform,z=A.resetTransform,V=A.updateTransform,X=A.dispatchZoonChange,W=K.rotate,Z=K.scale,U=pe(B({},"".concat(r,"-moving"),T)),ae=function(){z()},q=function(){X(Xa+m)},te=function(){X(Xa-m)},ue=function(){V({rotate:W+90})},Y=function(){V({rotate:W-90})},J=function(oe){oe.preventDefault(),oe.stopPropagation(),I>0&&F(R[I-1])},Q=function(oe){oe.preventDefault(),oe.stopPropagation(),I0&&(be=Xa/be),X(be,oe.clientX,oe.clientY)}},ve=s.useCallback(function(fe){!l||!j||(fe.keyCode===Ye.LEFT?I>0&&F(R[I-1]):fe.keyCode===Ye.RIGHT&&I=0||i.relatedTarget.className.indexOf("".concat(f,"-item"))>=0))&&d(n.getValidValue()))},n.go=function(i){var u=n.state.goInputText;u!==""&&(i.keyCode===Hr.ENTER||i.type==="click")&&(n.setState({goInputText:""}),n.props.quickGo(n.getValidValue()))},n}return xn(r,[{key:"getValidValue",value:function(){var a=this.state.goInputText;return!a||isNaN(a)?void 0:Number(a)}},{key:"getPageSizeOptions",value:function(){var a=this.props,o=a.pageSize,l=a.pageSizeOptions;return l.some(function(i){return i.toString()===o.toString()})?l:l.concat([o.toString()]).sort(function(i,u){var c=isNaN(Number(i))?0:Number(i),d=isNaN(Number(u))?0:Number(u);return c-d})}},{key:"render",value:function(){var a=this,o=this.props,l=o.pageSize,i=o.locale,u=o.rootPrefixCls,c=o.changeSize,d=o.quickGo,f=o.goButton,v=o.selectComponentClass,m=o.buildOptionText,h=o.selectPrefixCls,y=o.disabled,g=this.state.goInputText,b="".concat(u,"-options"),x=v,S=null,w=null,E=null;if(!c&&!d)return null;var P=this.getPageSizeOptions();if(c&&x){var T=P.map(function(M,k){return G.createElement(x.Option,{key:k,value:M.toString()},(m||a.buildOptionText)(M))});S=G.createElement(x,{disabled:y,prefixCls:h,showSearch:!1,className:"".concat(b,"-size-changer"),optionLabelProp:"children",dropdownMatchSelectWidth:!1,value:(l||P[0]).toString(),onChange:this.changeSize,getPopupContainer:function(k){return k.parentNode},"aria-label":i.page_size,defaultOpen:!1},T)}return d&&(f&&(E=typeof f=="boolean"?G.createElement("button",{type:"button",onClick:this.go,onKeyUp:this.go,disabled:y,className:"".concat(b,"-quick-jumper-button")},i.jump_to_confirm):G.createElement("span",{onClick:this.go,onKeyUp:this.go},f)),w=G.createElement("div",{className:"".concat(b,"-quick-jumper")},i.jump_to,G.createElement("input",{disabled:y,type:"text",value:g,onChange:this.handleChange,onKeyUp:this.go,onBlur:this.handleBlur,"aria-label":i.page}),i.page,E)),G.createElement("li",{className:"".concat(b)},S,w)}}]),r}(G.Component);Dv.defaultProps={pageSizeOptions:["10","20","50","100"]};const Ov={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"};function fs(){}function mc(t){var e=Number(t);return typeof e=="number"&&!isNaN(e)&&isFinite(e)&&Math.floor(e)===e}function Hb(t,e,r){return r}function br(t,e,r){var n=typeof t>"u"?e.pageSize:t;return Math.floor((r.total-1)/n)+1}var Iv=function(t){yn(r,t);var e=bn(r);function r(n){var a;Cn(this,r),a=e.call(this,n),a.getJumpPrevPage=function(){return Math.max(1,a.state.current-(a.props.showLessItems?3:5))},a.getJumpNextPage=function(){return Math.min(br(void 0,a.state,a.props),a.state.current+(a.props.showLessItems?3:5))},a.getItemIcon=function(c,d){var f=a.props.prefixCls,v=c||G.createElement("button",{type:"button","aria-label":d,className:"".concat(f,"-item-link")});return typeof c=="function"&&(v=G.createElement(c,p({},a.props))),v},a.savePaginationNode=function(c){a.paginationNode=c},a.isValid=function(c){var d=a.props.total;return mc(c)&&c!==a.state.current&&mc(d)&&d>0},a.shouldDisplayQuickJumper=function(){var c=a.props,d=c.showQuickJumper,f=c.total,v=a.state.pageSize;return f<=v?!1:d},a.handleKeyDown=function(c){(c.keyCode===Hr.ARROW_UP||c.keyCode===Hr.ARROW_DOWN)&&c.preventDefault()},a.handleKeyUp=function(c){var d=a.getValidValue(c),f=a.state.currentInputValue;d!==f&&a.setState({currentInputValue:d}),c.keyCode===Hr.ENTER?a.handleChange(d):c.keyCode===Hr.ARROW_UP?a.handleChange(d-1):c.keyCode===Hr.ARROW_DOWN&&a.handleChange(d+1)},a.handleBlur=function(c){var d=a.getValidValue(c);a.handleChange(d)},a.changePageSize=function(c){var d=a.state.current,f=br(c,a.state,a.props);d=d>f?f:d,f===0&&(d=a.state.current),typeof c=="number"&&("pageSize"in a.props||a.setState({pageSize:c}),"current"in a.props||a.setState({current:d,currentInputValue:d})),a.props.onShowSizeChange(d,c),"onChange"in a.props&&a.props.onChange&&a.props.onChange(d,c)},a.handleChange=function(c){var d=a.props,f=d.disabled,v=d.onChange,m=a.state,h=m.pageSize,y=m.current,g=m.currentInputValue;if(a.isValid(c)&&!f){var b=br(void 0,a.state,a.props),x=c;return c>b?x=b:c<1&&(x=1),"current"in a.props||a.setState({current:x}),x!==g&&a.setState({currentInputValue:x}),v(x,h),x}return y},a.prev=function(){a.hasPrev()&&a.handleChange(a.state.current-1)},a.next=function(){a.hasNext()&&a.handleChange(a.state.current+1)},a.jumpPrev=function(){a.handleChange(a.getJumpPrevPage())},a.jumpNext=function(){a.handleChange(a.getJumpNextPage())},a.hasPrev=function(){return a.state.current>1},a.hasNext=function(){return a.state.current2?f-2:0),m=2;m=l?u=l:u=Number(o),u}},{key:"getShowSizeChanger",value:function(){var a=this.props,o=a.showSizeChanger,l=a.total,i=a.totalBoundaryShowSizeChanger;return typeof o<"u"?o:l>i}},{key:"renderPrev",value:function(a){var o=this.props,l=o.prevIcon,i=o.itemRender,u=i(a,"prev",this.getItemIcon(l,"prev page")),c=!this.hasPrev();return s.isValidElement(u)?s.cloneElement(u,{disabled:c}):u}},{key:"renderNext",value:function(a){var o=this.props,l=o.nextIcon,i=o.itemRender,u=i(a,"next",this.getItemIcon(l,"next page")),c=!this.hasNext();return s.isValidElement(u)?s.cloneElement(u,{disabled:c}):u}},{key:"render",value:function(){var a=this,o=this.props,l=o.prefixCls,i=o.className,u=o.style,c=o.disabled,d=o.hideOnSinglePage,f=o.total,v=o.locale,m=o.showQuickJumper,h=o.showLessItems,y=o.showTitle,g=o.showTotal,b=o.simple,x=o.itemRender,S=o.showPrevNextJumpers,w=o.jumpPrevIcon,E=o.jumpNextIcon,P=o.selectComponentClass,T=o.selectPrefixCls,M=o.pageSizeOptions,k=this.state,D=k.current,O=k.pageSize,$=k.currentInputValue;if(d===!0&&f<=O)return null;var F=br(void 0,this.state,this.props),N=[],R=null,I=null,L=null,j=null,_=null,A=m&&m.goButton,K=h?1:2,z=D-1>0?D-1:0,V=D+1f?f:D*O]));if(b)return A&&(typeof A=="boolean"?_=G.createElement("button",{type:"button",onClick:this.handleGoTO,onKeyUp:this.handleGoTO},v.jump_to_confirm):_=G.createElement("span",{onClick:this.handleGoTO,onKeyUp:this.handleGoTO},A),_=G.createElement("li",{title:y?"".concat(v.jump_to).concat(D,"/").concat(F):null,className:"".concat(l,"-simple-pager")},_)),G.createElement("ul",ne({className:pe(l,"".concat(l,"-simple"),B({},"".concat(l,"-disabled"),c),i),style:u,ref:this.savePaginationNode},X),W,G.createElement("li",{title:y?v.prev_page:null,onClick:this.prev,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterPrev,className:pe("".concat(l,"-prev"),B({},"".concat(l,"-disabled"),!this.hasPrev())),"aria-disabled":!this.hasPrev()},this.renderPrev(z)),G.createElement("li",{title:y?"".concat(D,"/").concat(F):null,className:"".concat(l,"-simple-pager")},G.createElement("input",{type:"text",value:$,disabled:c,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onChange:this.handleKeyUp,onBlur:this.handleBlur,size:"3"}),G.createElement("span",{className:"".concat(l,"-slash")},"/"),F),G.createElement("li",{title:y?v.next_page:null,onClick:this.next,tabIndex:this.hasPrev()?0:null,onKeyPress:this.runIfEnterNext,className:pe("".concat(l,"-next"),B({},"".concat(l,"-disabled"),!this.hasNext())),"aria-disabled":!this.hasNext()},this.renderNext(V)),_);if(F<=3+K*2){var Z={locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,showTitle:y,itemRender:x};F||N.push(G.createElement(Za,ne({},Z,{key:"noPager",page:1,className:"".concat(l,"-item-disabled")})));for(var U=1;U<=F;U+=1){var ae=D===U;N.push(G.createElement(Za,ne({},Z,{key:U,page:U,active:ae})))}}else{var q=h?v.prev_3:v.prev_5,te=h?v.next_3:v.next_5;S&&(R=G.createElement("li",{title:y?q:null,key:"prev",onClick:this.jumpPrev,tabIndex:"0",onKeyPress:this.runIfEnterJumpPrev,className:pe("".concat(l,"-jump-prev"),B({},"".concat(l,"-jump-prev-custom-icon"),!!w))},x(this.getJumpPrevPage(),"jump-prev",this.getItemIcon(w,"prev page"))),I=G.createElement("li",{title:y?te:null,key:"next",tabIndex:"0",onClick:this.jumpNext,onKeyPress:this.runIfEnterJumpNext,className:pe("".concat(l,"-jump-next"),B({},"".concat(l,"-jump-next-custom-icon"),!!E))},x(this.getJumpNextPage(),"jump-next",this.getItemIcon(E,"next page")))),j=G.createElement(Za,{locale:v,last:!0,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:F,page:F,active:!1,showTitle:y,itemRender:x}),L=G.createElement(Za,{locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:1,page:1,active:!1,showTitle:y,itemRender:x});var ue=Math.max(1,D-K),Y=Math.min(D+K,F);D-1<=K&&(Y=1+K*2),F-D<=K&&(ue=F-K*2);for(var J=ue;J<=Y;J+=1){var Q=D===J;N.push(G.createElement(Za,{locale:v,rootPrefixCls:l,onClick:this.handleChange,onKeyPress:this.runIfEnter,key:J,page:J,active:Q,showTitle:y,itemRender:x}))}D-1>=K*2&&D!==1+2&&(N[0]=s.cloneElement(N[0],{className:"".concat(l,"-item-after-jump-prev")}),N.unshift(R)),F-D>=K*2&&D!==F-2&&(N[N.length-1]=s.cloneElement(N[N.length-1],{className:"".concat(l,"-item-before-jump-next")}),N.push(I)),ue!==1&&N.unshift(L),Y!==F&&N.push(j)}var ie=!this.hasPrev()||!F,le=!this.hasNext()||!F;return G.createElement("ul",ne({className:pe(l,i,B({},"".concat(l,"-disabled"),c)),style:u,ref:this.savePaginationNode},X),W,G.createElement("li",{title:y?v.prev_page:null,onClick:this.prev,tabIndex:ie?null:0,onKeyPress:this.runIfEnterPrev,className:pe("".concat(l,"-prev"),B({},"".concat(l,"-disabled"),ie)),"aria-disabled":ie},this.renderPrev(z)),N,G.createElement("li",{title:y?v.next_page:null,onClick:this.next,tabIndex:le?null:0,onKeyPress:this.runIfEnterNext,className:pe("".concat(l,"-next"),B({},"".concat(l,"-disabled"),le)),"aria-disabled":le},this.renderNext(V)),G.createElement(Dv,{disabled:c,locale:v,rootPrefixCls:l,selectComponentClass:P,selectPrefixCls:T,changeSize:this.getShowSizeChanger()?this.changePageSize:null,current:D,pageSize:O,pageSizeOptions:M,quickGo:this.shouldDisplayQuickJumper()?this.handleChange:null,goButton:A}))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var l={};if("current"in a&&(l.current=a.current,a.current!==o.current&&(l.currentInputValue=l.current)),"pageSize"in a&&a.pageSize!==o.pageSize){var i=o.current,u=br(a.pageSize,o,a);i=i>u?u:i,"current"in a||(l.current=i,l.currentInputValue=i),l.pageSize=a.pageSize}return l}}]),r}(G.Component);Iv.defaultProps={defaultCurrent:1,total:0,defaultPageSize:10,onChange:fs,className:"",selectPrefixCls:"rc-select",prefixCls:"rc-pagination",selectComponentClass:null,hideOnSinglePage:!1,showPrevNextJumpers:!0,showQuickJumper:!1,showLessItems:!1,showTitle:!0,onShowSizeChange:fs,locale:Ov,style:{},itemRender:Hb,totalBoundaryShowSizeChanger:50};var _v=function(e){return s.createElement(Nr,ne({},e,{size:"small"}))},Lv=function(e){return s.createElement(Nr,ne({},e,{size:"middle"}))};_v.Option=Nr.Option;Lv.Option=Nr.Option;var Wb=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a=d&&iv?"true":"false","aria-posinset":v+1,"aria-setsize":m,tabIndex:u?-1:0},G.createElement("div",{className:"".concat(c,"-first")},y),G.createElement("div",{className:"".concat(c,"-second")},y)));return f&&(g=f(g,this.props)),g}}]),r}(G.Component);function hc(){}var jv=function(t){yn(r,t);var e=bn(r);function r(n){var a;Cn(this,r),a=e.call(this,n),a.stars=void 0,a.rate=void 0,a.onHover=function(l,i){var u=a.props.onHoverChange,c=a.getStarValue(i,l.pageX),d=a.state.cleanedValue;c!==d&&a.setState({hoverValue:c,cleanedValue:null}),u(c)},a.onMouseLeave=function(){var l=a.props.onHoverChange;a.setState({hoverValue:void 0,cleanedValue:null}),l(void 0)},a.onClick=function(l,i){var u=a.props.allowClear,c=a.state.value,d=a.getStarValue(i,l.pageX),f=!1;u&&(f=d===c),a.onMouseLeave(),a.changeValue(f?0:d),a.setState({cleanedValue:f?d:null})},a.onFocus=function(){var l=a.props.onFocus;a.setState({focused:!0}),l&&l()},a.onBlur=function(){var l=a.props.onBlur;a.setState({focused:!1}),l&&l()},a.onKeyDown=function(l){var i=l.keyCode,u=a.props,c=u.count,d=u.allowHalf,f=u.onKeyDown,v=u.direction,m=v==="rtl",h=a.state.value;i===Ye.RIGHT&&h0&&!m||i===Ye.RIGHT&&h>0&&m?(d?h-=.5:h-=1,a.changeValue(h),l.preventDefault()):i===Ye.LEFT&&hm/2||!c&&o-v=r}function wC(t){return t&&Ve(t)==="object"&&!Array.isArray(t)&&!s.isValidElement(t)}function PC(t){return typeof t=="string"?!0:yp(t)}var EC=function(e){var r=e.ellipsis,n=e.rowType,a=e.children,o,l=r===!0?{showTitle:!0}:r;return l&&(l.showTitle||n==="header")&&(typeof a=="string"||typeof a=="number"?o=a.toString():s.isValidElement(a)&&typeof a.props.children=="string"&&(o=a.props.children)),o};function kC(t,e){var r,n,a,o=t.prefixCls,l=t.className,i=t.record,u=t.index,c=t.renderIndex,d=t.dataIndex,f=t.render,v=t.children,m=t.component,h=m===void 0?"td":m,y=t.colSpan,g=t.rowSpan,b=t.fixLeft,x=t.fixRight,S=t.firstFixLeft,w=t.lastFixLeft,E=t.firstFixRight,P=t.lastFixRight,T=t.appendNode,M=t.additionalProps,k=M===void 0?{}:M,D=t.ellipsis,O=t.align,$=t.rowType,F=t.isSticky,N=t.hovering,R=t.onHover,I="".concat(o,"-cell"),L=s.useContext(Wv),j=s.useContext(Bv),_=s.useContext(cl),A=_.allColumnsFixedLeft,K=s.useMemo(function(){if(vs(v))return[v];var oe=zv(i,d),se=oe,he=void 0;if(f){var be=f(oe,i,c);wC(be)?(se=be.children,he=be.props,L.renderWithProps=!0):se=be}return[se,he]},[L.renderWithProps?Math.random():0,v,d,L,i,f,c]),z=ee(K,2),V=z[0],X=z[1],W=V;Ve(W)==="object"&&!Array.isArray(W)&&!s.isValidElement(W)&&(W=null),D&&(w||E)&&(W=s.createElement("span",{className:"".concat(I,"-content")},W));var Z=X||{},U=Z.colSpan,ae=Z.rowSpan,q=Z.style,te=Z.className,ue=Le(Z,xC),Y=(r=U!==void 0?U:y)!==null&&r!==void 0?r:1,J=(n=ae!==void 0?ae:g)!==null&&n!==void 0?n:1;if(Y===0||J===0)return null;var Q={},ie=typeof b=="number"&&j,le=typeof x=="number"&&j;ie&&(Q.position="sticky",Q.left=b),le&&(Q.position="sticky",Q.right=x);var ge={};O&&(ge.textAlign=O);var Pe=function(se){var he;i&&R(u,u+J-1),k==null||(he=k.onMouseEnter)===null||he===void 0||he.call(k,se)},ve=function(se){var he;i&&R(-1,-1),k==null||(he=k.onMouseLeave)===null||he===void 0||he.call(k,se)},ce=EC({rowType:$,ellipsis:D,children:V}),fe=p(p(p({title:ce},ue),k),{},{colSpan:Y!==1?Y:null,rowSpan:J!==1?J:null,className:pe(I,l,(a={},B(a,"".concat(I,"-fix-left"),ie&&j),B(a,"".concat(I,"-fix-left-first"),S&&j),B(a,"".concat(I,"-fix-left-last"),w&&j),B(a,"".concat(I,"-fix-left-all"),w&&A&&j),B(a,"".concat(I,"-fix-right"),le&&j),B(a,"".concat(I,"-fix-right-first"),E&&j),B(a,"".concat(I,"-fix-right-last"),P&&j),B(a,"".concat(I,"-ellipsis"),D),B(a,"".concat(I,"-with-append"),T),B(a,"".concat(I,"-fix-sticky"),(ie||le)&&F&&j),B(a,"".concat(I,"-row-hover"),!X&&N),a),k.className,te),style:p(p(p(p({},k.style),ge),Q),q),onMouseEnter:Pe,onMouseLeave:ve,ref:PC(h)?e:null});return s.createElement(h,fe,T,W)}var Uv=s.forwardRef(kC);Uv.displayName="Cell";var RC=["expanded","className","hovering"],FC=s.memo(Uv,function(t,e){return e.shouldCellUpdate?RC.every(function(r){return t[r]===e[r]})&&!e.shouldCellUpdate(e.record,t.record):ou(t,e)}),Vo=s.forwardRef(function(t,e){var r=t.index,n=t.additionalProps,a=n===void 0?{}:n,o=t.colSpan,l=t.rowSpan,i=a.colSpan,u=a.rowSpan,c=o??i,d=l??u,f=CC(Hv,function(h){var y=SC(r,d||1,h==null?void 0:h.startRow,h==null?void 0:h.endRow);return{onHover:h==null?void 0:h.onHover,hovering:y}}),v=f.onHover,m=f.hovering;return s.createElement(FC,ne({},t,{colSpan:c,rowSpan:d,hovering:m,ref:e,onHover:v}))});Vo.displayName="WrappedCell";var Yn=s.createContext(null);function mu(t,e,r,n,a){var o=r[t]||{},l=r[e]||{},i,u;o.fixed==="left"?i=n.left[t]:l.fixed==="right"&&(u=n.right[e]);var c=!1,d=!1,f=!1,v=!1,m=r[e+1],h=r[t-1];if(a==="rtl"){if(i!==void 0){var y=h&&h.fixed==="left";v=!y}else if(u!==void 0){var g=m&&m.fixed==="right";f=!g}}else if(i!==void 0){var b=m&&m.fixed==="left";c=!b}else if(u!==void 0){var x=h&&h.fixed==="right";d=!x}return{fixLeft:i,fixRight:u,lastFixLeft:c,firstFixRight:d,lastFixRight:f,firstFixLeft:v,isSticky:n.isSticky}}function Yv(t){var e=t.cells,r=t.stickyOffsets,n=t.flattenColumns,a=t.rowComponent,o=t.cellComponent,l=t.onHeaderRow,i=t.index,u=s.useContext(Yn),c=u.prefixCls,d=u.direction,f;l&&(f=l(e.map(function(m){return m.column}),i));var v=ul(e.map(function(m){return m.column}));return s.createElement(a,f,e.map(function(m,h){var y=m.column,g=mu(m.colStart,m.colEnd,n,r,d),b;return y&&y.onHeaderCell&&(b=m.column.onHeaderCell(y)),s.createElement(Vo,ne({},m,{ellipsis:y.ellipsis,align:y.align,component:o,prefixCls:c,key:v[h]},g,{additionalProps:b,rowType:"header"}))}))}Yv.displayName="HeaderRow";function MC(t){var e=[];function r(l,i){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;e[u]=e[u]||[];var c=i,d=l.filter(Boolean).map(function(f){var v={key:f.key,className:f.className||"",children:f.title,column:f,colStart:c},m=1,h=f.children;return h&&h.length>0&&(m=r(h,c,u+1).reduce(function(y,g){return y+g},0),v.hasSubColumns=!0),"colSpan"in f&&(m=f.colSpan),"rowSpan"in f&&(v.rowSpan=f.rowSpan),v.colSpan=m,v.colEnd=v.colStart+m-1,e[u].push(v),c+=m,m});return d}r(t,0);for(var n=e.length,a=function(i){e[i].forEach(function(u){!("rowSpan"in u)&&!u.hasSubColumns&&(u.rowSpan=n-i)})},o=0;o1?ie-1:0),ge=1;ge0?[].concat(De(e),De(ms(o).map(function(l){return p({fixed:a},l)}))):[].concat(De(e),[p(p({},r),{},{fixed:a})])},[])}function jC(t){return t.map(function(e){var r=e.fixed,n=Le(e,LC),a=r;return r==="left"?a="right":r==="right"&&(a="left"),p({fixed:a},n)})}function AC(t,e){var r=t.prefixCls,n=t.columns,a=t.children,o=t.expandable,l=t.expandedKeys,i=t.columnTitle,u=t.getRowKey,c=t.onTriggerExpand,d=t.expandIcon,f=t.rowExpandable,v=t.expandIconColumnIndex,m=t.direction,h=t.expandRowByClick,y=t.columnWidth,g=t.fixed,b=s.useMemo(function(){return n||hu(a)},[n,a]),x=s.useMemo(function(){if(o){var E,P=b.slice();if(!P.includes(Wr)){var T=v||0;T>=0&&P.splice(T,0,Wr)}var M=P.indexOf(Wr);P=P.filter(function($,F){return $!==Wr||F===M});var k=b[M],D;(g==="left"||g)&&!v?D="left":(g==="right"||g)&&v===b.length?D="right":D=k?k.fixed:null;var O=(E={},B(E,uo,{className:"".concat(r,"-expand-icon-col"),columnType:"EXPAND_COLUMN"}),B(E,"title",i),B(E,"fixed",D),B(E,"className","".concat(r,"-row-expand-icon-cell")),B(E,"width",y),B(E,"render",function(F,N,R){var I=u(N,R),L=l.has(I),j=f?f(N):!0,_=d({prefixCls:r,expanded:L,expandable:j,record:N,onExpand:c});return h?s.createElement("span",{onClick:function(K){return K.stopPropagation()}},_):_}),E);return P.map(function($){return $===Wr?O:$})}return b.filter(function($){return $!==Wr})},[o,b,u,l,d,m]),S=s.useMemo(function(){var E=x;return e&&(E=e(E)),E.length||(E=[{render:function(){return null}}]),E},[e,x,m]),w=s.useMemo(function(){return m==="rtl"?jC(ms(S)):ms(S)},[S,m]);return[S,w]}function em(t){var e=s.useRef(t),r=s.useState({}),n=ee(r,2),a=n[1],o=s.useRef(null),l=s.useRef([]);function i(u){l.current.push(u);var c=Promise.resolve();o.current=c,c.then(function(){if(o.current===c){var d=l.current,f=e.current;l.current=[],d.forEach(function(v){e.current=v(e.current)}),o.current=null,f!==e.current&&a({})}})}return s.useEffect(function(){return function(){o.current=null}},[]),[e.current,i]}function KC(t){var e=s.useRef(t||null),r=s.useRef();function n(){window.clearTimeout(r.current)}function a(l){e.current=l,n(),r.current=window.setTimeout(function(){e.current=null,r.current=void 0},100)}function o(){return e.current}return s.useEffect(function(){return n},[]),[a,o]}function VC(t,e,r){var n=s.useMemo(function(){for(var a=[],o=[],l=0,i=0,u=0;u=0;i-=1){var u=e[i],c=r&&r[i],d=c&&c[uo];if(u||d||l){var f=d||{};f.columnType;var v=Le(f,zC);a.unshift(s.createElement("col",ne({key:i,style:{width:u}},v))),l=!0}}return s.createElement("colgroup",null,a)}function Cc(t){var e=t.className,r=t.children;return s.createElement("div",{className:e},r)}var nm=s.createContext({});function BC(t){var e=t.className,r=t.index,n=t.children,a=t.colSpan,o=a===void 0?1:a,l=t.rowSpan,i=t.align,u=s.useContext(Yn),c=u.prefixCls,d=u.direction,f=s.useContext(nm),v=f.scrollColumnIndex,m=f.stickyOffsets,h=f.flattenColumns,y=r+o-1,g=y+1===v?o+1:o,b=mu(r,r+g-1,h,m,d);return s.createElement(Vo,ne({className:e,index:r,component:"td",prefixCls:c,record:null,dataIndex:null,align:i,colSpan:g,rowSpan:l,render:function(){return n}},b))}var HC=["children"];function WC(t){var e=t.children,r=Le(t,HC);return s.createElement("tr",r,e)}function dl(t){var e=t.children;return e}dl.Row=WC;dl.Cell=BC;function yi(t){var e=t.children,r=t.stickyOffsets,n=t.flattenColumns,a=s.useContext(Yn),o=a.prefixCls,l=n.length-1,i=n[l],u=s.useMemo(function(){return{stickyOffsets:r,flattenColumns:n,scrollColumnIndex:i!=null&&i.scrollbar?l:null}},[i,n,l,r]);return s.createElement(nm.Provider,{value:u},s.createElement("tfoot",{className:"".concat(o,"-summary")},e))}var rm=dl;function UC(t){var e,r=t.prefixCls,n=t.record,a=t.onExpand,o=t.expanded,l=t.expandable,i="".concat(r,"-row-expand-icon");if(!l)return s.createElement("span",{className:pe(i,"".concat(r,"-row-spaced"))});var u=function(d){a(n,d),d.stopPropagation()};return s.createElement("span",{className:pe(i,(e={},B(e,"".concat(r,"-row-expanded"),o),B(e,"".concat(r,"-row-collapsed"),!o),e)),onClick:u})}function YC(t,e,r){var n=[];function a(o){(o||[]).forEach(function(l,i){n.push(e(l,i)),a(l[r])})}return a(t),n}var GC=function(e,r){var n,a,o=e.scrollBodyRef,l=e.onScroll,i=e.offsetScroll,u=e.container,c=s.useContext(Yn),d=c.prefixCls,f=((n=o.current)===null||n===void 0?void 0:n.scrollWidth)||0,v=((a=o.current)===null||a===void 0?void 0:a.clientWidth)||0,m=f&&v*(v/f),h=s.useRef(),y=em({scrollLeft:0,isHiddenScrollBar:!1}),g=ee(y,2),b=g[0],x=g[1],S=s.useRef({delta:0,x:0}),w=s.useState(!1),E=ee(w,2),P=E[0],T=E[1],M=function(){T(!1)},k=function(N){N.persist(),S.current.delta=N.pageX-b.scrollLeft,S.current.x=0,T(!0),N.preventDefault()},D=function(N){var R,I=N||((R=window)===null||R===void 0?void 0:R.event),L=I.buttons;if(!P||L===0){P&&T(!1);return}var j=S.current.x+N.pageX-S.current.x-S.current.delta;j<=0&&(j=0),j+m>=v&&(j=v-m),l({scrollLeft:j/v*(f+2)}),S.current.x=N.pageX},O=function(){if(o.current){var N=ds(o.current).top,R=N+o.current.offsetHeight,I=u===window?document.documentElement.scrollTop+window.innerHeight:ds(u).top+u.clientHeight;R-Zu()<=I||N>=I-i?x(function(L){return p(p({},L),{},{isHiddenScrollBar:!0})}):x(function(L){return p(p({},L),{},{isHiddenScrollBar:!1})})}},$=function(N){x(function(R){return p(p({},R),{},{scrollLeft:N/f*v||0})})};return s.useImperativeHandle(r,function(){return{setScrollLeft:$}}),s.useEffect(function(){var F=nr(document.body,"mouseup",M,!1),N=nr(document.body,"mousemove",D,!1);return O(),function(){F.remove(),N.remove()}},[m,P]),s.useEffect(function(){var F=nr(u,"scroll",O,!1),N=nr(window,"resize",O,!1);return function(){F.remove(),N.remove()}},[u]),s.useEffect(function(){b.isHiddenScrollBar||x(function(F){var N=o.current;return N?p(p({},F),{},{scrollLeft:N.scrollLeft/N.scrollWidth*N.clientWidth}):F})},[b.isHiddenScrollBar]),f<=v||!m||b.isHiddenScrollBar?null:s.createElement("div",{style:{height:Zu(),width:v,bottom:i},className:"".concat(d,"-sticky-scroll")},s.createElement("div",{onMouseDown:k,ref:h,className:pe("".concat(d,"-sticky-scroll-bar"),B({},"".concat(d,"-sticky-scroll-bar-active"),P)),style:{width:"".concat(m,"px"),transform:"translate3d(".concat(b.scrollLeft,"px, 0, 0)")}}))};const qC=s.forwardRef(GC);var xc=bp()?window:null;function XC(t,e){var r=Ve(t)==="object"?t:{},n=r.offsetHeader,a=n===void 0?0:n,o=r.offsetSummary,l=o===void 0?0:o,i=r.offsetScroll,u=i===void 0?0:i,c=r.getContainer,d=c===void 0?function(){return xc}:c,f=d()||xc;return s.useMemo(function(){var v=!!t;return{isSticky:v,stickyClassName:v?"".concat(e,"-sticky-holder"):"",offsetHeader:a,offsetSummary:l,offsetScroll:u,container:f}},[u,a,l,e,f])}var ZC=["className","noData","columns","flattenColumns","colWidths","columCount","stickyOffsets","direction","fixHeader","stickyTopOffset","stickyBottomOffset","stickyClassName","onScroll","maxContentScroll","children"];function QC(t,e){return s.useMemo(function(){for(var r=[],n=0;n=0})},[o]),D=o[o.length-1],O={fixed:D?D.fixed:null,scrollbar:!0,onHeaderCell:function(){return{className:"".concat(S,"-cell-scrollbar")}}},$=s.useMemo(function(){return P?[].concat(De(a),[O]):a},[P,a]),F=s.useMemo(function(){return P?[].concat(De(o),[O]):o},[P,o]),N=s.useMemo(function(){var I=u.right,L=u.left;return p(p({},u),{},{left:c==="rtl"?[].concat(De(L.map(function(j){return j+P})),[0]):L,right:c==="rtl"?I:[].concat(De(I.map(function(j){return j+P})),[0]),isSticky:E})},[P,u,E]),R=QC(l,i);return s.createElement("div",{style:p({overflow:"hidden"},E?{top:f,bottom:v}:{}),ref:M,className:pe(r,B({},m,!!m))},s.createElement("table",{style:{tableLayout:"fixed",visibility:n||R?null:"hidden"}},(!n||!y||k)&&s.createElement(tm,{colWidths:R?[].concat(De(R),[P]):[],columCount:i+1,columns:F}),g(p(p({},b),{},{stickyOffsets:N,columns:$,flattenColumns:F}))))});hs.displayName="FixedHolder";var JC=[],e2={},Ei="rc-table-internal-hook",t2=s.memo(function(t){var e=t.children;return e},function(t,e){return ou(t.props,e.props)?t.pingLeft!==e.pingLeft||t.pingRight!==e.pingRight:!1});function ra(t){var e,r=t.prefixCls,n=t.className,a=t.rowClassName,o=t.style,l=t.data,i=t.rowKey,u=t.scroll,c=t.tableLayout,d=t.direction,f=t.title,v=t.footer,m=t.summary,h=t.id,y=t.showHeader,g=t.components,b=t.emptyText,x=t.onRow,S=t.onHeaderRow,w=t.internalHooks,E=t.transformColumns,P=t.internalRefs,T=t.sticky,M=l||JC,k=!!M.length,D=s.useCallback(function(st,ht){return zv(g||{},st)||ht},[g]),O=s.useMemo(function(){return typeof i=="function"?i:function(st){var ht=st&&st[i];return ht}},[i]),$=IC(t),F=$.expandIcon,N=$.expandedRowKeys,R=$.defaultExpandedRowKeys,I=$.defaultExpandAllRows,L=$.expandedRowRender,j=$.columnTitle,_=$.onExpand,A=$.onExpandedRowsChange,K=$.expandRowByClick,z=$.rowExpandable,V=$.expandIconColumnIndex,X=$.expandedRowClassName,W=$.childrenColumnName,Z=$.indentSize,U=F||UC,ae=W||"children",q=s.useMemo(function(){return L?"row":t.expandable&&w===Ei&&t.expandable.__PARENT_RENDER_ICON__||M.some(function(st){return st&&Ve(st)==="object"&&st[ae]})?"nest":!1},[!!L,M]),te=s.useState(function(){return R||(I?YC(M,O,ae):[])}),ue=ee(te,2),Y=ue[0],J=ue[1],Q=s.useMemo(function(){return new Set(N||Y||[])},[N,Y]),ie=s.useCallback(function(st){var ht=O(st,M.indexOf(st)),Nt,Zt=Q.has(ht);Zt?(Q.delete(ht),Nt=De(Q)):Nt=[].concat(De(Q),[ht]),J(Nt),_&&_(!Zt,st),A&&A(Nt)},[O,Q,M,_,A]),le=s.useState(0),ge=ee(le,2),Pe=ge[0],ve=ge[1],ce=AC(p(p(p({},t),$),{},{expandable:!!L,columnTitle:j,expandedKeys:Q,getRowKey:O,onTriggerExpand:ie,expandIcon:U,expandIconColumnIndex:V,direction:d}),w===Ei?E:null),fe=ee(ce,2),oe=fe[0],se=fe[1],he=s.useMemo(function(){return{columns:oe,flattenColumns:se}},[oe,se]),be=s.useRef(),Re=s.useRef(),Fe=s.useRef(),Ee=s.useRef(),ke=s.useRef(),we=s.useState(!1),Ge=ee(we,2),Qe=Ge[0],ct=Ge[1],dt=s.useState(!1),mt=ee(dt,2),We=mt[0],Oe=mt[1],ot=em(new Map),Je=ee(ot,2),Se=Je[0],He=Je[1],je=ul(se),ze=je.map(function(st){return Se.get(st)}),ye=s.useMemo(function(){return ze},[ze.join("_")]),de=VC(ye,se.length,d),Ce=u&&vs(u.y),Me=u&&vs(u.x)||!!$.fixed,Be=Me&&se.some(function(st){var ht=st.fixed;return ht}),nt=s.useRef(),Ne=XC(T,r),xe=Ne.isSticky,qe=Ne.offsetHeader,it=Ne.offsetSummary,ft=Ne.offsetScroll,At=Ne.stickyClassName,Kt=Ne.container,Rt=m==null?void 0:m(M),zt=(Ce||xe)&&s.isValidElement(Rt)&&Rt.type===dl&&Rt.props.fixed,et,tt,lt;Ce&&(tt={overflowY:"scroll",maxHeight:u.y}),Me&&(et={overflowX:"auto"},Ce||(tt={overflowY:"hidden"}),lt={width:(u==null?void 0:u.x)===!0?"auto":u==null?void 0:u.x,minWidth:"100%"});var ut=s.useCallback(function(st,ht){Vf(be.current)&&He(function(Nt){if(Nt.get(st)!==ht){var Zt=new Map(Nt);return Zt.set(st,ht),Zt}return Nt})},[]),wt=KC(null),St=ee(wt,2),Ae=St[0],Ue=St[1];function Ie(st,ht){ht&&(typeof ht=="function"?ht(st):ht.scrollLeft!==st&&(ht.scrollLeft=st))}var _e=function(ht){var Nt=ht.currentTarget,Zt=ht.scrollLeft,Ha=d==="rtl",cn=typeof Zt=="number"?Zt:Nt.scrollLeft,mr=Nt||e2;if(!Ue()||Ue()===mr){var hr;Ae(mr),Ie(cn,Re.current),Ie(cn,Fe.current),Ie(cn,ke.current),Ie(cn,(hr=nt.current)===null||hr===void 0?void 0:hr.setScrollLeft)}if(Nt){var Ar=Nt.scrollWidth,pr=Nt.clientWidth;if(Ar===pr){ct(!1),Oe(!1);return}Ha?(ct(-cn0)):(ct(cn>0),Oe(cni))return!1;var c=o.get(t),d=o.get(e);if(c&&d)return c==e&&d==t;var f=-1,v=!0,m=r&H2?new K2:void 0;for(o.set(t,e),o.set(e,t);++f0&&arguments[0]!==void 0?arguments[0]:[],e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=t.length,n=e.length;if(Math.abs(r-n)!==1)return{add:!1,key:null};function a(o,l){var i=new Map;o.forEach(function(c){i.set(c,!0)});var u=l.filter(function(c){return!i.has(c)});return u.length===1?u[0]:null}return r ").concat(e);return e}var pm=s.forwardRef(function(t,e){var r=t.prefixCls,n=t.data;t.selectable,t.checkable;var a=t.expandedKeys,o=t.selectedKeys,l=t.checkedKeys,i=t.loadedKeys,u=t.loadingKeys,c=t.halfCheckedKeys,d=t.keyEntities,f=t.disabled,v=t.dragging,m=t.dragOverNodeKey,h=t.dropPosition,y=t.motion,g=t.height,b=t.itemHeight,x=t.virtual,S=t.focusable,w=t.activeItem,E=t.focused,P=t.tabIndex,T=t.onKeyDown,M=t.onFocus,k=t.onBlur,D=t.onActiveChange,O=t.onListChangeStart,$=t.onListChangeEnd,F=Le(t,j4),N=s.useRef(null),R=s.useRef(null);s.useImperativeHandle(e,function(){return{scrollTo:function(fe){N.current.scrollTo(fe)},getIndentWidth:function(){return R.current.offsetWidth}}});var I=s.useState(a),L=ee(I,2),j=L[0],_=L[1],A=s.useState(n),K=ee(A,2),z=K[0],V=K[1],X=s.useState(n),W=ee(X,2),Z=W[0],U=W[1],ae=s.useState([]),q=ee(ae,2),te=q[0],ue=q[1],Y=s.useState(null),J=ee(Y,2),Q=J[0],ie=J[1],le=s.useRef(n);le.current=n;function ge(){var ce=le.current;V(ce),U(ce),ue([]),ie(null),$()}nl(function(){_(a);var ce=L4(j,a);if(ce.key!==null)if(ce.add){var fe=z.findIndex(function(Fe){var Ee=Fe.key;return Ee===ce.key}),oe=Yc(Hc(z,n,ce.key),x,g,b),se=z.slice();se.splice(fe+1,0,Uc),U(se),ue(oe),ie("show")}else{var he=n.findIndex(function(Fe){var Ee=Fe.key;return Ee===ce.key}),be=Yc(Hc(n,z,ce.key),x,g,b),Re=n.slice();Re.splice(he+1,0,Uc),U(Re),ue(be),ie("hide")}else z!==n&&(V(n),U(n))},[a,n]),s.useEffect(function(){v||ge()},[v]);var Pe=y?Z:n,ve={expandedKeys:a,selectedKeys:o,loadedKeys:i,loadingKeys:u,checkedKeys:l,halfCheckedKeys:c,dragOverNodeKey:m,dropPosition:h,keyEntities:d};return s.createElement(s.Fragment,null,E&&w&&s.createElement("span",{style:Wc,"aria-live":"assertive"},K4(w)),s.createElement("div",null,s.createElement("input",{style:Wc,disabled:S===!1||f,tabIndex:S!==!1?P:null,onKeyDown:T,onFocus:M,onBlur:k,value:"",onChange:A4,"aria-label":"for screen reader"})),s.createElement("div",{className:"".concat(r,"-treenode"),"aria-hidden":!0,style:{position:"absolute",pointerEvents:"none",visibility:"hidden",height:0,overflow:"hidden",border:0,padding:0}},s.createElement("div",{className:"".concat(r,"-indent")},s.createElement("div",{ref:R,className:"".concat(r,"-indent-unit")}))),s.createElement(Kp,ne({},F,{data:Pe,itemKey:Gc,height:g,fullHeight:!1,virtual:x,itemHeight:b,prefixCls:"".concat(r,"-list"),ref:N,onVisibleChange:function(fe,oe){var se=new Set(fe),he=oe.filter(function(be){return!se.has(be)});he.some(function(be){return Gc(be)===Jr})&&ge()}}),function(ce){var fe=ce.pos,oe=ne({},(vm(ce.data),ce.data)),se=ce.title,he=ce.key,be=ce.isStart,Re=ce.isEnd,Fe=Lo(he,fe);delete oe.key,delete oe.children;var Ee=lo(Fe,ve);return s.createElement(_4,ne({},oe,Ee,{title:se,active:!!w&&he===w.key,pos:fe,data:ce.data,isStart:be,isEnd:Re,motion:y,motionNodes:he===Jr?te:null,motionType:Q,onMotionStart:O,onMotionEnd:ge,treeNodeRequiredProps:ve,onMouseMove:function(){D(null)}}))}))});pm.displayName="NodeList";function Kn(t,e){if(!t)return[];var r=t.slice(),n=r.indexOf(e);return n>=0&&r.splice(n,1),r}function er(t,e){var r=(t||[]).slice();return r.indexOf(e)===-1&&r.push(e),r}function wu(t){return t.split("-")}function V4(t,e){var r=[],n=mn(e,t);function a(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];o.forEach(function(l){var i=l.key,u=l.children;r.push(i),a(u)})}return a(n.children),r}function z4(t){if(t.parent){var e=wu(t.pos);return Number(e[e.length-1])===t.parent.children.length-1}return!1}function B4(t){var e=wu(t.pos);return Number(e[e.length-1])===0}function qc(t,e,r,n,a,o,l,i,u,c){var d,f=t.clientX,v=t.clientY,m=t.target.getBoundingClientRect(),h=m.top,y=m.height,g=(c==="rtl"?-1:1)*(((a==null?void 0:a.x)||0)-f),b=(g-12)/n,x=mn(i,r.props.eventKey);if(v-1.5?o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1:o({dragNode:$,dropNode:F,dropPosition:0})?k=0:o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1:o({dragNode:$,dropNode:F,dropPosition:1})?k=1:N=!1,{dropPosition:k,dropLevelOffset:D,dropTargetKey:x.key,dropTargetPos:x.pos,dragOverNodeKey:M,dropContainerKey:k===0?null:((d=x.parent)===null||d===void 0?void 0:d.key)||null,dropAllowed:N}}function Xc(t,e){if(t){var r=e.multiple;return r?t.slice():t.length?[t[0]]:t}}function jl(t){if(!t)return null;var e;if(Array.isArray(t))e={checkedKeys:t,halfCheckedKeys:void 0};else if(Ve(t)==="object")e={checkedKeys:t.checked||void 0,halfCheckedKeys:t.halfChecked||void 0};else return rn(!1,"`checkedKeys` is not an array or an object"),null;return e}function Ss(t,e){var r=new Set;function n(a){if(!r.has(a)){var o=mn(e,a);if(o){r.add(a);var l=o.parent,i=o.node;i.disabled||l&&n(l.key)}}}return(t||[]).forEach(function(a){n(a)}),De(r)}var H4=10,gl=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;l2&&arguments[2]!==void 0?arguments[2]:!1,f=n.state,v=f.dragChildrenKeys,m=f.dropPosition,h=f.dropTargetKey,y=f.dropTargetPos,g=f.dropAllowed;if(g){var b=n.props.onDrop;if(n.setState({dragOverNodeKey:null}),n.cleanDragState(),h!==null){var x=p(p({},lo(h,n.getTreeNodeRequiredProps())),{},{active:((c=n.getActiveItem())===null||c===void 0?void 0:c.key)===h,data:mn(n.state.keyEntities,h).node}),S=v.indexOf(h)!==-1;rn(!S,"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.");var w=wu(y),E={event:i,node:Wt(x),dragNode:n.dragNode?Wt(n.dragNode.props):null,dragNodesKeys:[n.dragNode.props.eventKey].concat(v),dropToGap:m!==0,dropPosition:m+Number(w[w.length-1])};d||b==null||b(E),n.dragNode=null}}},n.cleanDragState=function(){var i=n.state.draggingNodeKey;i!==null&&n.setState({draggingNodeKey:null,dropPosition:null,dropContainerKey:null,dropTargetKey:null,dropLevelOffset:null,dropAllowed:!0,dragOverNodeKey:null}),n.dragStartMousePosition=null,n.currentMouseOverDroppableNodeKey=null},n.triggerExpandActionExpand=function(i,u){var c=n.state,d=c.expandedKeys,f=c.flattenNodes,v=u.expanded,m=u.key,h=u.isLeaf;if(!(h||i.shiftKey||i.metaKey||i.ctrlKey)){var y=f.filter(function(b){return b.key===m})[0],g=Wt(p(p({},lo(m,n.getTreeNodeRequiredProps())),{},{data:y.data}));n.setExpandedKeys(v?Kn(d,m):er(d,m)),n.onNodeExpand(i,g)}},n.onNodeClick=function(i,u){var c=n.props,d=c.onClick,f=c.expandAction;f==="click"&&n.triggerExpandActionExpand(i,u),d==null||d(i,u)},n.onNodeDoubleClick=function(i,u){var c=n.props,d=c.onDoubleClick,f=c.expandAction;f==="doubleClick"&&n.triggerExpandActionExpand(i,u),d==null||d(i,u)},n.onNodeSelect=function(i,u){var c=n.state.selectedKeys,d=n.state,f=d.keyEntities,v=d.fieldNames,m=n.props,h=m.onSelect,y=m.multiple,g=u.selected,b=u[v.key],x=!g;x?y?c=er(c,b):c=[b]:c=Kn(c,b);var S=c.map(function(w){var E=mn(f,w);return E?E.node:null}).filter(function(w){return w});n.setUncontrolledState({selectedKeys:c}),h==null||h(c,{event:"select",selected:x,node:u,selectedNodes:S,nativeEvent:i.nativeEvent})},n.onNodeCheck=function(i,u,c){var d=n.state,f=d.keyEntities,v=d.checkedKeys,m=d.halfCheckedKeys,h=n.props,y=h.checkStrictly,g=h.onCheck,b=u.key,x,S={event:"check",node:u,checked:c,nativeEvent:i.nativeEvent};if(y){var w=c?er(v,b):Kn(v,b),E=Kn(m,b);x={checked:w,halfChecked:E},S.checkedNodes=w.map(function(O){return mn(f,O)}).filter(function(O){return O}).map(function(O){return O.node}),n.setUncontrolledState({checkedKeys:w})}else{var P=Pn([].concat(De(v),[b]),!0,f),T=P.checkedKeys,M=P.halfCheckedKeys;if(!c){var k=new Set(T);k.delete(b);var D=Pn(Array.from(k),{checked:!1,halfCheckedKeys:M},f);T=D.checkedKeys,M=D.halfCheckedKeys}x=T,S.checkedNodes=[],S.checkedNodesPositions=[],S.halfCheckedKeys=M,T.forEach(function(O){var $=mn(f,O);if($){var F=$.node,N=$.pos;S.checkedNodes.push(F),S.checkedNodesPositions.push({node:F,pos:N})}}),n.setUncontrolledState({checkedKeys:T},!1,{halfCheckedKeys:M})}g==null||g(x,S)},n.onNodeLoad=function(i){var u=i.key,c=new Promise(function(d,f){n.setState(function(v){var m=v.loadedKeys,h=m===void 0?[]:m,y=v.loadingKeys,g=y===void 0?[]:y,b=n.props,x=b.loadData,S=b.onLoad;if(!x||h.indexOf(u)!==-1||g.indexOf(u)!==-1)return null;var w=x(i);return w.then(function(){var E=n.state.loadedKeys,P=er(E,u);S==null||S(P,{event:"load",node:i}),n.setUncontrolledState({loadedKeys:P}),n.setState(function(T){return{loadingKeys:Kn(T.loadingKeys,u)}}),d()}).catch(function(E){if(n.setState(function(T){return{loadingKeys:Kn(T.loadingKeys,u)}}),n.loadingRetryTimes[u]=(n.loadingRetryTimes[u]||0)+1,n.loadingRetryTimes[u]>=H4){var P=n.state.loadedKeys;rn(!1,"Retry for `loadData` many times but still failed. No more retry."),n.setUncontrolledState({loadedKeys:er(P,u)}),d()}f(E)}),{loadingKeys:er(g,u)}})});return c.catch(function(){}),c},n.onNodeMouseEnter=function(i,u){var c=n.props.onMouseEnter;c==null||c({event:i,node:u})},n.onNodeMouseLeave=function(i,u){var c=n.props.onMouseLeave;c==null||c({event:i,node:u})},n.onNodeContextMenu=function(i,u){var c=n.props.onRightClick;c&&(i.preventDefault(),c({event:i,node:u}))},n.onFocus=function(){var i=n.props.onFocus;n.setState({focused:!0});for(var u=arguments.length,c=new Array(u),d=0;d1&&arguments[1]!==void 0?arguments[1]:!1,c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;if(!n.destroyed){var d=!1,f=!0,v={};Object.keys(i).forEach(function(m){if(m in n.props){f=!1;return}d=!0,v[m]=i[m]}),d&&(!u||f)&&n.setState(p(p({},v),c))}},n.scrollTo=function(i){n.listRef.current.scrollTo(i)},n}return xn(r,[{key:"componentDidMount",value:function(){this.destroyed=!1,this.onUpdated()}},{key:"componentDidUpdate",value:function(){this.onUpdated()}},{key:"onUpdated",value:function(){var a=this.props.activeKey;a!==void 0&&a!==this.state.activeKey&&(this.setState({activeKey:a}),a!==null&&this.scrollTo({key:a}))}},{key:"componentWillUnmount",value:function(){window.removeEventListener("dragend",this.onWindowDragEnd),this.destroyed=!0}},{key:"resetDragState",value:function(){this.setState({dragOverNodeKey:null,dropPosition:null,dropLevelOffset:null,dropTargetKey:null,dropContainerKey:null,dropTargetPos:null,dropAllowed:!1})}},{key:"render",value:function(){var a,o=this.state,l=o.focused,i=o.flattenNodes,u=o.keyEntities,c=o.draggingNodeKey,d=o.activeKey,f=o.dropLevelOffset,v=o.dropContainerKey,m=o.dropTargetKey,h=o.dropPosition,y=o.dragOverNodeKey,g=o.indent,b=this.props,x=b.prefixCls,S=b.className,w=b.style,E=b.showLine,P=b.focusable,T=b.tabIndex,M=T===void 0?0:T,k=b.selectable,D=b.showIcon,O=b.icon,$=b.switcherIcon,F=b.draggable,N=b.checkable,R=b.checkStrictly,I=b.disabled,L=b.motion,j=b.loadData,_=b.filterTreeNode,A=b.height,K=b.itemHeight,z=b.virtual,V=b.titleRender,X=b.dropIndicatorRender,W=b.onContextMenu,Z=b.onScroll,U=b.direction,ae=b.rootClassName,q=b.rootStyle,te=au(this.props,{aria:!0,data:!0}),ue;return F&&(Ve(F)==="object"?ue=F:typeof F=="function"?ue={nodeDraggable:F}:ue={}),s.createElement(Su.Provider,{value:{prefixCls:x,selectable:k,showIcon:D,icon:O,switcherIcon:$,draggable:ue,draggingNodeKey:c,checkable:N,checkStrictly:R,disabled:I,keyEntities:u,dropLevelOffset:f,dropContainerKey:v,dropTargetKey:m,dropPosition:h,dragOverNodeKey:y,indent:g,direction:U,dropIndicatorRender:X,loadData:j,filterTreeNode:_,titleRender:V,onNodeClick:this.onNodeClick,onNodeDoubleClick:this.onNodeDoubleClick,onNodeExpand:this.onNodeExpand,onNodeSelect:this.onNodeSelect,onNodeCheck:this.onNodeCheck,onNodeLoad:this.onNodeLoad,onNodeMouseEnter:this.onNodeMouseEnter,onNodeMouseLeave:this.onNodeMouseLeave,onNodeContextMenu:this.onNodeContextMenu,onNodeDragStart:this.onNodeDragStart,onNodeDragEnter:this.onNodeDragEnter,onNodeDragOver:this.onNodeDragOver,onNodeDragLeave:this.onNodeDragLeave,onNodeDragEnd:this.onNodeDragEnd,onNodeDrop:this.onNodeDrop}},s.createElement("div",{role:"tree",className:pe(x,S,ae,(a={},B(a,"".concat(x,"-show-line"),E),B(a,"".concat(x,"-focused"),l),B(a,"".concat(x,"-active-focused"),d!==null),a)),style:q},s.createElement(pm,ne({ref:this.listRef,prefixCls:x,style:w,data:i,disabled:I,selectable:k,checkable:!!N,motion:L,dragging:c!==null,height:A,itemHeight:K,virtual:z,focusable:P,focused:l,tabIndex:M,activeItem:this.getActiveItem(),onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,onActiveChange:this.onActiveChange,onListChangeStart:this.onListChangeStart,onListChangeEnd:this.onListChangeEnd,onContextMenu:W,onScroll:Z},this.getTreeNodeRequiredProps(),te))))}}],[{key:"getDerivedStateFromProps",value:function(a,o){var l=o.prevProps,i={prevProps:a};function u(P){return!l&&P in a||l&&l[P]!==a[P]}var c,d=o.fieldNames;if(u("fieldNames")&&(d=Ti(a.fieldNames),i.fieldNames=d),u("treeData")?c=a.treeData:u("children")&&(rn(!1,"`children` of Tree is deprecated. Please use `treeData` instead."),c=Ev(a.children)),c){i.treeData=c;var f=jo(c,{fieldNames:d});i.keyEntities=p(B({},Jr,hm),f.keyEntities)}var v=i.keyEntities||o.keyEntities;if(u("expandedKeys")||l&&u("autoExpandParent"))i.expandedKeys=a.autoExpandParent||!l&&a.defaultExpandParent?Ss(a.expandedKeys,v):a.expandedKeys;else if(!l&&a.defaultExpandAll){var m=p({},v);delete m[Jr],i.expandedKeys=Object.keys(m).map(function(P){return m[P].key})}else!l&&a.defaultExpandedKeys&&(i.expandedKeys=a.autoExpandParent||a.defaultExpandParent?Ss(a.defaultExpandedKeys,v):a.defaultExpandedKeys);if(i.expandedKeys||delete i.expandedKeys,c||i.expandedKeys){var h=Il(c||o.treeData,i.expandedKeys||o.expandedKeys,d);i.flattenNodes=h}if(a.selectable&&(u("selectedKeys")?i.selectedKeys=Xc(a.selectedKeys,a):!l&&a.defaultSelectedKeys&&(i.selectedKeys=Xc(a.defaultSelectedKeys,a))),a.checkable){var y;if(u("checkedKeys")?y=jl(a.checkedKeys)||{}:!l&&a.defaultCheckedKeys?y=jl(a.defaultCheckedKeys)||{}:c&&(y=jl(a.checkedKeys)||{checkedKeys:o.checkedKeys,halfCheckedKeys:o.halfCheckedKeys}),y){var g=y,b=g.checkedKeys,x=b===void 0?[]:b,S=g.halfCheckedKeys,w=S===void 0?[]:S;if(!a.checkStrictly){var E=Pn(x,!0,v);x=E.checkedKeys,w=E.halfCheckedKeys}i.checkedKeys=x,i.halfCheckedKeys=w}}return u("loadedKeys")&&(i.loadedKeys=a.loadedKeys),i}}]),r}(s.Component);gl.defaultProps={prefixCls:"rc-tree",showLine:!1,showIcon:!0,selectable:!0,multiple:!1,checkable:!1,disabled:!1,checkStrictly:!1,draggable:!1,defaultExpandParent:!0,autoExpandParent:!1,defaultExpandAll:!1,defaultExpandedKeys:[],defaultCheckedKeys:[],defaultSelectedKeys:[],dropIndicatorRender:F4,allowDrop:function(){return!0},expandAction:!1};gl.TreeNode=Ca;var Zc=4;function W4(t){var e=t.dropPosition,r=t.dropLevelOffset,n=t.prefixCls,a=t.indent,o=t.direction,l=o===void 0?"ltr":o,i=l==="ltr"?"left":"right",u=l==="ltr"?"right":"left",c=B(B({},i,-r*a+Zc),u,0);switch(e){case-1:c.top=-3;break;case 1:c.bottom=-3;break;default:c.bottom=-3,c[i]=a+Zc;break}return G.createElement("div",{style:c,className:"".concat(n,"-drop-indicator")})}function gm(t,e,r,n){var a=n.isLeaf,o=n.expanded,l=n.loading;if(l)return s.createElement(Na,{className:"".concat(t,"-switcher-loading-icon")});var i;if(r&&Ve(r)==="object"&&(i=r.showLeafIcon),a){if(!r)return null;if(typeof i!="boolean"&&i){var u=typeof i=="function"?i(n):i,c="".concat(t,"-switcher-line-custom-icon");return Gu(u)?po(u,{className:pe(u.props.className||"",c)}):u}return i?s.createElement(tv,{className:"".concat(t,"-switcher-line-icon")}):s.createElement("span",{className:"".concat(t,"-switcher-leaf-line")})}var d="".concat(t,"-switcher-icon"),f=typeof e=="function"?e(n):e;return Gu(f)?po(f,{className:pe(f.props.className||"",d)}):f||(r?o?s.createElement(E0,{className:"".concat(t,"-switcher-line-icon")}):s.createElement(N0,{className:"".concat(t,"-switcher-line-icon")}):s.createElement(ig,{className:d}))}var U4=s.forwardRef(function(t,e){var r=s.useContext(Ut),n=r.getPrefixCls,a=r.direction,o=r.virtual,l=t.prefixCls,i=t.className,u=t.showIcon,c=u===void 0?!1:u,d=t.showLine,f=t.switcherIcon,v=t.blockNode,m=v===void 0?!1:v,h=t.children,y=t.checkable,g=y===void 0?!1:y,b=t.selectable,x=b===void 0?!0:b,S=t.draggable,w=t.motion,E=w===void 0?ne(ne({},Mp),{motionAppear:!1}):w,P=n("tree",l),T=ne(ne({},t),{checkable:g,selectable:x,showIcon:c,motion:E,blockNode:m,showLine:!!d,dropIndicatorRender:W4}),M=s.useMemo(function(){if(!S)return!1;var k={};switch(Ve(S)){case"function":k.nodeDraggable=S;break;case"object":k=ne({},S);break}return k.icon!==!1&&(k.icon=k.icon||s.createElement(C0,null)),k},[S]);return s.createElement(gl,ne({itemHeight:20,ref:e,virtual:o},T,{prefixCls:P,className:pe(B(B(B(B({},"".concat(P,"-icon-hide"),!c),"".concat(P,"-block-node"),m),"".concat(P,"-unselectable"),!x),"".concat(P,"-rtl"),a==="rtl"),i),direction:a,checkable:g&&s.createElement("span",{className:"".concat(P,"-checkbox-inner")}),selectable:x,switcherIcon:function(D){return gm(P,f,d,D)},draggable:M}),h)});const ym=U4;var tr;(function(t){t[t.None=0]="None",t[t.Start=1]="Start",t[t.End=2]="End"})(tr||(tr={}));function Pu(t,e){function r(n){var a=n.key,o=n.children;e(a,n)!==!1&&Pu(o||[],e)}t.forEach(r)}function Y4(t){var e=t.treeData,r=t.expandedKeys,n=t.startKey,a=t.endKey,o=[],l=tr.None;if(n&&n===a)return[n];if(!n||!a)return[];function i(u){return u===n||u===a}return Pu(e,function(u){if(l===tr.End)return!1;if(i(u)){if(o.push(u),l===tr.None)l=tr.Start;else if(l===tr.Start)return l=tr.End,!1}else l===tr.Start&&o.push(u);return r.includes(u)}),o}function Al(t,e){var r=De(e),n=[];return Pu(t,function(a,o){var l=r.indexOf(a);return l!==-1&&(n.push(o),r.splice(l,1)),!!r.length}),n}var Qc=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a0&&arguments[0]!==void 0?arguments[0]:{confirm:!1,closeDropdown:!1},we=ke.confirm,Ge=ke.closeDropdown;we&&ue([]),Ge&&$(!1),q(""),j(E?(P||[]).map(function(Qe){return String(Qe)}):[])},Q=function(){var ke=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{closeDropdown:!0},we=ke.closeDropdown;we&&$(!1),ue(L())},ie=function(ke){ke&&N!==void 0&&j(Kl(N)),$(ke),!ke&&!a.filterDropdown&&Y()},le=pe(B({},"".concat(o,"-menu-without-submenu"),!n3(a.filters||[]))),ge=function(ke){if(ke.target.checked){var we=ma(a==null?void 0:a.filters).map(function(Ge){return String(Ge)});j(we)}else j([])},Pe=function Ee(ke){var we=ke.filters;return(we||[]).map(function(Ge,Qe){var ct=String(Ge.value),dt={title:Ge.text,key:Ge.value!==void 0?ct:String(Qe)};return Ge.children&&(dt.children=Ee({filters:Ge.children})),dt})},ve=function Ee(ke){var we;return ne(ne({},ke),{text:ke.title,value:ke.key,children:((we=ke.children)===null||we===void 0?void 0:we.map(function(Ge){return Ee(Ge)}))||[]})},ce;if(typeof a.filterDropdown=="function")ce=a.filterDropdown({prefixCls:"".concat(o,"-custom"),setSelectedKeys:function(ke){return _({selectedKeys:ke})},selectedKeys:L(),confirm:Q,clearFilters:J,filters:a.filters,visible:F,close:function(){$(!1)}});else if(a.filterDropdown)ce=a.filterDropdown;else{var fe=L()||[],oe=function(){return(a.filters||[]).length===0?s.createElement(Ju,{image:Ju.PRESENTED_IMAGE_SIMPLE,description:h.filterEmptyText,imageStyle:{height:24},style:{margin:0,padding:"16px 0"}}):c==="tree"?s.createElement(s.Fragment,null,s.createElement(ed,{filterSearch:f,value:ae,onChange:te,tablePrefixCls:r,locale:h}),s.createElement("div",{className:"".concat(r,"-filter-dropdown-tree")},i?s.createElement(pa,{checked:fe.length===ma(a.filters).length,indeterminate:fe.length>0&&fe.length0?o:t}),v=Math.ceil((o||t)/f.pageSize);f.current>v&&(f.current=v||1);var m=function(g,b){d({current:g??1,pageSize:b||f.pageSize})},h=function(g,b){var x;e&&((x=e.onChange)===null||x===void 0||x.call(e,g,b)),m(g,b),r(g,b||(f==null?void 0:f.pageSize))};return e===!1?[{},function(){}]:[ne(ne({},f),{onChange:h}),m]}var Cr={},Ps="SELECT_ALL",Es="SELECT_INVERT",ks="SELECT_NONE",rd=[];function Em(t,e){var r=[];return(t||[]).forEach(function(n){r.push(n),n&&Ve(n)==="object"&&e in n&&(r=[].concat(De(r),De(Em(n[e],e))))}),r}function u3(t,e){var r=t||{},n=r.preserveSelectedRowKeys,a=r.selectedRowKeys,o=r.defaultSelectedRowKeys,l=r.getCheckboxProps,i=r.onChange,u=r.onSelect,c=r.onSelectAll,d=r.onSelectInvert,f=r.onSelectNone,v=r.onSelectMultiple,m=r.columnWidth,h=r.type,y=r.selections,g=r.fixed,b=r.renderCell,x=r.hideSelectAll,S=r.checkStrictly,w=S===void 0?!0:S,E=e.prefixCls,P=e.data,T=e.pageData,M=e.getRecordByKey,k=e.getRowKey,D=e.expandType,O=e.childrenColumnName,$=e.locale,F=e.getPopupContainer,N=xt(a||o||rd,{value:a}),R=ee(N,2),I=R[0],L=R[1],j=s.useRef(new Map),_=s.useCallback(function(ve){if(n){var ce=new Map;ve.forEach(function(fe){var oe=M(fe);!oe&&j.current.has(fe)&&(oe=j.current.get(fe)),ce.set(fe,oe)}),j.current=ce}},[M,n]);s.useEffect(function(){_(I)},[I]);var A=s.useMemo(function(){return w?{keyEntities:null}:jo(P,{externalGetKey:k,childrenPropName:O})},[P,k,w,O]),K=A.keyEntities,z=s.useMemo(function(){return Em(T,O)},[T,O]),V=s.useMemo(function(){var ve=new Map;return z.forEach(function(ce,fe){var oe=k(ce,fe),se=(l?l(ce):null)||{};ve.set(oe,se)}),ve},[z,k,l]),X=s.useCallback(function(ve){var ce;return!!(!((ce=V.get(k(ve)))===null||ce===void 0)&&ce.disabled)},[V,k]),W=s.useMemo(function(){if(w)return[I||[],[]];var ve=Pn(I,!0,K,X),ce=ve.checkedKeys,fe=ve.halfCheckedKeys;return[ce||[],fe]},[I,w,K,X]),Z=ee(W,2),U=Z[0],ae=Z[1],q=s.useMemo(function(){var ve=h==="radio"?U.slice(0,1):U;return new Set(ve)},[U,h]),te=s.useMemo(function(){return h==="radio"?new Set:new Set(ae)},[ae,h]),ue=s.useState(null),Y=ee(ue,2),J=Y[0],Q=Y[1];s.useEffect(function(){t||L(rd)},[!!t]);var ie=s.useCallback(function(ve,ce){var fe,oe;_(ve),n?(fe=ve,oe=ve.map(function(se){return j.current.get(se)})):(fe=[],oe=[],ve.forEach(function(se){var he=M(se);he!==void 0&&(fe.push(se),oe.push(he))})),L(fe),i==null||i(fe,oe,{type:ce})},[L,M,i,n]),le=s.useCallback(function(ve,ce,fe,oe){if(u){var se=fe.map(function(he){return M(he)});u(M(ve),ce,se,oe)}ie(fe,"single")},[u,M,ie]),ge=s.useMemo(function(){if(!y||x)return null;var ve=y===!0?[Ps,Es,ks]:y;return ve.map(function(ce){return ce===Ps?{key:"all",text:$.selectionAll,onSelect:function(){ie(P.map(function(oe,se){return k(oe,se)}).filter(function(oe){var se=V.get(oe);return!(se!=null&&se.disabled)||q.has(oe)}),"all")}}:ce===Es?{key:"invert",text:$.selectInvert,onSelect:function(){var oe=new Set(q);T.forEach(function(he,be){var Re=k(he,be),Fe=V.get(Re);Fe!=null&&Fe.disabled||(oe.has(Re)?oe.delete(Re):oe.add(Re))});var se=Array.from(oe);d&&d(se),ie(se,"invert")}}:ce===ks?{key:"none",text:$.selectNone,onSelect:function(){f==null||f(),ie(Array.from(q).filter(function(oe){var se=V.get(oe);return se==null?void 0:se.disabled}),"none")}}:ce}).map(function(ce){return ne(ne({},ce),{onSelect:function(){for(var oe,se,he=arguments.length,be=new Array(he),Re=0;Re2&&arguments[2]!==void 0?arguments[2]:!1,at=ne(ne({},fe),Ue);_e&&(fe.resetPagination(),at.pagination.current&&(at.pagination.current=1),c&&c.onChange&&c.onChange(1,at.pagination.pageSize)),k&&k.scrollToFirstRowOnChange!==!1&&le.body.current&&M1(0,{getContainer:function(){return le.body.current}}),b==null||b(at.pagination,at.filters,at.sorter,{currentDataSource:nd(Fs(U,at.sorterStates,Q),at.filterStates),action:Ie})},se=function(Ue,Ie){oe({sorter:Ue,sorterStates:Ie},"sort",!1)},he=d3({prefixCls:te,mergedColumns:L,onSorterChange:se,sortDirections:D||["ascend","descend"],tableLocale:Z,showSorterTooltip:F}),be=ee(he,4),Re=be[0],Fe=be[1],Ee=be[2],ke=be[3],we=s.useMemo(function(){return Fs(U,Fe,Q)},[U,Fe]);fe.sorter=ke(),fe.sorterStates=Fe;var Ge=function(Ue,Ie){oe({filters:Ue,filterStates:Ie},"filter",!0)},Qe=a3({prefixCls:te,locale:Z,dropdownPrefixCls:ue,mergedColumns:L,onFilterChange:Ge,getPopupContainer:x}),ct=ee(Qe,3),dt=ct[0],mt=ct[1],We=ct[2],Oe=nd(we,mt);fe.filters=We,fe.filterStates=mt;var ot=s.useMemo(function(){var Ae={};return Object.keys(We).forEach(function(Ue){We[Ue]!==null&&(Ae[Ue]=We[Ue])}),ne(ne({},Ee),{filters:Ae})},[Ee,We]),Je=f3(ot),Se=ee(Je,1),He=Se[0],je=function(Ue,Ie){oe({pagination:ne(ne({},fe.pagination),{current:Ue,pageSize:Ie})},"paginate")},ze=s3(Oe.length,c,je),ye=ee(ze,2),de=ye[0],Ce=ye[1];fe.pagination=c===!1?{}:i3(c,de),fe.resetPagination=Ce;var Me=s.useMemo(function(){if(c===!1||!de.pageSize)return Oe;var Ae=de.current,Ue=Ae===void 0?1:Ae,Ie=de.total,_e=de.pageSize,at=_e===void 0?Pm:_e;return Oe.lengthat?Oe.slice((Ue-1)*at,Ue*at):Oe:Oe.slice((Ue-1)*at,Ue*at)},[!!c,Oe,de&&de.current,de&&de.pageSize,de&&de.total]),Be=u3(d,{prefixCls:te,data:Oe,pageData:Me,getRowKey:ge,getRecordByKey:ce,expandType:ie,childrenColumnName:Q,locale:Z,getPopupContainer:x}),nt=ee(Be,2),Ne=nt[0],xe=nt[1],qe=function(Ue,Ie,_e){var at;return typeof m=="function"?at=pe(m(Ue,Ie,_e)):at=pe(m),pe(B({},"".concat(te,"-row-selected"),xe.has(ge(Ue,Ie))),at)};Y.__PARENT_RENDER_ICON__=Y.expandIcon,Y.expandIcon=Y.expandIcon||w||a2(Z),ie==="nest"&&Y.expandIconColumnIndex===void 0?Y.expandIconColumnIndex=d?1:0:Y.expandIconColumnIndex>0&&d&&(Y.expandIconColumnIndex-=1),typeof Y.indentSize!="number"&&(Y.indentSize=typeof M=="number"?M:15);var it=s.useCallback(function(Ae){return He(Ne(dt(Re(Ae))))},[Re,dt,Ne]),ft,At;if(c!==!1&&(de!=null&&de.total)){var Kt;de.size?Kt=de.size:Kt=W==="small"||W==="middle"?"small":void 0;var Rt=function(Ue){return s.createElement(Yb,ne({},de,{className:pe("".concat(te,"-pagination ").concat(te,"-pagination-").concat(Ue),de.className),size:Kt}))},zt=X==="rtl"?"left":"right",et=de.position;if(et!==null&&Array.isArray(et)){var tt=et.find(function(Ae){return Ae.includes("top")}),lt=et.find(function(Ae){return Ae.includes("bottom")}),ut=et.every(function(Ae){return"".concat(Ae)==="none"});!tt&&!lt&&!ut&&(At=Rt(zt)),tt&&(ft=Rt(tt.toLowerCase().replace("top",""))),lt&&(At=Rt(lt.toLowerCase().replace("bottom","")))}else At=Rt(zt)}var wt;typeof S=="boolean"?wt={spinning:S}:Ve(S)==="object"&&(wt=ne({spinning:!0},S));var St=pe("".concat(te,"-wrapper"),B({},"".concat(te,"-wrapper-rtl"),X==="rtl"),n);return s.createElement("div",{ref:e,className:St,style:a},s.createElement(Fr,ne({spinning:!1},wt),ft,s.createElement(ra,ne({},j,{columns:L,direction:X,expandable:Y,prefixCls:te,className:pe(B(B(B(B({},"".concat(te,"-middle"),W==="middle"),"".concat(te,"-small"),W==="small"),"".concat(te,"-bordered"),l),"".concat(te,"-empty"),U.length===0)),data:Me,rowKey:ge,rowClassName:qe,emptyText:O&&O.emptyText||(V||lu)("Table"),internalHooks:Ei,internalRefs:le,transformColumns:it})),At))}var h3=s.forwardRef(m3),sr=h3;sr.SELECTION_COLUMN=Cr;sr.EXPAND_COLUMN=ra.EXPAND_COLUMN;sr.SELECTION_ALL=Ps;sr.SELECTION_INVERT=Es;sr.SELECTION_NONE=ks;sr.Column=n2;sr.ColumnGroup=r2;sr.Summary=rm;const xa=sr;var p3=globalThis&&globalThis.__rest||function(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a1&&arguments[1]!==void 0?arguments[1]:"0",v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return d.map(function(m,h){var y="".concat(f,"-").concat(h),g=m[o.value],b=r.includes(g),x=c(m[o.children]||[],y,b),S=s.createElement(ku,m,x.map(function(E){return E.node}));if(e===g&&(l=S),b){var w={pos:y,node:S,children:x};return v||i.push(w),w}return null}).filter(function(m){return m})}i||(i=[],c(n),i.sort(function(d,f){var v=d.node.props.value,m=f.node.props.value,h=r.indexOf(v),y=r.indexOf(m);return h-y}))}Object.defineProperty(t,"triggerNode",{get:function(){return rn(!1,"`triggerNode` is deprecated. Please consider decoupling data with node."),u(),l}}),Object.defineProperty(t,"allCheckedNodes",{get:function(){return rn(!1,"`allCheckedNodes` is deprecated. Please consider decoupling data with node."),u(),a?i:i.map(function(d){var f=d.node;return f})}})}function R3(t,e){var r=e.id,n=e.pId,a=e.rootPId,o={},l=[],i=t.map(function(u){var c=p({},u),d=c[r];return o[d]=c,c.key=c.key||d,c});return i.forEach(function(u){var c=u[n],d=o[c];d&&(d.children=d.children||[],d.children.push(u)),(c===a||!d&&a===null)&&l.push(u)}),l}function F3(t,e,r){return s.useMemo(function(){return t?r?R3(t,p({id:"id",pId:"pId",rootPId:null},r!==!0?r:{})):t:Om(e)},[e,r,t])}const M3=function(t){var e=s.useRef({valueLabels:new Map});return s.useMemo(function(){var r=e.current.valueLabels,n=new Map,a=t.map(function(o){var l,i=o.value,u=(l=o.label)!==null&&l!==void 0?l:r.get(i);return n.set(i,u),p(p({},o),{},{label:u})});return e.current.valueLabels=n,[a]},[t])};function ud(t){var e=s.useRef();e.current=t;var r=s.useCallback(function(){return e.current.apply(e,arguments)},[]);return r}const N3=function(t,e){return s.useMemo(function(){var r=jo(t,{fieldNames:e,initWrapper:function(a){return p(p({},a),{},{valueEntities:new Map})},processEntity:function(a,o){var l=a.node[e.value];o.valueEntities.set(l,a)}});return r},[t,e])},T3=function(t,e,r,n){return s.useMemo(function(){var a=t.map(function(u){var c=u.value;return c}),o=e.map(function(u){var c=u.value;return c}),l=a.filter(function(u){return!n[u]});if(r){var i=Pn(a,!0,n);a=i.checkedKeys,o=i.halfCheckedKeys}return[Array.from(new Set([].concat(De(l),De(a)))),o]},[t,e,r,n])},$3=function(t,e,r){var n=r.treeNodeFilterProp,a=r.filterTreeNode,o=r.fieldNames,l=o.children;return s.useMemo(function(){if(!e||a===!1)return t;var i;if(typeof a=="function")i=a;else{var u=e.toUpperCase();i=function(f,v){var m=v[n];return String(m).toUpperCase().includes(u)}}function c(d){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return d.map(function(v){var m=v[l],h=f||i(e,Ns(v)),y=c(m||[],h);return h||y.length?p(p({},v),{},B({isLeaf:void 0},l,y)):null}).filter(function(v){return v})}return c(t)},[t,e,l,n,a])};var D3=["id","prefixCls","value","defaultValue","onChange","onSelect","onDeselect","searchValue","inputValue","onSearch","autoClearSearchValue","filterTreeNode","treeNodeFilterProp","showCheckedStrategy","treeNodeLabelProp","multiple","treeCheckable","treeCheckStrictly","labelInValue","fieldNames","treeDataSimpleMode","treeData","children","loadData","treeLoadedKeys","onTreeLoad","treeDefaultExpandAll","treeExpandedKeys","treeDefaultExpandedKeys","onTreeExpand","treeExpandAction","virtual","listHeight","listItemHeight","onDropdownVisibleChange","dropdownMatchSelectWidth","treeLine","treeIcon","showTreeIcon","switcherIcon","treeMotion"];function O3(t){return!t||Ve(t)!=="object"}var I3=s.forwardRef(function(t,e){var r=t.id,n=t.prefixCls,a=n===void 0?"rc-tree-select":n,o=t.value,l=t.defaultValue,i=t.onChange,u=t.onSelect,c=t.onDeselect,d=t.searchValue,f=t.inputValue,v=t.onSearch,m=t.autoClearSearchValue,h=m===void 0?!0:m,y=t.filterTreeNode,g=t.treeNodeFilterProp,b=g===void 0?"value":g,x=t.showCheckedStrategy,S=x===void 0?yl:x,w=t.treeNodeLabelProp,E=t.multiple,P=t.treeCheckable,T=t.treeCheckStrictly,M=t.labelInValue,k=t.fieldNames,D=t.treeDataSimpleMode,O=t.treeData,$=t.children,F=t.loadData,N=t.treeLoadedKeys,R=t.onTreeLoad,I=t.treeDefaultExpandAll,L=t.treeExpandedKeys,j=t.treeDefaultExpandedKeys,_=t.onTreeExpand,A=t.treeExpandAction,K=t.virtual,z=t.listHeight,V=z===void 0?200:z,X=t.listItemHeight,W=X===void 0?20:X,Z=t.onDropdownVisibleChange,U=t.dropdownMatchSelectWidth,ae=U===void 0?!0:U,q=t.treeLine,te=t.treeIcon,ue=t.showTreeIcon,Y=t.switcherIcon,J=t.treeMotion,Q=Le(t,D3),ie=Gf(r),le=P&&!T,ge=P||T,Pe=T||M,ve=ge||E,ce=xt(l,{value:o}),fe=ee(ce,2),oe=fe[0],se=fe[1],he=s.useMemo(function(){return x3(k)},[JSON.stringify(k)]),be=xt("",{value:d!==void 0?d:f,postState:function(tt){return tt||""}}),Re=ee(be,2),Fe=Re[0],Ee=Re[1],ke=function(tt){Ee(tt),v==null||v(tt)},we=F3(O,$,D),Ge=N3(we,he),Qe=Ge.keyEntities,ct=Ge.valueEntities,dt=s.useCallback(function(et){var tt=[],lt=[];return et.forEach(function(ut){ct.has(ut)?lt.push(ut):tt.push(ut)}),{missingRawValues:tt,existRawValues:lt}},[ct]),mt=$3(we,Fe,{fieldNames:he,treeNodeFilterProp:b,filterTreeNode:y}),We=s.useCallback(function(et){if(et){if(w)return et[w];for(var tt=he._title,lt=0;lt=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(c){throw c},f:a}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o,l=!0,i=!1;return{s:function(){r=r.call(t)},n:function(){var c=r.next();return l=c.done,c},e:function(c){i=!0,o=c},f:function(){try{l||r.return==null||r.return()}finally{if(i)throw o}}}}var K3={locale:"zh_CN",today:"今天",now:"此刻",backToToday:"返回今天",ok:"确定",timeSelect:"选择时间",dateSelect:"选择日期",weekSelect:"选择周",clear:"清除",month:"月",year:"年",previousMonth:"上个月 (翻页上键)",nextMonth:"下个月 (翻页下键)",monthSelect:"选择月份",yearSelect:"选择年份",decadeSelect:"选择年代",yearFormat:"YYYY年",dayFormat:"D日",dateFormat:"YYYY年M月D日",dateTimeFormat:"YYYY年M月D日 HH时mm分ss秒",previousYear:"上一年 (Control键加左方向键)",nextYear:"下一年 (Control键加右方向键)",previousDecade:"上一年代",nextDecade:"下一年代",previousCentury:"上一世纪",nextCentury:"下一世纪"},V3={placeholder:"请选择时间",rangePlaceholder:["开始时间","结束时间"]};const Im=V3;var _m={lang:ne({placeholder:"请选择日期",yearPlaceholder:"请选择年份",quarterPlaceholder:"请选择季度",monthPlaceholder:"请选择月份",weekPlaceholder:"请选择周",rangePlaceholder:["开始日期","结束日期"],rangeYearPlaceholder:["开始年份","结束年份"],rangeMonthPlaceholder:["开始月份","结束月份"],rangeQuarterPlaceholder:["开始季度","结束季度"],rangeWeekPlaceholder:["开始周","结束周"]},K3),timePickerLocale:ne({},Im)};_m.lang.ok="确定";const cd=_m;var fn="${label}不是一个有效的${type}",Lm={locale:"zh-cn",Pagination:Ov,DatePicker:cd,TimePicker:Im,Calendar:cd,global:{placeholder:"请选择"},Table:{filterTitle:"筛选",filterConfirm:"确定",filterReset:"重置",filterEmptyText:"无筛选项",filterCheckall:"全选",filterSearchPlaceholder:"在筛选项中搜索",selectAll:"全选当页",selectInvert:"反选当页",selectNone:"清空所有",selectionAll:"全选所有",sortTitle:"排序",expand:"展开行",collapse:"关闭行",triggerDesc:"点击降序",triggerAsc:"点击升序",cancelSort:"取消排序"},Modal:{okText:"确定",cancelText:"取消",justOkText:"知道了"},Popconfirm:{cancelText:"取消",okText:"确定"},Transfer:{titles:["",""],searchPlaceholder:"请输入搜索内容",itemUnit:"项",itemsUnit:"项",remove:"删除",selectCurrent:"全选当页",removeCurrent:"删除当页",selectAll:"全选所有",removeAll:"删除全部",selectInvert:"反选当页"},Upload:{uploading:"文件上传中",removeFile:"删除文件",uploadError:"上传错误",previewFile:"预览文件",downloadFile:"下载文件"},Empty:{description:"暂无数据"},Icon:{icon:"图标"},Text:{edit:"编辑",copy:"复制",copied:"复制成功",expand:"展开"},PageHeader:{back:"返回"},Form:{optional:"(可选)",defaultValidateMessages:{default:"字段验证错误${label}",required:"请输入${label}",enum:"${label}必须是其中一个[${enum}]",whitespace:"${label}不能为空字符",date:{format:"${label}日期格式无效",parse:"${label}不能转换为日期",invalid:"${label}是一个无效日期"},types:{string:fn,method:fn,array:fn,object:fn,number:fn,date:fn,boolean:fn,integer:fn,float:fn,regexp:fn,email:fn,url:fn,hex:fn},string:{len:"${label}须为${len}个字符",min:"${label}最少${min}个字符",max:"${label}最多${max}个字符",range:"${label}须在${min}-${max}字符之间"},number:{len:"${label}必须等于${len}",min:"${label}最小值为${min}",max:"${label}最大值为${max}",range:"${label}须在${min}-${max}之间"},array:{len:"须为${len}个${label}",min:"最少${min}个${label}",max:"最多${max}个${label}",range:"${label}数量须在${min}-${max}之间"},pattern:{mismatch:"${label}与模式不匹配${pattern}"}}},Image:{preview:"预览"}};/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */function jm(t,e,r,n){function a(o){return o instanceof r?o:new r(function(l){l(o)})}return new(r||(r=Promise))(function(o,l){function i(d){try{c(n.next(d))}catch(f){l(f)}}function u(d){try{c(n.throw(d))}catch(f){l(f)}}function c(d){d.done?o(d.value):a(d.value).then(i,u)}c((n=n.apply(t,e||[])).next())})}function Am(t,e){var r={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},n,a,o,l;return l={next:i(0),throw:i(1),return:i(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function i(c){return function(d){return u([c,d])}}function u(c){if(n)throw new TypeError("Generator is already executing.");for(;r;)try{if(n=1,a&&(o=c[0]&2?a.return:c[0]?a.throw||((o=a.return)&&o.call(a),0):a.next)&&!(o=o.call(a,c[1])).done)return o;switch(a=0,o&&(c=[c[0]&2,o.value]),c[0]){case 0:case 1:o=c;break;case 4:return r.label++,{value:c[1],done:!1};case 5:r.label++,a=c[1],c=[0];continue;case 7:c=r.ops.pop(),r.trys.pop();continue;default:if(o=r.trys,!(o=o.length>0&&o[o.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]o||setTimeout(n,i,a)},Ym=Um(new Map),Gm=Ym[0],nw=Ym[1],qm=or({onLoadingSlow:Wn,onSuccess:Wn,onError:Wn,onErrorRetry:tw,onDiscarded:Wn,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:dd?1e4:5e3,focusThrottleInterval:5*1e3,dedupingInterval:2*1e3,loadingTimeout:dd?5e3:3e3,compare:function(t,e){return bo(t)==bo(e)},isPaused:function(){return!1},cache:Gm,mutate:nw,fallback:{}},Z3),Xm=function(t,e){var r=or(t,e);if(e){var n=t.use,a=t.fallback,o=e.use,l=e.fallback;n&&o&&(r.use=n.concat(o)),a&&l&&(r.fallback=or(a,l))}return r},Is=s.createContext({}),rw=function(t){var e=t.value,r=Xm(s.useContext(Is),e),n=e&&e.provider,a=s.useState(function(){return n?Um(n(r.cache||Gm),e):nn})[0];return a&&(r.cache=a[0],r.mutate=a[1]),fo(function(){return a?a[2]:nn},[]),s.createElement(Is.Provider,or(t,{value:r}))},aw=function(t,e){var r=s.useState({})[1],n=s.useRef(t),a=s.useRef({data:!1,error:!1,isValidating:!1}),o=s.useCallback(function(l){var i=!1,u=n.current;for(var c in l){var d=c;u[d]!==l[d]&&(u[d]=l[d],a.current[d]&&(i=!0))}i&&!e.current&&r({})},[]);return fo(function(){n.current=t}),[n,a.current,o]},ow=function(t){return wr(t[1])?[t[0],t[1],t[2]||{}]:[t[0],null,(t[1]===null?t[2]:t[1])||{}]},Tu=function(){return or(qm,s.useContext(Is))},iw=function(t){return function(){for(var r=[],n=0;n0;)d=f[v](d);return d(l,i||c.fetcher,c)}},vd=function(t,e,r){var n=e[t]||(e[t]=[]);return n.push(r),function(){var a=n.indexOf(r);a>=0&&(n[a]=n[n.length-1],n.pop())}},Bl={dedupe:!0},lw=function(t,e,r){var n=r.cache,a=r.compare,o=r.fallbackData,l=r.suspense,i=r.revalidateOnMount,u=r.refreshInterval,c=r.refreshWhenHidden,d=r.refreshWhenOffline,f=Yr.get(n),v=f[0],m=f[1],h=f[2],y=f[3],g=Vm(t),b=g[0],x=g[1],S=g[2],w=s.useRef(!1),E=s.useRef(!1),P=s.useRef(b),T=s.useRef(e),M=s.useRef(r),k=function(){return M.current},D=function(){return k().isVisible()&&k().isOnline()},O=function(U){return n.set(S,or(n.get(S),U))},$=n.get(b),F=ln(o)?r.fallback[b]:o,N=ln($)?F:$,R=n.get(S)||{},I=R.error,L=!w.current,j=function(){return L&&!ln(i)?i:k().isPaused()?!1:l?ln(N)?!1:r.revalidateIfStale:ln(N)||r.revalidateIfStale},_=function(){return!b||!e?!1:R.isValidating?!0:L&&j()},A=_(),K=aw({data:N,error:I,isValidating:A},E),z=K[0],V=K[1],X=K[2],W=s.useCallback(function(U){return jm(void 0,void 0,void 0,function(){var ae,q,te,ue,Y,J,Q,ie,le,ge,Pe,ve,ce;return Am(this,function(fe){switch(fe.label){case 0:if(ae=T.current,!b||!ae||E.current||k().isPaused())return[2,!1];ue=!0,Y=U||{},J=!y[b]||!Y.dedupe,Q=function(){return!E.current&&b===P.current&&w.current},ie=function(){var oe=y[b];oe&&oe[1]===te&&delete y[b]},le={isValidating:!1},ge=function(){O({isValidating:!1}),Q()&&X(le)},O({isValidating:!0}),X({isValidating:!0}),fe.label=1;case 1:return fe.trys.push([1,3,,4]),J&&(vo(n,b,z.current.data,z.current.error,!0),r.loadingTimeout&&!n.get(b)&&setTimeout(function(){ue&&Q()&&k().onLoadingSlow(b,r)},r.loadingTimeout),y[b]=[ae.apply(void 0,x),Os()]),ce=y[b],q=ce[0],te=ce[1],[4,q];case 2:return q=fe.sent(),J&&setTimeout(ie,r.dedupingInterval),!y[b]||y[b][1]!==te?(J&&Q()&&k().onDiscarded(b),[2,!1]):(O({error:nn}),le.error=nn,Pe=h[b],!ln(Pe)&&(te<=Pe[0]||te<=Pe[1]||Pe[1]===0)?(ge(),J&&Q()&&k().onDiscarded(b),[2,!1]):(a(z.current.data,q)?le.data=z.current.data:le.data=q,a(n.get(b),q)||n.set(b,q),J&&Q()&&k().onSuccess(q,b,r),[3,4]));case 3:return ve=fe.sent(),ie(),k().isPaused()||(O({error:ve}),le.error=ve,J&&Q()&&(k().onError(ve,b,r),(typeof r.shouldRetryOnError=="boolean"&&r.shouldRetryOnError||wr(r.shouldRetryOnError)&&r.shouldRetryOnError(ve))&&D()&&k().onErrorRetry(ve,b,r,W,{retryCount:(Y.retryCount||0)+1,dedupe:!0}))),[3,4];case 4:return ue=!1,ge(),Q()&&J&&vo(n,b,le.data,le.error,!1),[2,!0]}})})},[b]),Z=s.useCallback(Wm.bind(nn,n,function(){return P.current}),[]);if(fo(function(){T.current=e,M.current=r}),fo(function(){if(b){var U=b!==P.current,ae=W.bind(nn,Bl),q=function(Q,ie,le){X(or({error:ie,isValidating:le},a(z.current.data,Q)?nn:{data:Q}))},te=0,ue=function(Q){if(Q==zm){var ie=Date.now();k().revalidateOnFocus&&ie>te&&D()&&(te=ie+k().focusThrottleInterval,ae())}else if(Q==Bm)k().revalidateOnReconnect&&D()&&ae();else if(Q==Hm)return W()},Y=vd(b,m,q),J=vd(b,v,ue);return E.current=!1,P.current=b,w.current=!0,U&&X({data:N,error:I,isValidating:A}),j()&&(ln(N)||bl?ae():J3(ae)),function(){E.current=!0,Y(),J()}}},[b,W]),fo(function(){var U;function ae(){var te=wr(u)?u(N):u;te&&U!==-1&&(U=setTimeout(q,te))}function q(){!z.current.error&&(c||k().isVisible())&&(d||k().isOnline())?W(Bl).then(ae):ae()}return ae(),function(){U&&(clearTimeout(U),U=-1)}},[u,c,d,W]),s.useDebugValue(N),l&&ln(N)&&b)throw T.current=e,M.current=r,E.current=!1,ln(I)?W(Bl):I;return{mutate:Z,get data(){return V.data=!0,N},get error(){return V.error=!0,I},get isValidating(){return V.isValidating=!0,A}}},Zm=co.defineProperty(rw,"default",{value:qm}),Qm=iw(lw);const sw={moneySymbol:"$",form:{lightFilter:{more:"المزيد",clear:"نظف",confirm:"تأكيد",itemUnit:"عناصر"}},tableForm:{search:"ابحث",reset:"إعادة تعيين",submit:"ارسال",collapsed:"مُقلص",expand:"مُوسع",inputPlaceholder:"الرجاء الإدخال",selectPlaceholder:"الرجاء الإختيار"},alert:{clear:"نظف",selected:"محدد",item:"عنصر"},pagination:{total:{range:" ",total:"من",item:"عناصر"}},tableToolBar:{leftPin:"ثبت على اليسار",rightPin:"ثبت على اليمين",noPin:"الغاء التثبيت",leftFixedTitle:"لصق على اليسار",rightFixedTitle:"لصق على اليمين",noFixedTitle:"إلغاء الإلصاق",reset:"إعادة تعيين",columnDisplay:"الأعمدة المعروضة",columnSetting:"الإعدادات",fullScreen:"وضع كامل الشاشة",exitFullScreen:"الخروج من وضع كامل الشاشة",reload:"تحديث",density:"الكثافة",densityDefault:"افتراضي",densityLarger:"أكبر",densityMiddle:"وسط",densitySmall:"مدمج"},stepsForm:{next:"التالي",prev:"السابق",submit:"أنهى"},loginForm:{submitText:"تسجيل الدخول"},editableTable:{action:{save:"أنقذ",cancel:"إلغاء الأمر",delete:"حذف",add:"إضافة صف من البيانات"}},switch:{open:"مفتوح",close:"غلق"}},uw={moneySymbol:"€",form:{lightFilter:{more:"Máis",clear:"Limpar",confirm:"Confirmar",itemUnit:"Elementos"}},tableForm:{search:"Cercar",reset:"Netejar",submit:"Enviar",collapsed:"Expandir",expand:"Col·lapsar",inputPlaceholder:"Introduïu valor",selectPlaceholder:"Seleccioneu valor"},alert:{clear:"Netejar",selected:"Seleccionat",item:"Article"},pagination:{total:{range:" ",total:"de",item:"articles"}},tableToolBar:{leftPin:"Pin a l'esquerra",rightPin:"Pin a la dreta",noPin:"Sense Pin",leftFixedTitle:"Fixat a l'esquerra",rightFixedTitle:"Fixat a la dreta",noFixedTitle:"Sense fixar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuració",fullScreen:"Pantalla Completa",exitFullScreen:"Sortir Pantalla Completa",reload:"Refrescar",density:"Densitat",densityDefault:"Per Defecte",densityLarger:"Llarg",densityMiddle:"Mitjà",densitySmall:"Compacte"},stepsForm:{next:"Següent",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Gardar",cancel:"Cancelar",delete:"Eliminar",add:"engadir unha fila de datos"}},switch:{open:"aberto",close:"pechar"}},cw={moneySymbol:"€",form:{lightFilter:{more:"Mehr",clear:"Zurücksetzen",confirm:"Bestätigen",itemUnit:"Einträge"}},tableForm:{search:"Suchen",reset:"Zurücksetzen",submit:"Absenden",collapsed:"Zeige mehr",expand:"Zeige weniger",inputPlaceholder:"Bitte eingeben",selectPlaceholder:"Bitte auswählen"},alert:{clear:"Zurücksetzen",selected:"Ausgewählt",item:"Eintrag"},pagination:{total:{range:" ",total:"von",item:"Einträgen"}},tableToolBar:{leftPin:"Links anheften",rightPin:"Rechts anheften",noPin:"Nicht angeheftet",leftFixedTitle:"Links fixiert",rightFixedTitle:"Rechts fixiert",noFixedTitle:"Nicht fixiert",reset:"Zurücksetzen",columnDisplay:"Angezeigte Reihen",columnSetting:"Einstellungen",fullScreen:"Vollbild",exitFullScreen:"Vollbild verlassen",reload:"Aktualisieren",density:"Abstand",densityDefault:"Standard",densityLarger:"Größer",densityMiddle:"Mittel",densitySmall:"Kompakt"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Anmelden"},editableTable:{action:{save:"Retten",cancel:"Abbrechen",delete:"Löschen",add:"Hinzufügen einer Datenzeile"}},switch:{open:"offen",close:"schließen"}},dw={moneySymbol:"£",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},fw={moneySymbol:"$",deleteThisLine:"Delete this line",copyThisLine:"Copy this line",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{onlyOneLineEditor:"Only one line can be edited",action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},vw={moneySymbol:"€",form:{lightFilter:{more:"Más",clear:"Limpiar",confirm:"Confirmar",itemUnit:"artículos"}},tableForm:{search:"Buscar",reset:"Limpiar",submit:"Submit",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Ingrese valor",selectPlaceholder:"Seleccione valor"},alert:{clear:"Limpiar",selected:"Seleccionado",item:"Articulo"},pagination:{total:{range:" ",total:"de",item:"artículos"}},tableToolBar:{leftPin:"Pin a la izquierda",rightPin:"Pin a la derecha",noPin:"Sin Pin",leftFixedTitle:"Fijado a la izquierda",rightFixedTitle:"Fijado a la derecha",noFixedTitle:"Sin Fijar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuración",fullScreen:"Pantalla Completa",exitFullScreen:"Salir Pantalla Completa",reload:"Refrescar",density:"Densidad",densityDefault:"Por Defecto",densityLarger:"Largo",densityMiddle:"Medio",densitySmall:"Compacto"},stepsForm:{next:"Siguiente",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Guardar",cancel:"Descartar",delete:"Borrar",add:"añadir una fila de datos"}},switch:{open:"abrir",close:"cerrar"}},mw={moneySymbol:"تومان",form:{lightFilter:{more:"بیشتر",clear:"پاک کردن",confirm:"تایید",itemUnit:"مورد"}},tableForm:{search:"جستجو",reset:"بازنشانی",submit:"تایید",collapsed:"نمایش بیشتر",expand:"نمایش کمتر",inputPlaceholder:"پیدا کنید",selectPlaceholder:"انتخاب کنید"},alert:{clear:"پاک سازی",selected:"انتخاب",item:"مورد"},pagination:{total:{range:" ",total:"از",item:"مورد"}},tableToolBar:{leftPin:"سنجاق به چپ",rightPin:"سنجاق به راست",noPin:"سنجاق نشده",leftFixedTitle:"ثابت شده در چپ",rightFixedTitle:"ثابت شده در راست",noFixedTitle:"شناور",reset:"بازنشانی",columnDisplay:"نمایش همه",columnSetting:"تنظیمات",fullScreen:"تمام صفحه",exitFullScreen:"خروج از حالت تمام صفحه",reload:"تازه سازی",density:"تراکم",densityDefault:"پیش فرض",densityLarger:"بزرگ",densityMiddle:"متوسط",densitySmall:"کوچک"},stepsForm:{next:"بعدی",prev:"قبلی",submit:"اتمام"},loginForm:{submitText:"ورود"},editableTable:{action:{save:"ذخیره",cancel:"لغو",delete:"حذف",add:"یک ردیف داده اضافه کنید"}},switch:{open:"باز",close:"نزدیک"}},hw={moneySymbol:"€",form:{lightFilter:{more:"Plus",clear:"Effacer",confirm:"Confirmer",itemUnit:"Items"}},tableForm:{search:"Rechercher",reset:"Réinitialiser",submit:"Envoyer",collapsed:"Agrandir",expand:"Réduire",inputPlaceholder:"Entrer une valeur",selectPlaceholder:"Sélectionner une valeur"},alert:{clear:"Réinitialiser",selected:"Sélectionné",item:"Item"},pagination:{total:{range:" ",total:"sur",item:"éléments"}},tableToolBar:{leftPin:"Épingler à gauche",rightPin:"Épingler à gauche",noPin:"Sans épingle",leftFixedTitle:"Fixer à gauche",rightFixedTitle:"Fixer à droite",noFixedTitle:"Non fixé",reset:"Réinitialiser",columnDisplay:"Affichage colonne",columnSetting:"Réglages",fullScreen:"Plein écran",exitFullScreen:"Quitter Plein écran",reload:"Rafraichir",density:"Densité",densityDefault:"Par défaut",densityLarger:"Larger",densityMiddle:"Moyenne",densitySmall:"Compacte"},stepsForm:{next:"Suivante",prev:"Précédente",submit:"Finaliser"},loginForm:{submitText:"Se connecter"},editableTable:{action:{save:"Sauvegarder",cancel:"Annuler",delete:"Supprimer",add:"ajouter une ligne de données"}},switch:{open:"ouvert",close:"près"}},pw={moneySymbol:"kn",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pretraži",reset:"Poništi",submit:"Potvrdi",collapsed:"Raširi",expand:"Skupi",inputPlaceholder:"Unesite",selectPlaceholder:"Odaberite"},alert:{clear:"Očisti",selected:"Odaberi",item:"stavke"},pagination:{total:{range:" ",total:"od",item:"stavke"}},tableToolBar:{leftPin:"Prikači lijevo",rightPin:"Prikači desno",noPin:"Bez prikačenja",leftFixedTitle:"Fiksiraj lijevo",rightFixedTitle:"Fiksiraj desno",noFixedTitle:"Bez fiksiranja",reset:"Resetiraj",columnDisplay:"Prikaz stupaca",columnSetting:"Postavke",fullScreen:"Puni zaslon",exitFullScreen:"Izađi iz punog zaslona",reload:"Ponovno učitaj",density:"Veličina",densityDefault:"Zadano",densityLarger:"Veliko",densityMiddle:"Srednje",densitySmall:"Malo"},stepsForm:{next:"Sljedeći",prev:"Prethodni",submit:"Kraj"},loginForm:{submitText:"Prijava"},editableTable:{action:{save:"Spremi",cancel:"Odustani",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"otvori",close:"zatvori"}},gw={moneySymbol:"RP",form:{lightFilter:{more:"Lebih",clear:"Hapus",confirm:"Konfirmasi",itemUnit:"Unit"}},tableForm:{search:"Cari",reset:"Atur ulang",submit:"Kirim",collapsed:"Lebih sedikit",expand:"Lebih banyak",inputPlaceholder:"Masukkan pencarian",selectPlaceholder:"Pilih"},alert:{clear:"Hapus",selected:"Dipilih",item:"Butir"},pagination:{total:{range:" ",total:"Dari",item:"Butir"}},tableToolBar:{leftPin:"Pin kiri",rightPin:"Pin kanan",noPin:"Tidak ada pin",leftFixedTitle:"Rata kiri",rightFixedTitle:"Rata kanan",noFixedTitle:"Tidak tetap",reset:"Atur ulang",columnDisplay:"Tampilan kolom",columnSetting:"Pengaturan",fullScreen:"Layar penuh",exitFullScreen:"Keluar layar penuh",reload:"Atur ulang",density:"Kerapatan",densityDefault:"Standar",densityLarger:"Lebih besar",densityMiddle:"Sedang",densitySmall:"Rapat"},stepsForm:{next:"Selanjutnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Login"},editableTable:{action:{save:"simpan",cancel:"batal",delete:"hapus",add:"Tambahkan baris data"}},switch:{open:"buka",close:"tutup"}},yw={moneySymbol:"€",form:{lightFilter:{more:"più",clear:"pulisci",confirm:"conferma",itemUnit:"elementi"}},tableForm:{search:"Filtra",reset:"Pulisci",submit:"Invia",collapsed:"Espandi",expand:"Contrai",inputPlaceholder:"Digita",selectPlaceholder:"Seleziona"},alert:{clear:"Rimuovi",selected:"Selezionati",item:"elementi"},pagination:{total:{range:" ",total:"di",item:"elementi"}},tableToolBar:{leftPin:"Fissa a sinistra",rightPin:"Fissa a destra",noPin:"Ripristina posizione",leftFixedTitle:"Fissato a sinistra",rightFixedTitle:"Fissato a destra",noFixedTitle:"Non fissato",reset:"Ripristina",columnDisplay:"Disposizione colonne",columnSetting:"Impostazioni",fullScreen:"Modalità schermo intero",exitFullScreen:"Esci da modalità schermo intero",reload:"Ricarica",density:"Grandezza tabella",densityDefault:"predefinito",densityLarger:"Grande",densityMiddle:"Media",densitySmall:"Compatta"},stepsForm:{next:"successivo",prev:"precedente",submit:"finisci"},loginForm:{submitText:"Accedi"},editableTable:{action:{save:"salva",cancel:"annulla",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"chiudi"}},bw={moneySymbol:"¥",form:{lightFilter:{more:"もっと",clear:"明確",confirm:"確認",itemUnit:"項目"}},tableForm:{search:"検索",reset:"リセット",submit:"提交",collapsed:"展開",expand:"収納",inputPlaceholder:"入力してください",selectPlaceholder:"選択してください"},alert:{clear:"クリア",selected:"選択した",item:"項目"},pagination:{total:{range:"記事",total:"/合計",item:" "}},tableToolBar:{leftPin:"左に固定",rightPin:"右に固定",noPin:"キャンセル",leftFixedTitle:"左に固定された項目",rightFixedTitle:"右に固定された項目",noFixedTitle:"固定されてない項目",reset:"リセット",columnDisplay:"表示列",columnSetting:"列表示設定",fullScreen:"フルスクリーン",exitFullScreen:"終了",reload:"更新",density:"行高",densityDefault:"デフォルト",densityLarger:"默认",densityMiddle:"中",densitySmall:"小"},stepsForm:{next:"次のステップ",prev:"前",submit:"送信"},loginForm:{submitText:"ログイン"},editableTable:{action:{save:"救う",cancel:"キャンセル",delete:"削除",add:"1行のデータを追加します"}},switch:{open:"オープン",close:"近い"}},Cw={moneySymbol:"₩",form:{lightFilter:{more:"더보기",clear:"취소",confirm:"확인",itemUnit:"건수"}},tableForm:{search:"조회",reset:"초기화",submit:"제출",collapsed:"확장",expand:"닫기",inputPlaceholder:"입력해 주세요",selectPlaceholder:"선택해 주세요"},alert:{clear:"취소",selected:"선택",item:"건"},pagination:{total:{range:" ",total:"/ 총",item:"건"}},tableToolBar:{leftPin:"왼쪽으로 핀",rightPin:"오른쪽으로 핀",noPin:"핀 제거",leftFixedTitle:"왼쪽으로 고정",rightFixedTitle:"오른쪽으로 고정",noFixedTitle:"비고정",reset:"초기화",columnDisplay:"컬럼 표시",columnSetting:"설정",fullScreen:"전체 화면",exitFullScreen:"전체 화면 취소",reload:"다시 읽기",density:"여백",densityDefault:"기본",densityLarger:"많은 여백",densityMiddle:"중간 여백",densitySmall:"좁은 여백"},stepsForm:{next:"다음",prev:"이전",submit:"종료"},loginForm:{submitText:"로그인"},editableTable:{action:{save:"저장",cancel:"취소",delete:"삭제",add:"데이터 행 추가"}},switch:{open:"열",close:"가까 운"}},xw={moneySymbol:"₮",form:{lightFilter:{more:"Илүү",clear:"Цэвэрлэх",confirm:"Баталгаажуулах",itemUnit:"Нэгжүүд"}},tableForm:{search:"Хайх",reset:"Шинэчлэх",submit:"Илгээх",collapsed:"Өргөтгөх",expand:"Хураах",inputPlaceholder:"Утга оруулна уу",selectPlaceholder:"Утга сонгоно уу"},alert:{clear:"Цэвэрлэх",selected:"Сонгогдсон",item:"Нэгж"},pagination:{total:{range:" ",total:"Нийт",item:"мөр"}},tableToolBar:{leftPin:"Зүүн тийш бэхлэх",rightPin:"Баруун тийш бэхлэх",noPin:"Бэхлэхгүй",leftFixedTitle:"Зүүн зэрэгцүүлэх",rightFixedTitle:"Баруун зэрэгцүүлэх",noFixedTitle:"Зэрэгцүүлэхгүй",reset:"Шинэчлэх",columnDisplay:"Баганаар харуулах",columnSetting:"Тохиргоо",fullScreen:"Бүтэн дэлгэцээр",exitFullScreen:"Бүтэн дэлгэц цуцлах",reload:"Шинэчлэх",density:"Хэмжээ",densityDefault:"Хэвийн",densityLarger:"Том",densityMiddle:"Дунд",densitySmall:"Жижиг"},stepsForm:{next:"Дараах",prev:"Өмнөх",submit:"Дуусгах"},loginForm:{submitText:"Нэвтрэх"},editableTable:{action:{save:"Хадгалах",cancel:"Цуцлах",delete:"Устгах",add:"Мөр нэмэх"}},switch:{open:"Нээх",close:"Хаах"}},Sw={moneySymbol:"RM",form:{lightFilter:{more:"Lebih banyak",clear:"Jelas",confirm:"Mengesahkan",itemUnit:"Item"}},tableForm:{search:"Cari",reset:"Menetapkan semula",submit:"Hantar",collapsed:"Kembang",expand:"Kuncup",inputPlaceholder:"Sila masuk",selectPlaceholder:"Sila pilih"},alert:{clear:"Padam",selected:"Dipilih",item:"Item"},pagination:{total:{range:" ",total:"daripada",item:"item"}},tableToolBar:{leftPin:"Pin ke kiri",rightPin:"Pin ke kanan",noPin:"Tidak pin",leftFixedTitle:"Tetap ke kiri",rightFixedTitle:"Tetap ke kanan",noFixedTitle:"Tidak Tetap",reset:"Menetapkan semula",columnDisplay:"Lajur",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Keluar Full Screen",reload:"Muat Semula",density:"Densiti",densityDefault:"Biasa",densityLarger:"Besar",densityMiddle:"Tengah",densitySmall:"Kecil"},stepsForm:{next:"Seterusnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Log Masuk"},editableTable:{action:{save:"Simpan",cancel:"Membatalkan",delete:"Menghapuskan",add:"tambah baris data"}},switch:{open:"Terbuka",close:"Tutup"}},ww={moneySymbol:"zł",form:{lightFilter:{more:"Więcej",clear:"Wyczyść",confirm:"Potwierdź",itemUnit:"Ilość"}},tableForm:{search:"Szukaj",reset:"Reset",submit:"Zatwierdź",collapsed:"Pokaż wiecej",expand:"Pokaż mniej",inputPlaceholder:"Proszę podać",selectPlaceholder:"Proszę wybrać"},alert:{clear:"Wyczyść",selected:"Wybrane",item:"Wpis"},pagination:{total:{range:" ",total:"z",item:"Wpisów"}},tableToolBar:{leftPin:"Przypnij do lewej",rightPin:"Przypnij do prawej",noPin:"Odepnij",leftFixedTitle:"Przypięte do lewej",rightFixedTitle:"Przypięte do prawej",noFixedTitle:"Nieprzypięte",reset:"Reset",columnDisplay:"Wyświetlane wiersze",columnSetting:"Ustawienia",fullScreen:"Pełen ekran",exitFullScreen:"Zamknij pełen ekran",reload:"Odśwież",density:"Odstęp",densityDefault:"Standard",densityLarger:"Wiekszy",densityMiddle:"Sredni",densitySmall:"Kompaktowy"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Zaloguj się"},editableTable:{action:{save:"Zapisać",cancel:"Anuluj",delete:"Usunąć",add:"dodawanie wiersza danych"}},switch:{open:"otwierać",close:"zamykać"}},Pw={moneySymbol:"R$",form:{lightFilter:{more:"Mais",clear:"Limpar",confirm:"Confirmar",itemUnit:"Itens"}},tableForm:{search:"Filtrar",reset:"Limpar",submit:"Confirmar",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Por favor insira",selectPlaceholder:"Por favor selecione"},alert:{clear:"Limpar",selected:"Selecionado(s)",item:"Item(s)"},pagination:{total:{range:" ",total:"de",item:"itens"}},tableToolBar:{leftPin:"Fixar à esquerda",rightPin:"Fixar à direita",noPin:"Desfixado",leftFixedTitle:"Fixado à esquerda",rightFixedTitle:"Fixado à direita",noFixedTitle:"Não fixado",reset:"Limpar",columnDisplay:"Mostrar Coluna",columnSetting:"Configurações",fullScreen:"Tela Cheia",exitFullScreen:"Sair da Tela Cheia",reload:"Atualizar",density:"Densidade",densityDefault:"Padrão",densityLarger:"Largo",densityMiddle:"Médio",densitySmall:"Compacto"},stepsForm:{next:"Próximo",prev:"Anterior",submit:"Enviar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Salvar",cancel:"Cancelar",delete:"Apagar",add:"adicionar uma linha de dados"}},switch:{open:"abrir",close:"fechar"}},Ew={moneySymbol:"₽",form:{lightFilter:{more:"Еще",clear:"Очистить",confirm:"ОК",itemUnit:"Позиции"}},tableForm:{search:"Найти",reset:"Сброс",submit:"Отправить",collapsed:"Развернуть",expand:"Свернуть",inputPlaceholder:"Введите значение",selectPlaceholder:"Выберите значение"},alert:{clear:"Очистить",selected:"Выбрано",item:"элементов"},pagination:{total:{range:" ",total:"из",item:"элементов"}},tableToolBar:{leftPin:"Закрепить слева",rightPin:"Закрепить справа",noPin:"Открепить",leftFixedTitle:"Закреплено слева",rightFixedTitle:"Закреплено справа",noFixedTitle:"Не закреплено",reset:"Сброс",columnDisplay:"Отображение столбца",columnSetting:"Настройки",fullScreen:"Полный экран",exitFullScreen:"Выйти из полноэкранного режима",reload:"Обновить",density:"Размер",densityDefault:"По умолчанию",densityLarger:"Большой",densityMiddle:"Средний",densitySmall:"Сжатый"},stepsForm:{next:"Следующий",prev:"Предыдущий",submit:"Завершить"},loginForm:{submitText:"Вход"},editableTable:{action:{save:"Сохранить",cancel:"Отменить",delete:"Удалить",add:"добавить ряд данных"}},switch:{open:"Открытый чемпионат мира по теннису",close:"По адресу:"}},kw={moneySymbol:"RSD",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pronađi",reset:"Resetuj",submit:"Pošalji",collapsed:"Proširi",expand:"Skupi",inputPlaceholder:"Molimo unesite",selectPlaceholder:"Molimo odaberite"},alert:{clear:"Očisti",selected:"Odabrano",item:"Stavka"},pagination:{total:{range:" ",total:"od",item:"stavki"}},tableToolBar:{leftPin:"Zakači levo",rightPin:"Zakači desno",noPin:"Nije zakačeno",leftFixedTitle:"Fiksirano levo",rightFixedTitle:"Fiksirano desno",noFixedTitle:"Nije fiksirano",reset:"Resetuj",columnDisplay:"Prikaz kolona",columnSetting:"Podešavanja",fullScreen:"Pun ekran",exitFullScreen:"Zatvori pun ekran",reload:"Osveži",density:"Veličina",densityDefault:"Podrazumevana",densityLarger:"Veća",densityMiddle:"Srednja",densitySmall:"Kompaktna"},stepsForm:{next:"Dalje",prev:"Nazad",submit:"Gotovo"},loginForm:{submitText:"Prijavi se"},editableTable:{action:{save:"Sačuvaj",cancel:"Poništi",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"Отворите",close:"Затворите"}},Rw={moneySymbol:"₺",form:{lightFilter:{more:"Daha Fazla",clear:"Temizle",confirm:"Onayla",itemUnit:"Öğeler"}},tableForm:{search:"Filtrele",reset:"Sıfırla",submit:"Gönder",collapsed:"Daha fazla",expand:"Daha az",inputPlaceholder:"Filtrelemek için bir değer girin",selectPlaceholder:"Filtrelemek için bir değer seçin"},alert:{clear:"Temizle",selected:"Seçili",item:"Öğe"},pagination:{total:{range:" ",total:"Toplam",item:"Öğe"}},tableToolBar:{leftPin:"Sola sabitle",rightPin:"Sağa sabitle",noPin:"Sabitlemeyi kaldır",leftFixedTitle:"Sola sabitlendi",rightFixedTitle:"Sağa sabitlendi",noFixedTitle:"Sabitlenmedi",reset:"Sıfırla",columnDisplay:"Kolon Görünümü",columnSetting:"Ayarlar",fullScreen:"Tam Ekran",exitFullScreen:"Tam Ekrandan Çık",reload:"Yenile",density:"Kalınlık",densityDefault:"Varsayılan",densityLarger:"Büyük",densityMiddle:"Orta",densitySmall:"Küçük"},stepsForm:{next:"Sıradaki",prev:"Önceki",submit:"Gönder"},loginForm:{submitText:"Giriş Yap"},editableTable:{action:{save:"Kaydet",cancel:"Vazgeç",delete:"Sil",add:"foegje in rige gegevens ta"}},switch:{open:"açık",close:"kapatmak"}},Fw={moneySymbol:"₫",form:{lightFilter:{more:"Nhiều hơn",clear:"Trong",confirm:"Xác nhận",itemUnit:"Mục"}},tableForm:{search:"Tìm kiếm",reset:"Làm lại",submit:"Gửi đi",collapsed:"Mở rộng",expand:"Thu gọn",inputPlaceholder:"nhập dữ liệu",selectPlaceholder:"Vui lòng chọn"},alert:{clear:"Xóa",selected:"đã chọn",item:"mục"},pagination:{total:{range:" ",total:"trên",item:"mặt hàng"}},tableToolBar:{leftPin:"Ghim trái",rightPin:"Ghim phải",noPin:"Bỏ ghim",leftFixedTitle:"Cố định trái",rightFixedTitle:"Cố định phải",noFixedTitle:"Chưa cố định",reset:"Làm lại",columnDisplay:"Cột hiển thị",columnSetting:"Cấu hình",fullScreen:"Chế độ toàn màn hình",exitFullScreen:"Thoát chế độ toàn màn hình",reload:"Làm mới",density:"Mật độ hiển thị",densityDefault:"Mặc định",densityLarger:"Mặc định",densityMiddle:"Trung bình",densitySmall:"Chật"},stepsForm:{next:"Sau",prev:"Trước",submit:"Kết thúc"},loginForm:{submitText:"Đăng nhập"},editableTable:{action:{save:"Cứu",cancel:"Hủy",delete:"Xóa",add:"thêm một hàng dữ liệu"}},switch:{open:"mở",close:"đóng"}},Mw={moneySymbol:"¥",deleteThisLine:"删除此行",copyThisLine:"复制此行",form:{lightFilter:{more:"更多筛选",clear:"清除",confirm:"确认",itemUnit:"项"}},tableForm:{search:"查询",reset:"重置",submit:"提交",collapsed:"展开",expand:"收起",inputPlaceholder:"请输入",selectPlaceholder:"请选择"},alert:{clear:"取消选择",selected:"已选择",item:"项"},pagination:{total:{range:"第",total:"条/总共",item:"条"}},tableToolBar:{leftPin:"固定在列首",rightPin:"固定在列尾",noPin:"不固定",leftFixedTitle:"固定在左侧",rightFixedTitle:"固定在右侧",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列设置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默认",densityMiddle:"中等",densitySmall:"紧凑"},stepsForm:{next:"下一步",prev:"上一步",submit:"提交"},loginForm:{submitText:"登录"},editableTable:{onlyOneLineEditor:"只能同时编辑一行",action:{save:"保存",cancel:"取消",delete:"删除",add:"添加一行数据"}},switch:{open:"打开",close:"关闭"}},Nw={moneySymbol:"NT$",form:{lightFilter:{more:"更多篩選",clear:"清除",confirm:"確認",itemUnit:"項"}},tableForm:{search:"查詢",reset:"重置",submit:"提交",collapsed:"展開",expand:"收起",inputPlaceholder:"請輸入",selectPlaceholder:"請選擇"},alert:{clear:"取消選擇",selected:"已選擇",item:"項"},pagination:{total:{range:"第",total:"條/總共",item:"條"}},tableToolBar:{leftPin:"固定到左邊",rightPin:"固定到右邊",noPin:"不固定",leftFixedTitle:"固定在左側",rightFixedTitle:"固定在右側",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列設置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默認",densityMiddle:"中等",densitySmall:"緊湊"},stepsForm:{next:"下一個",prev:"以前的",submit:"完成"},loginForm:{submitText:"登入"},editableTable:{action:{save:"保存",cancel:"取消",delete:"刪除",add:"添加一行數據"}},switch:{open:"打開",close:"關閉"}};function Tw(t,e,r){var n=e.replace(/\[(\d+)\]/g,".$1").split("."),a=t,o=r,l=Er(n),i;try{for(l.s();!(i=l.n()).done;){var u=i.value;if(o=Object(a)[u],a=Object(a)[u],o===void 0)return r}}catch(c){l.e(c)}finally{l.f()}return o}var Lt=function(e,r){return{getMessage:function(a,o){return Tw(r,a,o)||o},locale:e}},$w=Lt("mn_MN",xw),Dw=Lt("ar_EG",sw),Cl=Lt("zh_CN",Mw),Ow=Lt("en_US",fw),Iw=Lt("en_GB",dw),_w=Lt("vi_VN",Fw),Lw=Lt("it_IT",yw),jw=Lt("ja_JP",bw),Aw=Lt("es_ES",vw),Kw=Lt("ca_ES",uw),Vw=Lt("ru_RU",Ew),zw=Lt("sr_RS",kw),Bw=Lt("ms_MY",Sw),Hw=Lt("zh_TW",Nw),Ww=Lt("fr_FR",hw),Uw=Lt("pt_BR",Pw),Yw=Lt("ko_KR",Cw),Gw=Lt("id_ID",gw),qw=Lt("de_DE",cw),Xw=Lt("fa_IR",mw),Zw=Lt("tr_TR",Rw),Qw=Lt("pl_PL",ww),Jw=Lt("hr_",pw),Li={"mn-MN":$w,"ar-EG":Dw,"zh-CN":Cl,"en-US":Ow,"en-GB":Iw,"vi-VN":_w,"it-IT":Lw,"ja-JP":jw,"es-ES":Aw,"ca-ES":Kw,"ru-RU":Vw,"sr-RS":zw,"ms-MY":Bw,"zh-TW":Hw,"fr-FR":Ww,"pt-BR":Uw,"ko-KR":Yw,"id-ID":Gw,"de-DE":qw,"fa-IR":Xw,"tr-TR":Zw,"pl-PL":Qw,"hr-HR":Jw},e6=Object.keys(Li),$u=G.createContext({intl:p(p({},Cl),{},{locale:"default"}),valueTypeMap:{}}),t6=$u.Consumer,n6=$u.Provider,Jm=function(e){if(!e)return"zh-CN";var r=e.toLocaleLowerCase();return e6.find(function(n){var a=n.toLocaleLowerCase();return a.includes(r)})},r6=function(){var e=Tu(),r=e.cache;return s.useEffect(function(){return function(){r.clear()}},[]),null},a6=function(e){var r=e.children,n=e.autoClearCache,a=n===void 0?!1:n,o=s.useContext(rt.ConfigContext),l=o.locale,i=l===void 0?rt:G.Fragment,u=C.jsx(t6,{children:function(d){var f,v=l==null?void 0:l.locale,m=Jm(v),h=v&&((f=d.intl)===null||f===void 0?void 0:f.locale)==="default"?Li[m]:d.intl||Li[m],y=l===void 0?{locale:Lm}:{};return C.jsx(i,p(p({},y),{},{children:C.jsx(n6,{value:p(p({},d),{},{intl:h||Cl}),children:C.jsxs(C.Fragment,{children:[a&&C.jsx(r6,{}),r]})})}))}});return a?C.jsx(Zm,{value:{provider:function(){return new Map}},children:u}):u};function Gn(){var t=s.useContext(rt.ConfigContext),e=t.locale,r=s.useContext($u),n=r.intl;return n&&n.locale!=="default"?n:e!=null&&e.locale?Li[Jm(e.locale)]:Cl}var o6=function(t){yn(r,t);var e=bn(r);function r(){var n;Cn(this,r);for(var a=arguments.length,o=new Array(a),l=0;l1?e-1:0),n=1;n1&&(P=$f(e),T=P.slice(1),M=hn(E,T),pn(E,T,M)),k=S?pn({},w,E,!0):E,$.next=13,r==null?void 0:r(e,P6({},n,k),n,o);case 13:return D=$.sent,m(!1),$.abrupt("return",D);case 18:return $.prev=18,$.t0=$.catch(2),console.log($.t0),m(!1),$.abrupt("return",null);case 23:case"end":return $.stop()}},g,null,[[2,18]])}));function y(g){return h.apply(this,arguments)}return y}(),children:[v?C.jsx(Na,{style:{marginRight:8}}):null,a||"保存"]},"save")}var O6=function(e){var r=e.recordKey,n=e.onDelete,a=e.row,o=e.children,l=e.deletePopconfirmMessage,i=Un(function(){return!1}),u=ee(i,2),c=u[0],d=u[1],f=Qt(pt($e().mark(function v(){var m;return $e().wrap(function(y){for(;;)switch(y.prev=y.next){case 0:return y.prev=0,d(!0),y.next=4,n==null?void 0:n(r,a);case 4:return m=y.sent,d(!1),y.abrupt("return",m);case 9:return y.prev=9,y.t0=y.catch(0),console.log(y.t0),d(!1),y.abrupt("return",null);case 14:case"end":return y.stop()}},v,null,[[0,9]])})));return o!==!1?C.jsx(Yp,{title:l,onConfirm:function(){return f()},children:C.jsxs("a",{children:[c?C.jsx(Na,{style:{marginRight:8}}):null,o||"删除"]})},"delete"):null},I6=function(e){var r=e.recordKey,n=e.tableName,a=e.newLineConfig,o=e.editorType,l=e.onCancel,i=e.cancelEditable,u=e.row,c=e.cancelText,d=s.useContext(th),f=_t.useFormInstance();return C.jsx("a",{onClick:function(){var v=pt($e().mark(function h(y){var g,b,x,S,w,E;return $e().wrap(function(T){for(;;)switch(T.prev=T.next){case 0:return y.stopPropagation(),y.preventDefault(),b=o==="Map",x=[n,r].flat(1).filter(Boolean),S=((g=d.getFieldFormatValue)===null||g===void 0?void 0:g.call(d,x))||f.getFieldValue(x),w=b?pn({},x,S):S,T.next=8,l==null?void 0:l(r,w,u,a);case 8:return E=T.sent,i(r),f.setFieldsValue(B({},r,b?hn(u,x):u)),T.abrupt("return",E);case 12:case"end":return T.stop()}},h)}));function m(h){return v.apply(this,arguments)}return m}(),children:c||"取消"},"cancel")};function _6(t,e){var r=e.recordKey,n=e.newLineConfig,a=e.saveText,o=e.deleteText;return[C.jsx(D6,p(p({},e),{},{row:t,children:a}),"save"+r),(n==null?void 0:n.options.recordKey)!==r?C.jsx(O6,p(p({},e),{},{row:t,children:o}),"delete"+r):null,C.jsx(I6,p(p({},e),{},{row:t}),"cancel"+r)]}function L6(t){var e=s.useState(void 0),r=ee(e,2),n=r[0],a=r[1],o=s.useRef(new Map),l=s.useRef(void 0);rh(function(){var R=new Map,I=function L(j,_){j==null||j.forEach(function(A,K){var z,V=_==null?K.toString():_+"_"+K.toString();R.set(V,Vn(t.getRowKey(A,-1))),R.set((z=Vn(t.getRowKey(A,-1)))===null||z===void 0?void 0:z.toString(),V),t.childrenColumnName&&A[t.childrenColumnName]&&L(A[t.childrenColumnName],V)})};I(t.dataSource),o.current=R},[t.dataSource]),l.current=n;var i=t.type||"single",u=wm(t.dataSource,"children",t.getRowKey),c=ee(u,1),d=c[0],f=xt([],{value:t.editableKeys,onChange:t.onChange?function(R){var I;t==null||(I=t.onChange)===null||I===void 0||I.call(t,R.filter(function(L){return L!==void 0}),R.map(function(L){return d(L)}).filter(function(L){return L!==void 0}))}:void 0}),v=ee(f,2),m=v[0],h=v[1],y=s.useMemo(function(){var R=i==="single"?m==null?void 0:m.slice(0,1):m;return new Set(R)},[(m||[]).join(","),i]),g=Ri(m),b=Qt(function(R){var I,L,j,_,A=(I=t.getRowKey(R,R.index))===null||I===void 0||(L=I.toString)===null||L===void 0?void 0:L.call(I),K=(j=t.getRowKey(R,-1))===null||j===void 0||(_=j.toString)===null||_===void 0?void 0:_.call(j),z=m.map(function(W){return W==null?void 0:W.toString()}),V=(g==null?void 0:g.map(function(W){return W==null?void 0:W.toString()}))||[],X=t.tableName&&!!(V!=null&&V.includes(K))||!!(V!=null&&V.includes(A));return{recordKey:K,isEditable:t.tableName&&(z==null?void 0:z.includes(K))||(z==null?void 0:z.includes(A)),preIsEditable:X}}),x=Qt(function(R){return y.size>0&&i==="single"&&t.onlyOneLineEditorAlertMessage!==!1?(Dl.warn(t.onlyOneLineEditorAlertMessage||"只能同时编辑一行"),!1):(y.add(R),h(Array.from(y)),!0)}),S=Qt(function(){var R=pt($e().mark(function I(L,j){var _,A;return $e().wrap(function(z){for(;;)switch(z.prev=z.next){case 0:if(_=Vn(L).toString(),A=o.current.get(_),!(!y.has(_)&&A&&(j??!0)&&t.tableName)){z.next=5;break}return S(A,!1),z.abrupt("return");case 5:return n&&n.options.recordKey===L&&a(void 0),y.delete(_),y.delete(Vn(L)),h(Array.from(y)),z.abrupt("return",!0);case 10:case"end":return z.stop()}},I)}));return function(I,L){return R.apply(this,arguments)}}()),w=Du(pt($e().mark(function R(){var I,L,j,_,A=arguments;return $e().wrap(function(z){for(;;)switch(z.prev=z.next){case 0:for(L=A.length,j=new Array(L),_=0;_0&&i==="single"&&t.onlyOneLineEditorAlertMessage!==!1)return Dl.warn(t.onlyOneLineEditorAlertMessage||"只能同时编辑一行"),!1;var L=t.getRowKey(R,-1);if(!L)throw en(!!L,`请设置 recordCreatorProps.record 并返回一个唯一的key + https://procomponents.ant.design/components/editable-table#editable-%E6%96%B0%E5%BB%BA%E8%A1%8C`),new Error("请设置 recordCreatorProps.record 并返回一个唯一的key");if(y.add(L),h(Array.from(y)),(I==null?void 0:I.newRecordType)==="dataSource"||t.tableName){var j,_={data:t.dataSource,getRowKey:t.getRowKey,row:p(p({},R),{},{map_row_parentKey:I!=null&&I.parentKey?(j=Vn(I==null?void 0:I.parentKey))===null||j===void 0?void 0:j.toString():void 0}),key:L,childrenColumnName:t.childrenColumnName||"children"};t.setDataSource(no(_,(I==null?void 0:I.position)==="top"?"top":"update"))}else a({defaultValue:R,options:p(p({},I),{},{recordKey:L})});return!0}),T=Gn(),M=(t==null?void 0:t.saveText)||T.getMessage("editableTable.action.save","保存"),k=(t==null?void 0:t.deleteText)||T.getMessage("editableTable.action.delete","删除"),D=(t==null?void 0:t.cancelText)||T.getMessage("editableTable.action.cancel","取消"),O=Qt(function(){var R=pt($e().mark(function I(L,j,_,A){var K,z,V,X,W,Z,U;return $e().wrap(function(q){for(;;)switch(q.prev=q.next){case 0:return X=A||l.current||{},W=X.options,q.next=3,t==null||(K=t.onSave)===null||K===void 0?void 0:K.call(t,L,j,_,A);case 3:if(Z=q.sent,S(L),!(!(W!=null&&W.parentKey)&&(W==null?void 0:W.recordKey)===L)){q.next=8;break}return(W==null?void 0:W.position)==="top"?t.setDataSource([j].concat(De(t.dataSource))):t.setDataSource([].concat(De(t.dataSource),[j])),q.abrupt("return",Z);case 8:return U={data:t.dataSource,getRowKey:t.getRowKey,row:W?p(p({},j),{},{map_row_parentKey:(z=Vn((V=W==null?void 0:W.parentKey)!==null&&V!==void 0?V:""))===null||z===void 0?void 0:z.toString()}):j,key:L,childrenColumnName:t.childrenColumnName||"children"},t.setDataSource(no(U,(W==null?void 0:W.position)==="top"?"top":"update")),q.abrupt("return",Z);case 11:case"end":return q.stop()}},I)}));return function(I,L,j,_){return R.apply(this,arguments)}}()),$=Qt(function(){var R=pt($e().mark(function I(L,j){var _,A,K;return $e().wrap(function(V){for(;;)switch(V.prev=V.next){case 0:return A={data:t.dataSource,getRowKey:t.getRowKey,row:j,key:L,childrenColumnName:t.childrenColumnName||"children"},V.next=3,t==null||(_=t.onDelete)===null||_===void 0?void 0:_.call(t,L,j);case 3:return K=V.sent,V.next=6,S(L);case 6:return t.setDataSource(no(A,"delete")),V.abrupt("return",K);case 8:case"end":return V.stop()}},I)}));return function(I,L){return R.apply(this,arguments)}}()),F=Qt(function(){var R=pt($e().mark(function I(L,j,_,A){var K,z;return $e().wrap(function(X){for(;;)switch(X.prev=X.next){case 0:return X.next=2,t==null||(K=t.onCancel)===null||K===void 0?void 0:K.call(t,L,j,_,A);case 2:return z=X.sent,X.abrupt("return",z);case 4:case"end":return X.stop()}},I)}));return function(I,L,j,_){return R.apply(this,arguments)}}()),N=function(I){var L=t.getRowKey(I,I.index),j={saveText:M,cancelText:D,deleteText:k,addEditRecord:P,recordKey:L,cancelEditable:S,index:I.index,tableName:t.tableName,newLineConfig:n,onCancel:F,onDelete:$,onSave:O,editableKeys:m,setEditableRowKeys:h,deletePopconfirmMessage:t.deletePopconfirmMessage||"".concat(T.getMessage("deleteThisLine","删除此行"),"?")},_=_6(I,j);return t.actionRender?t.actionRender(I,j,{save:_[0],delete:_[1],cancel:_[2]}):_};return{editableKeys:m,setEditableRowKeys:h,isEditable:b,actionRender:N,startEditable:x,cancelEditable:S,addEditRecord:P,newLineRecord:n,preEditableKeys:g,onValuesChange:E}}var j6=function(e){return A6(e)==="map"?e:new Map(Object.entries(e||{}))};function A6(t){var e=Object.prototype.toString.call(t).match(/^\[object (.*)\]$/)[1].toLowerCase();return e==="string"&&Ve(t)==="object"?"object":t===null?"null":t===void 0?"undefined":e}var K6=function(e){var r=[],n=j6(e);return n.forEach(function(a,o){var l=n.get(o)||n.get("".concat(o));if(l){if(Ve(l)==="object"&&(l!=null&&l.text)){r.push({text:l==null?void 0:l.text,value:o,label:l==null?void 0:l.text,disabled:l.disabled});return}r.push({text:l,value:o})}}),r};var wn={},Wo={},V6=Zi,z6=ir,B6=ta,H6="[object String]";function W6(t){return typeof t=="string"||!z6(t)&&B6(t)&&V6(t)==H6}var U6=W6;function Y6(t){return function(e,r,n){for(var a=-1,o=Object(e),l=n(e),i=l.length;i--;){var u=l[t?i:++a];if(r(o[u],u,o)===!1)break}return e}}var G6=Y6,q6=G6,X6=q6(),ah=X6,Z6=ah,Q6=zo;function J6(t,e){return t&&Z6(t,e,Q6)}var oh=J6,e8=ru;function t8(t){return typeof t=="function"?t:e8}var ih=t8,n8=oh,r8=ih;function a8(t,e){return t&&n8(t,r8(e))}var Ou=a8,o8=um,i8=o8(Object.getPrototypeOf,Object),Iu=i8,l8=Zi,s8=Iu,u8=ta,c8="[object Object]",d8=Function.prototype,f8=Object.prototype,lh=d8.toString,v8=f8.hasOwnProperty,m8=lh.call(Object);function h8(t){if(!u8(t)||l8(t)!=c8)return!1;var e=s8(t);if(e===null)return!0;var r=v8.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&lh.call(r)==m8}var sh=h8,p8=ml,g8=xu,y8=1,b8=2;function C8(t,e,r,n){var a=r.length,o=a,l=!n;if(t==null)return!o;for(t=Object(t);a--;){var i=r[a];if(l&&i[2]?i[1]!==t[i[0]]:!(i[0]in t))return!1}for(;++a0&&arguments[0]!==void 0?arguments[0]:[],r=[];return(0,DP.default)(e,function(n){Array.isArray(n)?t(n).map(function(a){return r.push(a)}):(0,TP.default)(n)?(0,MP.default)(n,function(a,o){a===!0&&r.push(o),r.push(o+"-"+a)}):(0,RP.default)(n)&&r.push(n)}),r};Wo.default=OP;var Uo={};function IP(t,e){for(var r=-1,n=t==null?0:t.length;++r1&&arguments[1]!==void 0?arguments[1]:[],n=e.default&&(0,V7.default)(e.default)||{};return r.map(function(a){var o=e[a];return o&&(0,A7.default)(o,function(l,i){n[i]||(n[i]={}),n[i]=z7({},n[i],o[i])}),a}),n};Uo.default=B7;var qo={};Object.defineProperty(qo,"__esModule",{value:!0});qo.autoprefix=void 0;var H7=Ou,wd=U7(H7),W7=Object.assign||function(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:"span";return function(n){J7(a,n);function a(){var o,l,i,u;Q7(this,a);for(var c=arguments.length,d=Array(c),f=0;f1&&arguments[1]!==void 0?arguments[1]:"span";return function(n){ok(a,n);function a(){var o,l,i,u;ak(this,a);for(var c=arguments.length,d=Array(c),f=0;f1&&arguments[1]!==void 0?arguments[1]:!0;n[l]=i};return e===0&&a("first-child"),e===r-1&&a("last-child"),(e===0||e%2===0)&&a("even"),Math.abs(e%2)===1&&a("odd"),a("nth-child",e),n};Lu.default=lk;Object.defineProperty(wn,"__esModule",{value:!0});wn.ReactCSS=wn.loop=wn.handleActive=wn.handleHover=wn.hover=void 0;var sk=Wo,uk=ja(sk),ck=Uo,dk=ja(ck),fk=qo,vk=ja(fk),mk=Xo,Sh=ja(mk),hk=Zo,pk=ja(hk),gk=Lu,yk=ja(gk);function ja(t){return t&&t.__esModule?t:{default:t}}wn.hover=Sh.default;wn.handleHover=Sh.default;wn.handleActive=pk.default;wn.loop=yk.default;var bk=wn.ReactCSS=function(e){for(var r=arguments.length,n=Array(r>1?r-1:0),a=1;a1?r[a-1]:void 0,l=a>2?r[2]:void 0;for(o=t.length>3&&typeof o=="function"?(a--,o):void 0,l&&dR(r[0],r[1],l)&&(o=a<3?void 0:o,a=1),e=Object(e);++ni?v=1:v=Math.round(f*100/i)/100,r.a!==v)return{h:r.h,s:r.s,l:r.l,a:v,source:"rgb"}}else{var m;if(d<0?m=0:d>l?m=1:m=Math.round(d*100/l)/100,a!==m)return{h:r.h,s:r.s,l:r.l,a:m,source:"rgb"}}return null},Ul={},CR=function(e,r,n,a){if(typeof document>"u"&&!a)return null;var o=a?new a:document.createElement("canvas");o.width=n*2,o.height=n*2;var l=o.getContext("2d");return l?(l.fillStyle=e,l.fillRect(0,0,o.width,o.height),l.fillStyle=r,l.fillRect(0,0,n,n),l.translate(n,n),l.fillRect(0,0,n,n),o.toDataURL()):null},xR=function(e,r,n,a){var o="".concat(e,"-").concat(r,"-").concat(n).concat(a?"-server":"");if(Ul[o])return Ul[o];var l=CR(e,r,n,a);return Ul[o]=l,l};function xo(t){"@babel/helpers - typeof";return xo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xo(t)}function Nd(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,n)}return r}function xi(t){for(var e=1;e"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ai(t){return Ai=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Ai(t)}var IR=function(t){NR(r,t);var e=TR(r);function r(){var n;RR(this,r);for(var a=arguments.length,o=new Array(a),l=0;ll)f=0;else{var v=-(d*100/l)+100;f=360*v/100}if(n.h!==f)return{h:f,s:n.s,l:n.l,a:n.a,source:"hsl"}}else{var m;if(c<0)m=0;else if(c>o)m=359;else{var h=c*100/o;m=360*h/100}if(n.h!==m)return{h:m,s:n.s,l:n.l,a:n.a,source:"hsl"}}return null};function Pa(t){"@babel/helpers - typeof";return Pa=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Pa(t)}function LR(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dd(t,e){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ki(t){return Ki=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Ki(t)}var UR=function(t){VR(r,t);var e=zR(r);function r(){var n;LR(this,r);for(var a=arguments.length,o=new Array(a),l=0;lo&&(c=o),d<0?d=0:d>l&&(d=l);var f=c/o,v=1-d/l;return{h:r.h,s:f,v,a:r.a,source:"hsv"}};function Ea(t){"@babel/helpers - typeof";return Ea=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ea(t)}function eF(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Od(t,e){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Vi(t){return Vi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Vi(t)}var uF=function(t){aF(r,t);var e=oF(r);function r(n){var a;return eF(this,r),a=e.call(this,n),a.handleChange=function(o){typeof a.props.onChange=="function"&&a.throttle(a.props.onChange,JR(o,a.props.hsl,a.container),o)},a.handleMouseDown=function(o){a.handleChange(o);var l=a.getContainerRenderWindow();l.addEventListener("mousemove",a.handleChange),l.addEventListener("mouseup",a.handleMouseUp)},a.handleMouseUp=function(){a.unbindEventListeners()},a.throttle=QR(function(o,l,i){o(l,i)},50),a}return tF(r,[{key:"componentWillUnmount",value:function(){this.throttle.cancel(),this.unbindEventListeners()}},{key:"getContainerRenderWindow",value:function(){for(var a=this.container,o=window;!o.document.contains(a)&&o.parent!==o;)o=o.parent;return o}},{key:"unbindEventListeners",value:function(){var a=this.getContainerRenderWindow();a.removeEventListener("mousemove",this.handleChange),a.removeEventListener("mouseup",this.handleMouseUp)}},{key:"render",value:function(){var a=this,o=this.props.style||{},l=o.color,i=o.white,u=o.black,c=o.pointer,d=o.circle,f=Tr({default:{color:{absolute:"0px 0px 0px 0px",background:"hsl(".concat(this.props.hsl.h,",100%, 50%)"),borderRadius:this.props.radius},white:{absolute:"0px 0px 0px 0px",borderRadius:this.props.radius},black:{absolute:"0px 0px 0px 0px",boxShadow:this.props.shadow,borderRadius:this.props.radius},pointer:{position:"absolute",top:"".concat(-(this.props.hsv.v*100)+100,"%"),left:"".concat(this.props.hsv.s*100,"%"),cursor:"default"},circle:{width:"4px",height:"4px",boxShadow:`0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), + 0 0 1px 2px rgba(0,0,0,.4)`,borderRadius:"50%",cursor:"hand",transform:"translate(-2px, -2px)"}},custom:{color:l,white:i,black:u,pointer:c,circle:d}},{custom:!!this.props.style});return G.createElement("div",{style:f.color,ref:function(m){return a.container=m},onMouseDown:this.handleMouseDown,onTouchMove:this.handleChange,onTouchStart:this.handleChange},G.createElement("style",null,` + .saturation-white { + background: -webkit-linear-gradient(to right, #fff, rgba(255,255,255,0)); + background: linear-gradient(to right, #fff, rgba(255,255,255,0)); + } + .saturation-black { + background: -webkit-linear-gradient(to top, #000, rgba(0,0,0,0)); + background: linear-gradient(to top, #000, rgba(0,0,0,0)); + } + `),G.createElement("div",{style:f.white,className:"saturation-white"},G.createElement("div",{style:f.black,className:"saturation-black"}),G.createElement("div",{style:f.pointer},this.props.pointer?G.createElement(this.props.pointer,this.props):G.createElement("div",{style:f.circle}))))}}]),r}(s.PureComponent||s.Component),cF=fh,dF=dh,fF=ih,vF=ir;function mF(t,e){var r=vF(t)?cF:dF;return r(t,fF(e))}var hF=mF,pF=hF;const gF=Ta(pF);function zi(t){"@babel/helpers - typeof";return zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},zi(t)}var yF=/^\s+/,bF=/\s+$/;function Ze(t,e){if(t=t||"",e=e||{},t instanceof Ze)return t;if(!(this instanceof Ze))return new Ze(t,e);var r=CF(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=Math.round(100*this._a)/100,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=r.ok}Ze.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(e.r*299+e.g*587+e.b*114)/1e3},getLuminance:function(){var e=this.toRgb(),r,n,a,o,l,i;return r=e.r/255,n=e.g/255,a=e.b/255,r<=.03928?o=r/12.92:o=Math.pow((r+.055)/1.055,2.4),n<=.03928?l=n/12.92:l=Math.pow((n+.055)/1.055,2.4),a<=.03928?i=a/12.92:i=Math.pow((a+.055)/1.055,2.4),.2126*o+.7152*l+.0722*i},setAlpha:function(e){return this._a=Rh(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=_d(this._r,this._g,this._b);return{h:e.h*360,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=_d(this._r,this._g,this._b),r=Math.round(e.h*360),n=Math.round(e.s*100),a=Math.round(e.v*100);return this._a==1?"hsv("+r+", "+n+"%, "+a+"%)":"hsva("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHsl:function(){var e=Id(this._r,this._g,this._b);return{h:e.h*360,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=Id(this._r,this._g,this._b),r=Math.round(e.h*360),n=Math.round(e.s*100),a=Math.round(e.l*100);return this._a==1?"hsl("+r+", "+n+"%, "+a+"%)":"hsla("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(e){return Ld(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return PF(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(It(this._r,255)*100)+"%",g:Math.round(It(this._g,255)*100)+"%",b:Math.round(It(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(It(this._r,255)*100)+"%, "+Math.round(It(this._g,255)*100)+"%, "+Math.round(It(this._b,255)*100)+"%)":"rgba("+Math.round(It(this._r,255)*100)+"%, "+Math.round(It(this._g,255)*100)+"%, "+Math.round(It(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:_F[Ld(this._r,this._g,this._b,!0)]||!1},toFilter:function(e){var r="#"+jd(this._r,this._g,this._b,this._a),n=r,a=this._gradientType?"GradientType = 1, ":"";if(e){var o=Ze(e);n="#"+jd(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+a+"startColorstr="+r+",endColorstr="+n+")"},toString:function(e){var r=!!e;e=e||this._format;var n=!1,a=this._a<1&&this._a>=0,o=!r&&a&&(e==="hex"||e==="hex6"||e==="hex3"||e==="hex4"||e==="hex8"||e==="name");return o?e==="name"&&this._a===0?this.toName():this.toRgbString():(e==="rgb"&&(n=this.toRgbString()),e==="prgb"&&(n=this.toPercentageRgbString()),(e==="hex"||e==="hex6")&&(n=this.toHexString()),e==="hex3"&&(n=this.toHexString(!0)),e==="hex4"&&(n=this.toHex8String(!0)),e==="hex8"&&(n=this.toHex8String()),e==="name"&&(n=this.toName()),e==="hsl"&&(n=this.toHslString()),e==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return Ze(this.toString())},_applyModification:function(e,r){var n=e.apply(null,[this].concat([].slice.call(r)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(FF,arguments)},brighten:function(){return this._applyModification(MF,arguments)},darken:function(){return this._applyModification(NF,arguments)},desaturate:function(){return this._applyModification(EF,arguments)},saturate:function(){return this._applyModification(kF,arguments)},greyscale:function(){return this._applyModification(RF,arguments)},spin:function(){return this._applyModification(TF,arguments)},_applyCombination:function(e,r){return e.apply(null,[this].concat([].slice.call(r)))},analogous:function(){return this._applyCombination(OF,arguments)},complement:function(){return this._applyCombination($F,arguments)},monochromatic:function(){return this._applyCombination(IF,arguments)},splitcomplement:function(){return this._applyCombination(DF,arguments)},triad:function(){return this._applyCombination(Ad,[3])},tetrad:function(){return this._applyCombination(Ad,[4])}};Ze.fromRatio=function(t,e){if(zi(t)=="object"){var r={};for(var n in t)t.hasOwnProperty(n)&&(n==="a"?r[n]=t[n]:r[n]=ro(t[n]));t=r}return Ze(t,e)};function CF(t){var e={r:0,g:0,b:0},r=1,n=null,a=null,o=null,l=!1,i=!1;return typeof t=="string"&&(t=KF(t)),zi(t)=="object"&&(Jn(t.r)&&Jn(t.g)&&Jn(t.b)?(e=xF(t.r,t.g,t.b),l=!0,i=String(t.r).substr(-1)==="%"?"prgb":"rgb"):Jn(t.h)&&Jn(t.s)&&Jn(t.v)?(n=ro(t.s),a=ro(t.v),e=wF(t.h,n,a),l=!0,i="hsv"):Jn(t.h)&&Jn(t.s)&&Jn(t.l)&&(n=ro(t.s),o=ro(t.l),e=SF(t.h,n,o),l=!0,i="hsl"),t.hasOwnProperty("a")&&(r=t.a)),r=Rh(r),{ok:l,format:t.format||i,r:Math.min(255,Math.max(e.r,0)),g:Math.min(255,Math.max(e.g,0)),b:Math.min(255,Math.max(e.b,0)),a:r}}function xF(t,e,r){return{r:It(t,255)*255,g:It(e,255)*255,b:It(r,255)*255}}function Id(t,e,r){t=It(t,255),e=It(e,255),r=It(r,255);var n=Math.max(t,e,r),a=Math.min(t,e,r),o,l,i=(n+a)/2;if(n==a)o=l=0;else{var u=n-a;switch(l=i>.5?u/(2-n-a):u/(n+a),n){case t:o=(e-r)/u+(e1&&(f-=1),f<1/6?c+(d-c)*6*f:f<1/2?d:f<2/3?c+(d-c)*(2/3-f)*6:c}if(e===0)n=a=o=r;else{var i=r<.5?r*(1+e):r+e-r*e,u=2*r-i;n=l(u,i,t+1/3),a=l(u,i,t),o=l(u,i,t-1/3)}return{r:n*255,g:a*255,b:o*255}}function _d(t,e,r){t=It(t,255),e=It(e,255),r=It(r,255);var n=Math.max(t,e,r),a=Math.min(t,e,r),o,l,i=n,u=n-a;if(l=n===0?0:u/n,n==a)o=0;else{switch(n){case t:o=(e-r)/u+(e>1)+720)%360;--e;)n.h=(n.h+a)%360,o.push(Ze(n));return o}function IF(t,e){e=e||6;for(var r=Ze(t).toHsv(),n=r.h,a=r.s,o=r.v,l=[],i=1/e;e--;)l.push(Ze({h:n,s:a,v:o})),o=(o+i)%1;return l}Ze.mix=function(t,e,r){r=r===0?0:r||50;var n=Ze(t).toRgb(),a=Ze(e).toRgb(),o=r/100,l={r:(a.r-n.r)*o+n.r,g:(a.g-n.g)*o+n.g,b:(a.b-n.b)*o+n.b,a:(a.a-n.a)*o+n.a};return Ze(l)};Ze.readability=function(t,e){var r=Ze(t),n=Ze(e);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)};Ze.isReadable=function(t,e,r){var n=Ze.readability(t,e),a,o;switch(o=!1,a=VF(r),a.level+a.size){case"AAsmall":case"AAAlarge":o=n>=4.5;break;case"AAlarge":o=n>=3;break;case"AAAsmall":o=n>=7;break}return o};Ze.mostReadable=function(t,e,r){var n=null,a=0,o,l,i,u;r=r||{},l=r.includeFallbackColors,i=r.level,u=r.size;for(var c=0;ca&&(a=o,n=Ze(e[c]));return Ze.isReadable(t,n,{level:i,size:u})||!l?n:(r.includeFallbackColors=!1,Ze.mostReadable(t,["#fff","#000"],r))};var Vs=Ze.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},_F=Ze.hexNames=LF(Vs);function LF(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}function Rh(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function It(t,e){jF(t)&&(t="100%");var r=AF(t);return t=Math.min(e,Math.max(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),Math.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function wl(t){return Math.min(1,Math.max(0,t))}function vn(t){return parseInt(t,16)}function jF(t){return typeof t=="string"&&t.indexOf(".")!=-1&&parseFloat(t)===1}function AF(t){return typeof t=="string"&&t.indexOf("%")!=-1}function Dn(t){return t.length==1?"0"+t:""+t}function ro(t){return t<=1&&(t=t*100+"%"),t}function Fh(t){return Math.round(parseFloat(t)*255).toString(16)}function Kd(t){return vn(t)/255}var Tn=function(){var t="[-\\+]?\\d+%?",e="[-\\+]?\\d*\\.\\d+%?",r="(?:"+e+")|(?:"+t+")",n="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?",a="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?";return{CSS_UNIT:new RegExp(r),rgb:new RegExp("rgb"+n),rgba:new RegExp("rgba"+a),hsl:new RegExp("hsl"+n),hsla:new RegExp("hsla"+a),hsv:new RegExp("hsv"+n),hsva:new RegExp("hsva"+a),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function Jn(t){return!!Tn.CSS_UNIT.exec(t)}function KF(t){t=t.replace(yF,"").replace(bF,"").toLowerCase();var e=!1;if(Vs[t])t=Vs[t],e=!0;else if(t=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=Tn.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=Tn.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=Tn.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=Tn.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=Tn.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=Tn.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=Tn.hex8.exec(t))?{r:vn(r[1]),g:vn(r[2]),b:vn(r[3]),a:Kd(r[4]),format:e?"name":"hex8"}:(r=Tn.hex6.exec(t))?{r:vn(r[1]),g:vn(r[2]),b:vn(r[3]),format:e?"name":"hex"}:(r=Tn.hex4.exec(t))?{r:vn(r[1]+""+r[1]),g:vn(r[2]+""+r[2]),b:vn(r[3]+""+r[3]),a:Kd(r[4]+""+r[4]),format:e?"name":"hex8"}:(r=Tn.hex3.exec(t))?{r:vn(r[1]+""+r[1]),g:vn(r[2]+""+r[2]),b:vn(r[3]+""+r[3]),format:e?"name":"hex"}:!1}function VF(t){var e,r;return t=t||{level:"AA",size:"small"},e=(t.level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),e!=="AA"&&e!=="AAA"&&(e="AA"),r!=="small"&&r!=="large"&&(r="small"),{level:e,size:r}}var Vd=function(e){var r=["r","g","b","a","h","s","l","v"],n=0,a=0;return gF(r,function(o){if(e[o]&&(n+=1,isNaN(e[o])||(a+=1),o==="s"||o==="l")){var l=/^\d+%$/;l.test(e[o])&&(a+=1)}}),n===a?e:!1},Si=function(e,r){var n=e.hex?Ze(e.hex):Ze(e),a=n.toHsl(),o=n.toHsv(),l=n.toRgb(),i=n.toHex();a.s===0&&(a.h=r||0,o.h=r||0);var u=i==="000000"&&l.a===0;return{hsl:a,hex:u?"transparent":"#".concat(i),rgb:l,hsv:o,oldHue:e.h||r||a.h,source:e.source}},zF=function(e){if(e==="transparent")return!0;var r=String(e).charAt(0)==="#"?1:0;return e.length!==4+r&&e.length<7+r&&Ze(e).isValid()};function ka(t){"@babel/helpers - typeof";return ka=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ka(t)}function zs(){return zs=Object.assign?Object.assign.bind():function(t){for(var e=1;e"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Bi(t){return Bi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Bi(t)}var QF=function(e){var r=function(n){YF(o,n);var a=GF(o);function o(l){var i;return HF(this,o),i=a.call(this),i.handleChange=function(u,c){var d=Vd(u);if(d){var f=Si(u,u.h||i.state.oldHue);i.setState(f),i.props.onChangeComplete&&i.debounce(i.props.onChangeComplete,f,c),i.props.onChange&&i.props.onChange(f,c)}},i.handleSwatchHover=function(u,c){var d=Vd(u);if(d){var f=Si(u,u.h||i.state.oldHue);i.props.onSwatchHover&&i.props.onSwatchHover(f,c)}},i.state=Qa({},Si(l.color,0)),i.debounce=Hp(function(u,c,d){u(c,d)},100),i}return WF(o,[{key:"render",value:function(){var i={};return this.props.onSwatchHover&&(i.onSwatchHover=this.handleSwatchHover),G.createElement(e,zs({},this.props,this.state,{onChange:this.handleChange},i))}}],[{key:"getDerivedStateFromProps",value:function(i,u){return Qa({},Si(i.color,u.oldHue))}}]),o}(s.PureComponent||s.Component);return r.propTypes=Qa({},e.propTypes),r.defaultProps=Qa(Qa({},e.defaultProps),{},{color:{h:250,s:.5,l:.2,a:1}}),r};function Ra(t){"@babel/helpers - typeof";return Ra=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ra(t)}function JF(t,e,r){return e=Nh(e),e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function eM(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Hd(t,e){for(var r=0;r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Hi(t){return Hi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Hi(t)}var sM=1,Th=38,uM=40,cM=[Th,uM],dM=function(e){return cM.indexOf(e)>-1},fM=function(e){return Number(String(e).replace(/%/g,""))},vM=1,Ja=function(t){rM(r,t);var e=aM(r);function r(n){var a;return eM(this,r),a=e.call(this),a.handleBlur=function(){a.state.blurValue&&a.setState({value:a.state.blurValue,blurValue:null})},a.handleChange=function(o){a.setUpdatedValue(o.target.value,o)},a.handleKeyDown=function(o){var l=fM(o.target.value);if(!isNaN(l)&&dM(o.keyCode)){var i=a.getArrowOffset(),u=o.keyCode===Th?l+i:l-i;a.setUpdatedValue(u,o)}},a.handleDrag=function(o){if(a.props.dragLabel){var l=Math.round(a.props.value+o.movementX);l>=0&&l<=a.props.dragMax&&a.props.onChange&&a.props.onChange(a.getValueObjectWithLabel(l),o)}},a.handleMouseDown=function(o){a.props.dragLabel&&(o.preventDefault(),a.handleDrag(o),window.addEventListener("mousemove",a.handleDrag),window.addEventListener("mouseup",a.handleMouseUp))},a.handleMouseUp=function(){a.unbindEventListeners()},a.unbindEventListeners=function(){window.removeEventListener("mousemove",a.handleDrag),window.removeEventListener("mouseup",a.handleMouseUp)},a.state={value:String(n.value).toUpperCase(),blurValue:String(n.value).toUpperCase()},a.inputId="rc-editable-input-".concat(vM++),a}return tM(r,[{key:"componentDidUpdate",value:function(a,o){this.props.value!==this.state.value&&(a.value!==this.props.value||o.value!==this.state.value)&&(this.input===document.activeElement?this.setState({blurValue:String(this.props.value).toUpperCase()}):this.setState({value:String(this.props.value).toUpperCase(),blurValue:!this.state.blurValue&&String(this.props.value).toUpperCase()}))}},{key:"componentWillUnmount",value:function(){this.unbindEventListeners()}},{key:"getValueObjectWithLabel",value:function(a){return JF({},this.props.label,a)}},{key:"getArrowOffset",value:function(){return this.props.arrowOffset||sM}},{key:"setUpdatedValue",value:function(a,o){var l=this.props.label?this.getValueObjectWithLabel(a):a;this.props.onChange&&this.props.onChange(l,o),this.setState({value:a})}},{key:"render",value:function(){var a=this,o=Tr({default:{wrap:{position:"relative"}},"user-override":{wrap:this.props.style&&this.props.style.wrap?this.props.style.wrap:{},input:this.props.style&&this.props.style.input?this.props.style.input:{},label:this.props.style&&this.props.style.label?this.props.style.label:{}},"dragLabel-true":{label:{cursor:"ew-resize"}}},{"user-override":!0},this.props);return G.createElement("div",{style:o.wrap},G.createElement("input",{id:this.inputId,style:o.input,ref:function(i){return a.input=i},value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleChange,onBlur:this.handleBlur,placeholder:this.props.placeholder,spellCheck:"false"}),this.props.label&&!this.props.hideLabel?G.createElement("label",{htmlFor:this.inputId,style:o.label,onMouseDown:this.handleMouseDown},this.props.label):null)}}]),r}(s.PureComponent||s.Component);function Fa(t){"@babel/helpers - typeof";return Fa=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fa(t)}function Ws(){return Ws=Object.assign?Object.assign.bind():function(t){for(var e=1;e"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Wi(t){return Wi=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(r){return r.__proto__||Object.getPrototypeOf(r)},Wi(t)}var wM=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"span";return function(n){yM(o,n);var a=bM(o);function o(){var l;mM(this,o);for(var i=arguments.length,u=new Array(i),c=0;c100&&(d.a=100),d.a/=100,r==null||r({h:a==null?void 0:a.h,s:a==null?void 0:a.s,l:a==null?void 0:a.l,a:d.a,source:"rgb"},f))};return G.createElement("div",{style:i.fields,className:"flexbox-fix"},G.createElement("div",{style:i.double},G.createElement(Ja,{style:{input:i.input,label:i.label},label:"hex",value:o==null?void 0:o.replace("#",""),onChange:u})),G.createElement("div",{style:i.single},G.createElement(Ja,{style:{input:i.input,label:i.label},label:"r",value:n==null?void 0:n.r,onChange:u,dragLabel:"true",dragMax:"255"})),G.createElement("div",{style:i.single},G.createElement(Ja,{style:{input:i.input,label:i.label},label:"g",value:n==null?void 0:n.g,onChange:u,dragLabel:"true",dragMax:"255"})),G.createElement("div",{style:i.single},G.createElement(Ja,{style:{input:i.input,label:i.label},label:"b",value:n==null?void 0:n.b,onChange:u,dragLabel:"true",dragMax:"255"})),G.createElement("div",{style:i.alpha},G.createElement(Ja,{style:{input:i.input,label:i.label},label:"a",value:Math.round(((n==null?void 0:n.a)||0)*100),onChange:u,dragLabel:"true",dragMax:"100"})))};function wo(t){"@babel/helpers - typeof";return wo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},wo(t)}function Gd(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,n)}return r}function qd(t){for(var e=1;e=0&&je<=24),Je));return C.jsx("div",{style:p(p(p({},ze),fe(Re>0,{paddingRight:Re/2,paddingLeft:Re/2})),fe(Fe>0,{paddingTop:Fe/2,paddingBottom:Fe/2})),className:ye,children:G.cloneElement(We)},"pro-card-col-".concat((We==null?void 0:We.key)||Oe))}return We}),Ge=pe("".concat(se),o,(r={},B(r,"".concat(se,"-border"),D),B(r,"".concat(se,"-contain-card"),Ee),B(r,"".concat(se,"-loading"),x),B(r,"".concat(se,"-split"),P==="vertical"||P==="horizontal"),B(r,"".concat(se,"-ghost"),R),B(r,"".concat(se,"-hoverable"),L),B(r,"".concat(se,"-size-").concat($),$),B(r,"".concat(se,"-type-").concat(q),q),B(r,"".concat(se,"-collapse"),le),B(r,"".concat(se,"-checked"),Z),r)),Qe=pe("".concat(se,"-body"),(n={},B(n,"".concat(se,"-body-center"),b==="center"),B(n,"".concat(se,"-body-direction-column"),P==="horizontal"||j==="column"),B(n,"".concat(se,"-body-wrap"),g&&Ee),n)),ct=p(p(p({},fe(Re>0,{marginRight:-Re/2,marginLeft:-Re/2})),fe(Fe>0,{marginTop:-Fe/2,marginBottom:-Fe/2})),u),dt=G.isValidElement(x)?x:C.jsx(l9,{prefix:se,style:u.padding===0||u.padding==="0px"?{padding:24}:void 0}),mt=K&&_===void 0&&(z?z({collapsed:le}):C.jsx(No,{rotate:le?void 0:90,className:"".concat(se,"-collapsible-icon")}));return C.jsxs("div",p(p({className:Ge,style:l,ref:e,onClick:function(Oe){var ot;U==null||U(Oe),te==null||(ot=te.onClick)===null||ot===void 0||ot.call(te,Oe)}},tn(te,["prefixCls","colSpan"])),{},{children:[(f||m||mt)&&C.jsxs("div",{className:pe("".concat(se,"-header"),(a={},B(a,"".concat(se,"-header-border"),M||q==="inner"),B(a,"".concat(se,"-header-collapsible"),mt),a)),style:d,onClick:function(){mt&&ge(!le)},children:[C.jsxs("div",{className:"".concat(se,"-title"),children:[mt,C.jsx(Co,{label:f,tooltip:E||h,subTitle:v})]}),m&&C.jsx("div",{className:"".concat(se,"-extra"),children:m})]}),ae?C.jsx("div",{className:"".concat(se,"-tabs"),children:C.jsx(ga,p(p({onChange:ae.onChange},ae),{},{items:ve,children:x?dt:O}))}):C.jsx("div",{className:Qe,style:ct,children:x?dt:we}),C.jsx(o9,{actions:F,prefixCls:se})]}))});const Eo=c9;var d9=function(e){var r=s.useContext(rt.ConfigContext),n=r.getPrefixCls,a=n("pro-card-divider"),o=e.className,l=e.style,i=l===void 0?{}:l,u=e.type,c=pe(a,o,B({},"".concat(a,"-").concat(u),u));return C.jsx("div",{className:c,style:i})};const f9=d9;var v9=function(e){return C.jsx(Eo,p({bodyStyle:{padding:0}},e))},Qo=Eo;Qo.isProCard=!0;Qo.Divider=f9;Qo.TabPane=r9;Qo.Group=v9;const m9=Qo;const h9={moneySymbol:"$",form:{lightFilter:{more:"المزيد",clear:"نظف",confirm:"تأكيد",itemUnit:"عناصر"}},tableForm:{search:"ابحث",reset:"إعادة تعيين",submit:"ارسال",collapsed:"مُقلص",expand:"مُوسع",inputPlaceholder:"الرجاء الإدخال",selectPlaceholder:"الرجاء الإختيار"},alert:{clear:"نظف",selected:"محدد",item:"عنصر"},pagination:{total:{range:" ",total:"من",item:"عناصر"}},tableToolBar:{leftPin:"ثبت على اليسار",rightPin:"ثبت على اليمين",noPin:"الغاء التثبيت",leftFixedTitle:"لصق على اليسار",rightFixedTitle:"لصق على اليمين",noFixedTitle:"إلغاء الإلصاق",reset:"إعادة تعيين",columnDisplay:"الأعمدة المعروضة",columnSetting:"الإعدادات",fullScreen:"وضع كامل الشاشة",exitFullScreen:"الخروج من وضع كامل الشاشة",reload:"تحديث",density:"الكثافة",densityDefault:"افتراضي",densityLarger:"أكبر",densityMiddle:"وسط",densitySmall:"مدمج"},stepsForm:{next:"التالي",prev:"السابق",submit:"أنهى"},loginForm:{submitText:"تسجيل الدخول"},editableTable:{action:{save:"أنقذ",cancel:"إلغاء الأمر",delete:"حذف",add:"إضافة صف من البيانات"}},switch:{open:"مفتوح",close:"غلق"}},p9={moneySymbol:"€",form:{lightFilter:{more:"Máis",clear:"Limpar",confirm:"Confirmar",itemUnit:"Elementos"}},tableForm:{search:"Cercar",reset:"Netejar",submit:"Enviar",collapsed:"Expandir",expand:"Col·lapsar",inputPlaceholder:"Introduïu valor",selectPlaceholder:"Seleccioneu valor"},alert:{clear:"Netejar",selected:"Seleccionat",item:"Article"},pagination:{total:{range:" ",total:"de",item:"articles"}},tableToolBar:{leftPin:"Pin a l'esquerra",rightPin:"Pin a la dreta",noPin:"Sense Pin",leftFixedTitle:"Fixat a l'esquerra",rightFixedTitle:"Fixat a la dreta",noFixedTitle:"Sense fixar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuració",fullScreen:"Pantalla Completa",exitFullScreen:"Sortir Pantalla Completa",reload:"Refrescar",density:"Densitat",densityDefault:"Per Defecte",densityLarger:"Llarg",densityMiddle:"Mitjà",densitySmall:"Compacte"},stepsForm:{next:"Següent",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Gardar",cancel:"Cancelar",delete:"Eliminar",add:"engadir unha fila de datos"}},switch:{open:"aberto",close:"pechar"}},g9={moneySymbol:"€",form:{lightFilter:{more:"Mehr",clear:"Zurücksetzen",confirm:"Bestätigen",itemUnit:"Einträge"}},tableForm:{search:"Suchen",reset:"Zurücksetzen",submit:"Absenden",collapsed:"Zeige mehr",expand:"Zeige weniger",inputPlaceholder:"Bitte eingeben",selectPlaceholder:"Bitte auswählen"},alert:{clear:"Zurücksetzen",selected:"Ausgewählt",item:"Eintrag"},pagination:{total:{range:" ",total:"von",item:"Einträgen"}},tableToolBar:{leftPin:"Links anheften",rightPin:"Rechts anheften",noPin:"Nicht angeheftet",leftFixedTitle:"Links fixiert",rightFixedTitle:"Rechts fixiert",noFixedTitle:"Nicht fixiert",reset:"Zurücksetzen",columnDisplay:"Angezeigte Reihen",columnSetting:"Einstellungen",fullScreen:"Vollbild",exitFullScreen:"Vollbild verlassen",reload:"Aktualisieren",density:"Abstand",densityDefault:"Standard",densityLarger:"Größer",densityMiddle:"Mittel",densitySmall:"Kompakt"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Anmelden"},editableTable:{action:{save:"Retten",cancel:"Abbrechen",delete:"Löschen",add:"Hinzufügen einer Datenzeile"}},switch:{open:"offen",close:"schließen"}},y9={moneySymbol:"£",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},b9={moneySymbol:"$",deleteThisLine:"Delete this line",copyThisLine:"Copy this line",form:{lightFilter:{more:"More",clear:"Clear",confirm:"Confirm",itemUnit:"Items"}},tableForm:{search:"Query",reset:"Reset",submit:"Submit",collapsed:"Expand",expand:"Collapse",inputPlaceholder:"Please enter",selectPlaceholder:"Please select"},alert:{clear:"Clear",selected:"Selected",item:"Item"},pagination:{total:{range:" ",total:"of",item:"items"}},tableToolBar:{leftPin:"Pin to left",rightPin:"Pin to right",noPin:"Unpinned",leftFixedTitle:"Fixed the left",rightFixedTitle:"Fixed the right",noFixedTitle:"Not Fixed",reset:"Reset",columnDisplay:"Column Display",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Exit Full Screen",reload:"Refresh",density:"Density",densityDefault:"Default",densityLarger:"Larger",densityMiddle:"Middle",densitySmall:"Compact"},stepsForm:{next:"Next",prev:"Previous",submit:"Finish"},loginForm:{submitText:"Login"},editableTable:{onlyOneLineEditor:"Only one line can be edited",action:{save:"Save",cancel:"Cancel",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"close"}},C9={moneySymbol:"€",form:{lightFilter:{more:"Más",clear:"Limpiar",confirm:"Confirmar",itemUnit:"artículos"}},tableForm:{search:"Buscar",reset:"Limpiar",submit:"Submit",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Ingrese valor",selectPlaceholder:"Seleccione valor"},alert:{clear:"Limpiar",selected:"Seleccionado",item:"Articulo"},pagination:{total:{range:" ",total:"de",item:"artículos"}},tableToolBar:{leftPin:"Pin a la izquierda",rightPin:"Pin a la derecha",noPin:"Sin Pin",leftFixedTitle:"Fijado a la izquierda",rightFixedTitle:"Fijado a la derecha",noFixedTitle:"Sin Fijar",reset:"Reiniciar",columnDisplay:"Mostrar Columna",columnSetting:"Configuración",fullScreen:"Pantalla Completa",exitFullScreen:"Salir Pantalla Completa",reload:"Refrescar",density:"Densidad",densityDefault:"Por Defecto",densityLarger:"Largo",densityMiddle:"Medio",densitySmall:"Compacto"},stepsForm:{next:"Siguiente",prev:"Anterior",submit:"Finalizar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Guardar",cancel:"Descartar",delete:"Borrar",add:"añadir una fila de datos"}},switch:{open:"abrir",close:"cerrar"}},x9={moneySymbol:"تومان",form:{lightFilter:{more:"بیشتر",clear:"پاک کردن",confirm:"تایید",itemUnit:"مورد"}},tableForm:{search:"جستجو",reset:"بازنشانی",submit:"تایید",collapsed:"نمایش بیشتر",expand:"نمایش کمتر",inputPlaceholder:"پیدا کنید",selectPlaceholder:"انتخاب کنید"},alert:{clear:"پاک سازی",selected:"انتخاب",item:"مورد"},pagination:{total:{range:" ",total:"از",item:"مورد"}},tableToolBar:{leftPin:"سنجاق به چپ",rightPin:"سنجاق به راست",noPin:"سنجاق نشده",leftFixedTitle:"ثابت شده در چپ",rightFixedTitle:"ثابت شده در راست",noFixedTitle:"شناور",reset:"بازنشانی",columnDisplay:"نمایش همه",columnSetting:"تنظیمات",fullScreen:"تمام صفحه",exitFullScreen:"خروج از حالت تمام صفحه",reload:"تازه سازی",density:"تراکم",densityDefault:"پیش فرض",densityLarger:"بزرگ",densityMiddle:"متوسط",densitySmall:"کوچک"},stepsForm:{next:"بعدی",prev:"قبلی",submit:"اتمام"},loginForm:{submitText:"ورود"},editableTable:{action:{save:"ذخیره",cancel:"لغو",delete:"حذف",add:"یک ردیف داده اضافه کنید"}},switch:{open:"باز",close:"نزدیک"}},S9={moneySymbol:"€",form:{lightFilter:{more:"Plus",clear:"Effacer",confirm:"Confirmer",itemUnit:"Items"}},tableForm:{search:"Rechercher",reset:"Réinitialiser",submit:"Envoyer",collapsed:"Agrandir",expand:"Réduire",inputPlaceholder:"Entrer une valeur",selectPlaceholder:"Sélectionner une valeur"},alert:{clear:"Réinitialiser",selected:"Sélectionné",item:"Item"},pagination:{total:{range:" ",total:"sur",item:"éléments"}},tableToolBar:{leftPin:"Épingler à gauche",rightPin:"Épingler à gauche",noPin:"Sans épingle",leftFixedTitle:"Fixer à gauche",rightFixedTitle:"Fixer à droite",noFixedTitle:"Non fixé",reset:"Réinitialiser",columnDisplay:"Affichage colonne",columnSetting:"Réglages",fullScreen:"Plein écran",exitFullScreen:"Quitter Plein écran",reload:"Rafraichir",density:"Densité",densityDefault:"Par défaut",densityLarger:"Larger",densityMiddle:"Moyenne",densitySmall:"Compacte"},stepsForm:{next:"Suivante",prev:"Précédente",submit:"Finaliser"},loginForm:{submitText:"Se connecter"},editableTable:{action:{save:"Sauvegarder",cancel:"Annuler",delete:"Supprimer",add:"ajouter une ligne de données"}},switch:{open:"ouvert",close:"près"}},w9={moneySymbol:"kn",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pretraži",reset:"Poništi",submit:"Potvrdi",collapsed:"Raširi",expand:"Skupi",inputPlaceholder:"Unesite",selectPlaceholder:"Odaberite"},alert:{clear:"Očisti",selected:"Odaberi",item:"stavke"},pagination:{total:{range:" ",total:"od",item:"stavke"}},tableToolBar:{leftPin:"Prikači lijevo",rightPin:"Prikači desno",noPin:"Bez prikačenja",leftFixedTitle:"Fiksiraj lijevo",rightFixedTitle:"Fiksiraj desno",noFixedTitle:"Bez fiksiranja",reset:"Resetiraj",columnDisplay:"Prikaz stupaca",columnSetting:"Postavke",fullScreen:"Puni zaslon",exitFullScreen:"Izađi iz punog zaslona",reload:"Ponovno učitaj",density:"Veličina",densityDefault:"Zadano",densityLarger:"Veliko",densityMiddle:"Srednje",densitySmall:"Malo"},stepsForm:{next:"Sljedeći",prev:"Prethodni",submit:"Kraj"},loginForm:{submitText:"Prijava"},editableTable:{action:{save:"Spremi",cancel:"Odustani",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"otvori",close:"zatvori"}},P9={moneySymbol:"RP",form:{lightFilter:{more:"Lebih",clear:"Hapus",confirm:"Konfirmasi",itemUnit:"Unit"}},tableForm:{search:"Cari",reset:"Atur ulang",submit:"Kirim",collapsed:"Lebih sedikit",expand:"Lebih banyak",inputPlaceholder:"Masukkan pencarian",selectPlaceholder:"Pilih"},alert:{clear:"Hapus",selected:"Dipilih",item:"Butir"},pagination:{total:{range:" ",total:"Dari",item:"Butir"}},tableToolBar:{leftPin:"Pin kiri",rightPin:"Pin kanan",noPin:"Tidak ada pin",leftFixedTitle:"Rata kiri",rightFixedTitle:"Rata kanan",noFixedTitle:"Tidak tetap",reset:"Atur ulang",columnDisplay:"Tampilan kolom",columnSetting:"Pengaturan",fullScreen:"Layar penuh",exitFullScreen:"Keluar layar penuh",reload:"Atur ulang",density:"Kerapatan",densityDefault:"Standar",densityLarger:"Lebih besar",densityMiddle:"Sedang",densitySmall:"Rapat"},stepsForm:{next:"Selanjutnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Login"},editableTable:{action:{save:"simpan",cancel:"batal",delete:"hapus",add:"Tambahkan baris data"}},switch:{open:"buka",close:"tutup"}},E9={moneySymbol:"€",form:{lightFilter:{more:"più",clear:"pulisci",confirm:"conferma",itemUnit:"elementi"}},tableForm:{search:"Filtra",reset:"Pulisci",submit:"Invia",collapsed:"Espandi",expand:"Contrai",inputPlaceholder:"Digita",selectPlaceholder:"Seleziona"},alert:{clear:"Rimuovi",selected:"Selezionati",item:"elementi"},pagination:{total:{range:" ",total:"di",item:"elementi"}},tableToolBar:{leftPin:"Fissa a sinistra",rightPin:"Fissa a destra",noPin:"Ripristina posizione",leftFixedTitle:"Fissato a sinistra",rightFixedTitle:"Fissato a destra",noFixedTitle:"Non fissato",reset:"Ripristina",columnDisplay:"Disposizione colonne",columnSetting:"Impostazioni",fullScreen:"Modalità schermo intero",exitFullScreen:"Esci da modalità schermo intero",reload:"Ricarica",density:"Grandezza tabella",densityDefault:"predefinito",densityLarger:"Grande",densityMiddle:"Media",densitySmall:"Compatta"},stepsForm:{next:"successivo",prev:"precedente",submit:"finisci"},loginForm:{submitText:"Accedi"},editableTable:{action:{save:"salva",cancel:"annulla",delete:"Delete",add:"add a row of data"}},switch:{open:"open",close:"chiudi"}},k9={moneySymbol:"¥",form:{lightFilter:{more:"もっと",clear:"明確",confirm:"確認",itemUnit:"項目"}},tableForm:{search:"検索",reset:"リセット",submit:"提交",collapsed:"展開",expand:"収納",inputPlaceholder:"入力してください",selectPlaceholder:"選択してください"},alert:{clear:"クリア",selected:"選択した",item:"項目"},pagination:{total:{range:"記事",total:"/合計",item:" "}},tableToolBar:{leftPin:"左に固定",rightPin:"右に固定",noPin:"キャンセル",leftFixedTitle:"左に固定された項目",rightFixedTitle:"右に固定された項目",noFixedTitle:"固定されてない項目",reset:"リセット",columnDisplay:"表示列",columnSetting:"列表示設定",fullScreen:"フルスクリーン",exitFullScreen:"終了",reload:"更新",density:"行高",densityDefault:"デフォルト",densityLarger:"默认",densityMiddle:"中",densitySmall:"小"},stepsForm:{next:"次のステップ",prev:"前",submit:"送信"},loginForm:{submitText:"ログイン"},editableTable:{action:{save:"救う",cancel:"キャンセル",delete:"削除",add:"1行のデータを追加します"}},switch:{open:"オープン",close:"近い"}},R9={moneySymbol:"₩",form:{lightFilter:{more:"더보기",clear:"취소",confirm:"확인",itemUnit:"건수"}},tableForm:{search:"조회",reset:"초기화",submit:"제출",collapsed:"확장",expand:"닫기",inputPlaceholder:"입력해 주세요",selectPlaceholder:"선택해 주세요"},alert:{clear:"취소",selected:"선택",item:"건"},pagination:{total:{range:" ",total:"/ 총",item:"건"}},tableToolBar:{leftPin:"왼쪽으로 핀",rightPin:"오른쪽으로 핀",noPin:"핀 제거",leftFixedTitle:"왼쪽으로 고정",rightFixedTitle:"오른쪽으로 고정",noFixedTitle:"비고정",reset:"초기화",columnDisplay:"컬럼 표시",columnSetting:"설정",fullScreen:"전체 화면",exitFullScreen:"전체 화면 취소",reload:"다시 읽기",density:"여백",densityDefault:"기본",densityLarger:"많은 여백",densityMiddle:"중간 여백",densitySmall:"좁은 여백"},stepsForm:{next:"다음",prev:"이전",submit:"종료"},loginForm:{submitText:"로그인"},editableTable:{action:{save:"저장",cancel:"취소",delete:"삭제",add:"데이터 행 추가"}},switch:{open:"열",close:"가까 운"}},F9={moneySymbol:"₮",form:{lightFilter:{more:"Илүү",clear:"Цэвэрлэх",confirm:"Баталгаажуулах",itemUnit:"Нэгжүүд"}},tableForm:{search:"Хайх",reset:"Шинэчлэх",submit:"Илгээх",collapsed:"Өргөтгөх",expand:"Хураах",inputPlaceholder:"Утга оруулна уу",selectPlaceholder:"Утга сонгоно уу"},alert:{clear:"Цэвэрлэх",selected:"Сонгогдсон",item:"Нэгж"},pagination:{total:{range:" ",total:"Нийт",item:"мөр"}},tableToolBar:{leftPin:"Зүүн тийш бэхлэх",rightPin:"Баруун тийш бэхлэх",noPin:"Бэхлэхгүй",leftFixedTitle:"Зүүн зэрэгцүүлэх",rightFixedTitle:"Баруун зэрэгцүүлэх",noFixedTitle:"Зэрэгцүүлэхгүй",reset:"Шинэчлэх",columnDisplay:"Баганаар харуулах",columnSetting:"Тохиргоо",fullScreen:"Бүтэн дэлгэцээр",exitFullScreen:"Бүтэн дэлгэц цуцлах",reload:"Шинэчлэх",density:"Хэмжээ",densityDefault:"Хэвийн",densityLarger:"Том",densityMiddle:"Дунд",densitySmall:"Жижиг"},stepsForm:{next:"Дараах",prev:"Өмнөх",submit:"Дуусгах"},loginForm:{submitText:"Нэвтрэх"},editableTable:{action:{save:"Хадгалах",cancel:"Цуцлах",delete:"Устгах",add:"Мөр нэмэх"}},switch:{open:"Нээх",close:"Хаах"}},M9={moneySymbol:"RM",form:{lightFilter:{more:"Lebih banyak",clear:"Jelas",confirm:"Mengesahkan",itemUnit:"Item"}},tableForm:{search:"Cari",reset:"Menetapkan semula",submit:"Hantar",collapsed:"Kembang",expand:"Kuncup",inputPlaceholder:"Sila masuk",selectPlaceholder:"Sila pilih"},alert:{clear:"Padam",selected:"Dipilih",item:"Item"},pagination:{total:{range:" ",total:"daripada",item:"item"}},tableToolBar:{leftPin:"Pin ke kiri",rightPin:"Pin ke kanan",noPin:"Tidak pin",leftFixedTitle:"Tetap ke kiri",rightFixedTitle:"Tetap ke kanan",noFixedTitle:"Tidak Tetap",reset:"Menetapkan semula",columnDisplay:"Lajur",columnSetting:"Settings",fullScreen:"Full Screen",exitFullScreen:"Keluar Full Screen",reload:"Muat Semula",density:"Densiti",densityDefault:"Biasa",densityLarger:"Besar",densityMiddle:"Tengah",densitySmall:"Kecil"},stepsForm:{next:"Seterusnya",prev:"Sebelumnya",submit:"Selesai"},loginForm:{submitText:"Log Masuk"},editableTable:{action:{save:"Simpan",cancel:"Membatalkan",delete:"Menghapuskan",add:"tambah baris data"}},switch:{open:"Terbuka",close:"Tutup"}},N9={moneySymbol:"zł",form:{lightFilter:{more:"Więcej",clear:"Wyczyść",confirm:"Potwierdź",itemUnit:"Ilość"}},tableForm:{search:"Szukaj",reset:"Reset",submit:"Zatwierdź",collapsed:"Pokaż wiecej",expand:"Pokaż mniej",inputPlaceholder:"Proszę podać",selectPlaceholder:"Proszę wybrać"},alert:{clear:"Wyczyść",selected:"Wybrane",item:"Wpis"},pagination:{total:{range:" ",total:"z",item:"Wpisów"}},tableToolBar:{leftPin:"Przypnij do lewej",rightPin:"Przypnij do prawej",noPin:"Odepnij",leftFixedTitle:"Przypięte do lewej",rightFixedTitle:"Przypięte do prawej",noFixedTitle:"Nieprzypięte",reset:"Reset",columnDisplay:"Wyświetlane wiersze",columnSetting:"Ustawienia",fullScreen:"Pełen ekran",exitFullScreen:"Zamknij pełen ekran",reload:"Odśwież",density:"Odstęp",densityDefault:"Standard",densityLarger:"Wiekszy",densityMiddle:"Sredni",densitySmall:"Kompaktowy"},stepsForm:{next:"Weiter",prev:"Zurück",submit:"Abschließen"},loginForm:{submitText:"Zaloguj się"},editableTable:{action:{save:"Zapisać",cancel:"Anuluj",delete:"Usunąć",add:"dodawanie wiersza danych"}},switch:{open:"otwierać",close:"zamykać"}},T9={moneySymbol:"R$",form:{lightFilter:{more:"Mais",clear:"Limpar",confirm:"Confirmar",itemUnit:"Itens"}},tableForm:{search:"Filtrar",reset:"Limpar",submit:"Confirmar",collapsed:"Expandir",expand:"Colapsar",inputPlaceholder:"Por favor insira",selectPlaceholder:"Por favor selecione"},alert:{clear:"Limpar",selected:"Selecionado(s)",item:"Item(s)"},pagination:{total:{range:" ",total:"de",item:"itens"}},tableToolBar:{leftPin:"Fixar à esquerda",rightPin:"Fixar à direita",noPin:"Desfixado",leftFixedTitle:"Fixado à esquerda",rightFixedTitle:"Fixado à direita",noFixedTitle:"Não fixado",reset:"Limpar",columnDisplay:"Mostrar Coluna",columnSetting:"Configurações",fullScreen:"Tela Cheia",exitFullScreen:"Sair da Tela Cheia",reload:"Atualizar",density:"Densidade",densityDefault:"Padrão",densityLarger:"Largo",densityMiddle:"Médio",densitySmall:"Compacto"},stepsForm:{next:"Próximo",prev:"Anterior",submit:"Enviar"},loginForm:{submitText:"Entrar"},editableTable:{action:{save:"Salvar",cancel:"Cancelar",delete:"Apagar",add:"adicionar uma linha de dados"}},switch:{open:"abrir",close:"fechar"}},$9={moneySymbol:"₽",form:{lightFilter:{more:"Еще",clear:"Очистить",confirm:"ОК",itemUnit:"Позиции"}},tableForm:{search:"Найти",reset:"Сброс",submit:"Отправить",collapsed:"Развернуть",expand:"Свернуть",inputPlaceholder:"Введите значение",selectPlaceholder:"Выберите значение"},alert:{clear:"Очистить",selected:"Выбрано",item:"элементов"},pagination:{total:{range:" ",total:"из",item:"элементов"}},tableToolBar:{leftPin:"Закрепить слева",rightPin:"Закрепить справа",noPin:"Открепить",leftFixedTitle:"Закреплено слева",rightFixedTitle:"Закреплено справа",noFixedTitle:"Не закреплено",reset:"Сброс",columnDisplay:"Отображение столбца",columnSetting:"Настройки",fullScreen:"Полный экран",exitFullScreen:"Выйти из полноэкранного режима",reload:"Обновить",density:"Размер",densityDefault:"По умолчанию",densityLarger:"Большой",densityMiddle:"Средний",densitySmall:"Сжатый"},stepsForm:{next:"Следующий",prev:"Предыдущий",submit:"Завершить"},loginForm:{submitText:"Вход"},editableTable:{action:{save:"Сохранить",cancel:"Отменить",delete:"Удалить",add:"добавить ряд данных"}},switch:{open:"Открытый чемпионат мира по теннису",close:"По адресу:"}},D9={moneySymbol:"RSD",form:{lightFilter:{more:"Više",clear:"Očisti",confirm:"Potvrdi",itemUnit:"Stavke"}},tableForm:{search:"Pronađi",reset:"Resetuj",submit:"Pošalji",collapsed:"Proširi",expand:"Skupi",inputPlaceholder:"Molimo unesite",selectPlaceholder:"Molimo odaberite"},alert:{clear:"Očisti",selected:"Odabrano",item:"Stavka"},pagination:{total:{range:" ",total:"od",item:"stavki"}},tableToolBar:{leftPin:"Zakači levo",rightPin:"Zakači desno",noPin:"Nije zakačeno",leftFixedTitle:"Fiksirano levo",rightFixedTitle:"Fiksirano desno",noFixedTitle:"Nije fiksirano",reset:"Resetuj",columnDisplay:"Prikaz kolona",columnSetting:"Podešavanja",fullScreen:"Pun ekran",exitFullScreen:"Zatvori pun ekran",reload:"Osveži",density:"Veličina",densityDefault:"Podrazumevana",densityLarger:"Veća",densityMiddle:"Srednja",densitySmall:"Kompaktna"},stepsForm:{next:"Dalje",prev:"Nazad",submit:"Gotovo"},loginForm:{submitText:"Prijavi se"},editableTable:{action:{save:"Sačuvaj",cancel:"Poništi",delete:"Obriši",add:"dodajte red podataka"}},switch:{open:"Отворите",close:"Затворите"}},O9={moneySymbol:"₺",form:{lightFilter:{more:"Daha Fazla",clear:"Temizle",confirm:"Onayla",itemUnit:"Öğeler"}},tableForm:{search:"Filtrele",reset:"Sıfırla",submit:"Gönder",collapsed:"Daha fazla",expand:"Daha az",inputPlaceholder:"Filtrelemek için bir değer girin",selectPlaceholder:"Filtrelemek için bir değer seçin"},alert:{clear:"Temizle",selected:"Seçili",item:"Öğe"},pagination:{total:{range:" ",total:"Toplam",item:"Öğe"}},tableToolBar:{leftPin:"Sola sabitle",rightPin:"Sağa sabitle",noPin:"Sabitlemeyi kaldır",leftFixedTitle:"Sola sabitlendi",rightFixedTitle:"Sağa sabitlendi",noFixedTitle:"Sabitlenmedi",reset:"Sıfırla",columnDisplay:"Kolon Görünümü",columnSetting:"Ayarlar",fullScreen:"Tam Ekran",exitFullScreen:"Tam Ekrandan Çık",reload:"Yenile",density:"Kalınlık",densityDefault:"Varsayılan",densityLarger:"Büyük",densityMiddle:"Orta",densitySmall:"Küçük"},stepsForm:{next:"Sıradaki",prev:"Önceki",submit:"Gönder"},loginForm:{submitText:"Giriş Yap"},editableTable:{action:{save:"Kaydet",cancel:"Vazgeç",delete:"Sil",add:"foegje in rige gegevens ta"}},switch:{open:"açık",close:"kapatmak"}},I9={moneySymbol:"₫",form:{lightFilter:{more:"Nhiều hơn",clear:"Trong",confirm:"Xác nhận",itemUnit:"Mục"}},tableForm:{search:"Tìm kiếm",reset:"Làm lại",submit:"Gửi đi",collapsed:"Mở rộng",expand:"Thu gọn",inputPlaceholder:"nhập dữ liệu",selectPlaceholder:"Vui lòng chọn"},alert:{clear:"Xóa",selected:"đã chọn",item:"mục"},pagination:{total:{range:" ",total:"trên",item:"mặt hàng"}},tableToolBar:{leftPin:"Ghim trái",rightPin:"Ghim phải",noPin:"Bỏ ghim",leftFixedTitle:"Cố định trái",rightFixedTitle:"Cố định phải",noFixedTitle:"Chưa cố định",reset:"Làm lại",columnDisplay:"Cột hiển thị",columnSetting:"Cấu hình",fullScreen:"Chế độ toàn màn hình",exitFullScreen:"Thoát chế độ toàn màn hình",reload:"Làm mới",density:"Mật độ hiển thị",densityDefault:"Mặc định",densityLarger:"Mặc định",densityMiddle:"Trung bình",densitySmall:"Chật"},stepsForm:{next:"Sau",prev:"Trước",submit:"Kết thúc"},loginForm:{submitText:"Đăng nhập"},editableTable:{action:{save:"Cứu",cancel:"Hủy",delete:"Xóa",add:"thêm một hàng dữ liệu"}},switch:{open:"mở",close:"đóng"}},_9={moneySymbol:"¥",deleteThisLine:"删除此行",copyThisLine:"复制此行",form:{lightFilter:{more:"更多筛选",clear:"清除",confirm:"确认",itemUnit:"项"}},tableForm:{search:"查询",reset:"重置",submit:"提交",collapsed:"展开",expand:"收起",inputPlaceholder:"请输入",selectPlaceholder:"请选择"},alert:{clear:"取消选择",selected:"已选择",item:"项"},pagination:{total:{range:"第",total:"条/总共",item:"条"}},tableToolBar:{leftPin:"固定在列首",rightPin:"固定在列尾",noPin:"不固定",leftFixedTitle:"固定在左侧",rightFixedTitle:"固定在右侧",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列设置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默认",densityMiddle:"中等",densitySmall:"紧凑"},stepsForm:{next:"下一步",prev:"上一步",submit:"提交"},loginForm:{submitText:"登录"},editableTable:{onlyOneLineEditor:"只能同时编辑一行",action:{save:"保存",cancel:"取消",delete:"删除",add:"添加一行数据"}},switch:{open:"打开",close:"关闭"}},L9={moneySymbol:"NT$",form:{lightFilter:{more:"更多篩選",clear:"清除",confirm:"確認",itemUnit:"項"}},tableForm:{search:"查詢",reset:"重置",submit:"提交",collapsed:"展開",expand:"收起",inputPlaceholder:"請輸入",selectPlaceholder:"請選擇"},alert:{clear:"取消選擇",selected:"已選擇",item:"項"},pagination:{total:{range:"第",total:"條/總共",item:"條"}},tableToolBar:{leftPin:"固定到左邊",rightPin:"固定到右邊",noPin:"不固定",leftFixedTitle:"固定在左側",rightFixedTitle:"固定在右側",noFixedTitle:"不固定",reset:"重置",columnDisplay:"列展示",columnSetting:"列設置",fullScreen:"全屏",exitFullScreen:"退出全屏",reload:"刷新",density:"密度",densityDefault:"正常",densityLarger:"默認",densityMiddle:"中等",densitySmall:"緊湊"},stepsForm:{next:"下一個",prev:"以前的",submit:"完成"},loginForm:{submitText:"登入"},editableTable:{action:{save:"保存",cancel:"取消",delete:"刪除",add:"添加一行數據"}},switch:{open:"打開",close:"關閉"}};function j9(t,e,r){var n=e.replace(/\[(\d+)\]/g,".$1").split("."),a=t,o=r,l=Er(n),i;try{for(l.s();!(i=l.n()).done;){var u=i.value;if(o=Object(a)[u],a=Object(a)[u],o===void 0)return r}}catch(c){l.e(c)}finally{l.f()}return o}var jt=function(e,r){return{getMessage:function(a,o){return j9(r,a,o)||o},locale:e}},A9=jt("mn_MN",F9),K9=jt("ar_EG",h9),Pl=jt("zh_CN",_9),V9=jt("en_US",b9),z9=jt("en_GB",y9),B9=jt("vi_VN",I9),H9=jt("it_IT",E9),W9=jt("ja_JP",k9),U9=jt("es_ES",C9),Y9=jt("ca_ES",p9),G9=jt("ru_RU",$9),q9=jt("sr_RS",D9),X9=jt("ms_MY",M9),Z9=jt("zh_TW",L9),Q9=jt("fr_FR",S9),J9=jt("pt_BR",T9),eN=jt("ko_KR",R9),tN=jt("id_ID",P9),nN=jt("de_DE",g9),rN=jt("fa_IR",x9),aN=jt("tr_TR",O9),oN=jt("pl_PL",N9),iN=jt("hr_",w9),Ma={"mn-MN":A9,"ar-EG":K9,"zh-CN":Pl,"en-US":V9,"en-GB":z9,"vi-VN":B9,"it-IT":H9,"ja-JP":W9,"es-ES":U9,"ca-ES":Y9,"ru-RU":G9,"sr-RS":q9,"ms-MY":X9,"zh-TW":Z9,"fr-FR":Q9,"pt-BR":J9,"ko-KR":eN,"id-ID":tN,"de-DE":nN,"fa-IR":rN,"tr-TR":aN,"pl-PL":oN,"hr-HR":iN},lN=Object.keys(Ma),El=G.createContext({intl:p(p({},Pl),{},{locale:"default"}),valueTypeMap:{}}),sN=El.Consumer,uN=El.Provider,Dh=function(e){if(!e)return"zh-CN";var r=e.toLocaleLowerCase();return lN.find(function(n){var a=n.toLocaleLowerCase();return a.includes(r)})},cN=function(){var e=Tu(),r=e.cache;return s.useEffect(function(){return function(){r.clear()}},[]),null},Oh=function(e){var r=e.children,n=e.autoClearCache,a=n===void 0?!1:n,o=s.useContext(rt.ConfigContext),l=o.locale,i=l===void 0?rt:G.Fragment,u=C.jsx(sN,{children:function(d){var f,v=l==null?void 0:l.locale,m=Dh(v),h=v&&((f=d.intl)===null||f===void 0?void 0:f.locale)==="default"?Ma[m]:d.intl||Ma[m],y=l===void 0?{locale:Lm}:{};return C.jsx(i,p(p({},y),{},{children:C.jsx(uN,{value:p(p({},d),{},{intl:h||Pl}),children:C.jsxs(C.Fragment,{children:[a&&C.jsx(cN,{}),r]})})}))}});return a?C.jsx(Zm,{value:{provider:function(){return new Map}},children:u}):u};function Yt(){var t=s.useContext(rt.ConfigContext),e=t.locale,r=s.useContext(El),n=r.intl;return n&&n.locale!=="default"?n:e!=null&&e.locale?Ma[Dh(e.locale)]:Pl}var dN=function(e){var r=Yt(),n=e.onClear,a=e.onConfirm,o=e.disabled,l=e.footerRender,i=s.useContext(rt.ConfigContext),u=i.getPrefixCls,c=u("pro-core-dropdown-footer"),d=[C.jsx(On,{style:{visibility:n?"visible":"hidden"},type:"link",size:"small",disabled:o,onClick:function(m){n&&n(m),m.stopPropagation()},children:r.getMessage("form.lightFilter.clear","清除")},"clear"),C.jsx(On,{"data-type":"confirm",type:"primary",size:"small",onClick:a,disabled:o,children:r.getMessage("form.lightFilter.confirm","确认")},"confirm")];if(l===!1||(l==null?void 0:l(a,n))===!1)return null;var f=(l==null?void 0:l(a,n))||d;return C.jsx("div",{className:c,onClick:function(m){return m.target.getAttribute("data-type")!=="confirm"&&m.stopPropagation()},children:f})};const fN=dN;var vN=function(e,r){var n,a=e.label,o=e.onClear,l=e.value,i=e.size,u=i===void 0?"middle":i,c=e.disabled,d=e.onLabelClick,f=e.ellipsis,v=e.placeholder,m=e.className,h=e.style,y=e.formatter,g=e.bordered,b=e.allowClear,x=b===void 0?!0:b,S=s.useContext(rt.ConfigContext),w=S.getPrefixCls,E=w("pro-core-field-label"),P=Yt(),T=s.useRef(null),M=s.useRef(null);s.useImperativeHandle(r,function(){return{labelRef:M,clearRef:T}});var k=function($){return y?y($):Array.isArray($)?$.join(","):$},D=function($,F){if(F!=null&&F!==""&&(!Array.isArray(F)||F.length)){var N,R,I=$?C.jsxs("span",{onClick:d,className:"".concat(E,"-text"),children:[$,": "]}):"",L=k(F);if(!f)return C.jsxs("span",{style:{display:"inline-flex",alignItems:"center"},children:[I,k(F)]});var j=41,_=function(){var z=Array.isArray(F)&&F.length>1,V=P.getMessage("form.lightFilter.itemUnit","项");return typeof L=="string"&&L.length>j&&z?"...".concat(F.length).concat(V):""},A=_();return C.jsxs("span",{title:typeof L=="string"?L:void 0,style:{display:"inline-flex",alignItems:"center"},children:[I,C.jsx("span",{style:{paddingLeft:4},children:typeof L=="string"?L==null||(N=L.toString())===null||N===void 0||(R=N.substr)===null||R===void 0?void 0:R.call(N,0,j):L}),A]})}return $||v};return C.jsxs("span",{className:pe(E,"".concat(E,"-").concat(u),(n={},B(n,"".concat(E,"-active"),!!l||l===0),B(n,"".concat(E,"-disabled"),c),B(n,"".concat(E,"-bordered"),g),B(n,"".concat(E,"-allow-clear"),x),n),m),style:h,ref:M,children:[D(a,l),(l||l===0)&&x&&C.jsx(eu,{role:"button",title:"清除",className:pe("".concat(E,"-icon"),"".concat(E,"-close")),onClick:function($){o&&!c&&o(),$.stopPropagation()},ref:T}),C.jsx(go,{className:pe("".concat(E,"-icon"),"".concat(E,"-arrow"))})]})};const aa=G.forwardRef(vN);var mN=function(e){var r=e.children,n=e.label,a=e.footer,o=e.disabled,l=e.onVisibleChange,i=e.visible,u=e.footerRender,c=e.placement,d=s.useContext(rt.ConfigContext),f=d.getPrefixCls,v=f("pro-core-field-dropdown");return C.jsx($o,{disabled:o,placement:c,trigger:["click"],visible:i,onVisibleChange:l,overlay:C.jsxs("div",{className:"".concat(v,"-overlay"),children:[C.jsx("div",{className:"".concat(v,"-content"),children:r}),a&&C.jsx(fN,p({disabled:o,footerRender:u},a))]}),children:C.jsx("span",{className:"".concat(v,"-label"),children:n})})};const Ih=mN;var hN=function(e){var r=e.label,n=e.tooltip,a=e.ellipsis,o=e.subTitle,l=s.useContext(rt.ConfigContext),i=l.getPrefixCls;if(!n&&!o)return C.jsx(C.Fragment,{children:r});var u=i("pro-core-label-tip"),c=typeof n=="string"||G.isValidElement(n)?{title:n}:n,d=(c==null?void 0:c.icon)||C.jsx(Df,{});return C.jsxs("div",{className:u,onMouseDown:function(v){return v.stopPropagation()},onMouseLeave:function(v){return v.stopPropagation()},onMouseMove:function(v){return v.stopPropagation()},children:[C.jsx("div",{className:pe("".concat(u,"-title"),B({},"".concat(u,"-title-ellipsis"),a)),children:r}),o&&C.jsx("div",{className:"".concat(u,"-subtitle"),children:o}),n&&C.jsx(un,p(p({},c),{},{children:C.jsx("span",{className:"".concat(u,"-icon"),children:d})}))]})};const _h=G.memo(hN);var pN=G.createContext({});const ju=pN;var gN=function(e){return e==null};const ko=gN;var Lh={time:"HH:mm:ss",timeRange:"HH:mm:ss",date:"YYYY-MM-DD",dateWeek:"YYYY-wo",dateMonth:"YYYY-MM",dateQuarter:"YYYY-\\QQ",dateYear:"YYYY",dateRange:"YYYY-MM-DD",dateTime:"YYYY-MM-DD HH:mm:ss",dateTimeRange:"YYYY-MM-DD HH:mm:ss"};function Jd(t){return Object.prototype.toString.call(t)==="[object Object]"}function yN(t){if(Jd(t)===!1)return!1;var e=t.constructor;if(e===void 0)return!0;var r=e.prototype;return!(Jd(r)===!1||r.hasOwnProperty("isPrototypeOf")===!1)}var ef=function(e,r,n){if(!r)return e;if(kt.isMoment(e)){if(r==="number")return e.valueOf();if(r==="string")return e.format(Lh[n]||"YYYY-MM-DD HH:mm:ss");if(typeof r=="string"&&r!=="string")return e.format(r);if(typeof r=="function")return r(e,n)}return e},bN=function t(e,r,n,a,o){var l={};return typeof window>"u"||Ve(e)!=="object"||ko(e)||e instanceof Blob||Array.isArray(e)?e:(Object.keys(e).forEach(function(i){var u=o?[o,i].flat(1):[i],c=hn(n,u)||"text",d="text",f;typeof c=="string"?d=c:c&&(d=c.valueType,f=c.dateFormat);var v=e[i];if(!(ko(v)&&a)){if(yN(v)&&!Array.isArray(v)&&!kt.isMoment(v)){l[i]=t(v,r,n,a,[i]);return}if(Array.isArray(v)){l[i]=v.map(function(m,h){return kt.isMoment(m)?ef(m,f||r,d):t(m,r,n,a,[i,"".concat(h)])});return}l[i]=ef(v,f||r,d)}}),l)};const CN=bN;var tf=function(e,r){return typeof r=="function"?r(kt(e)):kt(e).format(r)},xN=function(e,r){var n=Array.isArray(e)?e:[],a=ee(n,2),o=a[0],l=a[1],i,u;Array.isArray(r)?(i=r[0],u=r[1]):(i=r,u=r);var c=o?tf(o,i):"",d=l?tf(l,u):"",f=c&&d?"".concat(c," ~ ").concat(d):"";return f};const SN=xN;function Gr(t){if(typeof t=="function"){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n1&&arguments[1]!==void 0?arguments[1]:100,r=arguments.length>2?arguments[2]:void 0,n=s.useState(t),a=ee(n,2),o=a[0],l=a[1],i=Au(t);return s.useEffect(function(){var u=setTimeout(function(){l(i.current)},e);return function(){return clearTimeout(u)}},r?[e].concat(De(r)):void 0),o}function kr(t,e,r,n){if(t===e)return!0;if(t&&e&&Ve(t)==="object"&&Ve(e)==="object"){if(t.constructor!==e.constructor)return!1;var a,o,l;if(Array.isArray(t)){if(a=t.length,a!=e.length)return!1;for(o=a;o--!==0;)if(!kr(t[o],e[o],r,n))return!1;return!0}if(t instanceof Map&&e instanceof Map){if(t.size!==e.size)return!1;var i=Er(t.entries()),u;try{for(i.s();!(u=i.n()).done;)if(o=u.value,!e.has(o[0]))return!1}catch(h){i.e(h)}finally{i.f()}var c=Er(t.entries()),d;try{for(c.s();!(d=c.n()).done;)if(o=d.value,!kr(o[1],e.get(o[0]),r,n))return!1}catch(h){c.e(h)}finally{c.f()}return!0}if(t instanceof Set&&e instanceof Set){if(t.size!==e.size)return!1;var f=Er(t.entries()),v;try{for(f.s();!(v=f.n()).done;)if(o=v.value,!e.has(o[0]))return!1}catch(h){f.e(h)}finally{f.f()}return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(e)){if(a=t.length,a!=e.length)return!1;for(o=a;o--!==0;)if(t[o]!==e[o])return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf&&t.valueOf)return t.valueOf()===e.valueOf();if(t.toString!==Object.prototype.toString&&t.toString)return t.toString()===e.toString();if(l=Object.keys(t),a=l.length,a!==Object.keys(e).length)return!1;for(o=a;o--!==0;)if(!Object.prototype.hasOwnProperty.call(e,l[o]))return!1;for(o=a;o--!==0;){var m=l[o];if(!(r!=null&&r.includes(m))&&!(m==="_owner"&&t.$$typeof)&&!kr(t[m],e[m],r,n))return n&&console.log(m),!1}return!0}return t!==t&&e!==e}var EN=function(e,r,n){return kr(e,r,n)};function kN(t,e){var r=s.useRef();return EN(t,r.current,e)||(r.current=t),r.current}function RN(t,e,r){s.useEffect(t,kN(e||[],r))}var FN=typeof process<"u"&&process.versions!=null&&process.versions.node!=null,MN=function(){return typeof window<"u"&&typeof window.document<"u"&&typeof window.matchMedia<"u"&&!FN};const NN=MN;var Yl=0;function TN(t){var e=s.useState(function(){return t.proFieldKey?t.proFieldKey.toString():(Yl+=1,Yl.toString())}),r=ee(e,1),n=r[0],a=s.useRef(n),o=function(){var c=pt($e().mark(function d(){var f,v;return $e().wrap(function(h){for(;;)switch(h.prev=h.next){case 0:return h.next=2,(f=t.request)===null||f===void 0?void 0:f.call(t,t.params,t);case 2:return v=h.sent,h.abrupt("return",v);case 4:case"end":return h.stop()}},d)}));return function(){return c.apply(this,arguments)}}();s.useEffect(function(){return function(){Yl+=1}},[]);var l=Qm([a.current,t.params],o,{revalidateOnFocus:!1,shouldRetryOnError:!1,revalidateOnReconnect:!1}),i=l.data,u=l.error;return[i||u]}var $N=function(e){var r=s.useRef();return s.useEffect(function(){r.current=e}),r.current};const jh=$N;var DN=function(e){var r=!1;return(typeof e=="string"&&e.startsWith("date")&&!e.endsWith("Range")||e==="select"||e==="time")&&(r=!0),r};const ON=DN;var Ku=function(){for(var e={},r=arguments.length,n=new Array(r),a=0;a0&&arguments[0]!==void 0?arguments[0]:21;if(typeof window>"u"||!window.crypto)return(nf+=1).toFixed(0);for(var r="",n=crypto.getRandomValues(new Uint8Array(e));e--;){var a=63&n[e];r+=a<36?a.toString(36):a<62?(a-26).toString(36).toUpperCase():a<63?"_":"-"}return r},Vu=function(){return typeof window>"u"?rf():window.crypto&&window.crypto.randomUUID&&typeof crypto.randomUUID=="function"?crypto.randomUUID():rf()},IN=function(e){if(e&&e!==!0)return e};const _N=IN;var LN=function(e){var r={};if(Object.keys(e||{}).forEach(function(n){e[n]!==void 0&&(r[n]=e[n])}),!(Object.keys(r).length<1))return r};const Hn=LN;var jN=function t(e,r){return ko(e)||kt.isMoment(e)?e:Array.isArray(e)?e.map(function(n){return t(n,r)}):typeof e=="number"?kt(e):kt(e,r)};const Jo=jN;var AN=["colon","dependencies","extra","getValueFromEvent","getValueProps","hasFeedback","help","htmlFor","initialValue","noStyle","label","labelAlign","labelCol","name","preserve","normalize","required","rules","shouldUpdate","trigger","validateFirst","validateStatus","validateTrigger","valuePropName","wrapperCol","hidden","addonBefore","addonAfter"];function KN(t){var e={};return AN.forEach(function(r){t[r]!==void 0&&(e[r]=t[r])}),e}var VN="valueType request plain renderFormItem render text formItemProps valueEnum",zN="fieldProps isDefaultDom groupProps contentRender submitterProps submitter";function Ah(t){var e="".concat(VN," ").concat(zN).split(/[\s\n]+/),r={};return Object.keys(t||{}).forEach(function(n){e.includes(n)||(r[n]=t[n])}),r}function BN(t){return Ve(t)!=="object"?!1:t===null?!0:!(G.isValidElement(t)||t.constructor===RegExp||t instanceof Map||t instanceof Set||t instanceof HTMLElement||t instanceof Blob||t instanceof File||Array.isArray(t))}var HN=function(e,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,a=Object.keys(r).reduce(function(i,u){var c=r[u];return ko(c)||(i[u]=c),i},{});if(Object.keys(a).length<1||typeof window>"u"||Ve(e)!=="object"||ko(e)||e instanceof Blob)return e;var o=Array.isArray(e)?[]:{},l=function i(u,c){var d=Array.isArray(u),f=d?[]:{};return u==null||u===void 0?f:(Object.keys(u).forEach(function(v){var m=c?[c,v].flat(1):[v].flat(1),h=u[v],y=hn(a,m),g=function S(w){return Array.isArray(w)&&w.forEach(function(E,P){E&&(typeof E=="function"&&(h[P]=E(h,v,u)),Ve(E)==="object"&&!Array.isArray(E)&&Object.keys(E).forEach(function(T){if(typeof E[T]=="function"){var M=E[T](u[v][P][T],v,u);h[P][T]=Ve(M)==="object"?M[T]:M}}),Ve(E)==="object"&&Array.isArray(E)&&S(E))}),v},b=function(){var w=typeof y=="function"?y==null?void 0:y(h,v,u):g(y);if(Array.isArray(w)){f=pn(f,w,h);return}Ve(w)==="object"&&!Array.isArray(o)?o=p(p({},o),w):Ve(w)==="object"&&Array.isArray(o)?f=p(p({},f),w):w&&(f=pn(f,[w],h))};if(y&&typeof y=="function"&&b(),!(typeof window>"u")){if(BN(h)){var x=i(h,m);if(Object.keys(x).length<1)return;f=pn(f,[v],x);return}b()}}),n?f:u)};return o=Array.isArray(e)&&Array.isArray(o)?De(l(e)):Ku({},l(e),o),o};const WN=HN;function ei(t,e){var r=xt(t,e),n=ee(r,2),a=n[0],o=n[1];return[a,o]}var mo=globalThis&&globalThis.__assign||function(){return mo=Object.assign||function(t){for(var e,r=1,n=arguments.length;r"u"||!window.URL)return{};var d=[];l.forEach(function(v,m){d.push({key:m,value:v})}),d=d.reduce(function(v,m){return(v[m.key]=v[m.key]||[]).push(m),v},{}),d=Object.keys(d).map(function(v){var m=d[v];return m.length===1?[v,m[0].value]:[v,m.map(function(h){var y=h.value;return y})]});var f=mo({},t);return d.forEach(function(v){var m=v[0],h=v[1];f[m]=qN(m,h,{},t)}),f},[e.disabled,t,l]);function u(d){if(!(typeof window>"u"||!window.URL)){var f=UN(d);window.location.search!==f.search&&window.history.replaceState({},"",f.toString()),l.toString()!==f.searchParams.toString()&&a({})}}s.useEffect(function(){e.disabled||typeof window>"u"||!window.URL||u(mo(mo({},t),i))},[e.disabled,i]);var c=function(d){u(d)};return s.useEffect(function(){if(e.disabled)return function(){};if(typeof window>"u"||!window.URL)return function(){};var d=function(){a({})};return window.addEventListener("popstate",d),function(){window.removeEventListener("popstate",d)}},[e.disabled]),[i,c]}var GN={true:!0,false:!1};function qN(t,e,r,n){if(!r)return e;var a=r[t],o=e===void 0?n[t]:e;return a===Number?Number(o):a===Boolean||e==="true"||e==="false"?GN[o]:Array.isArray(a)?a.find(function(l){return l==o})||n[t]:o}function Mi(t){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Mi=function(e){return typeof e}:Mi=function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mi(t)}var XN=function(){var e=new WeakSet;return function(r,n){if(Mi(n)==="object"&&n!==null){if(e.has(n))return;e.add(n)}return n}},va=function(e){return JSON.stringify(e,XN())},Kh=G.createContext({});const kl=Kh;var ZN=["children","Wrapper"],QN=["children","Wrapper"],Vh=s.createContext({grid:!1,colProps:void 0,rowProps:void 0}),JN=function(e){var r=e.grid,n=e.rowProps,a=e.colProps;return{grid:!!r,RowWrapper:function(){var l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=l.children,u=l.Wrapper,c=Le(l,ZN);return r?C.jsx(Bn,p(p(p({gutter:8},n),c),{},{children:i})):u?C.jsx(u,{children:i}):i},ColWrapper:function(){var l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},i=l.children,u=l.Wrapper,c=Le(l,QN),d=s.useMemo(function(){var f=p(p({},a),c);return typeof f.span>"u"&&typeof f.xs>"u"&&(f.xs=24),f},[c]);return r?C.jsx(qt,p(p({},d),{},{children:i})):u?C.jsx(u,{children:i}):i}}},Aa=function(e){var r=s.useMemo(function(){return Ve(e)==="object"?e:{grid:e}},[e]),n=s.useContext(Vh),a=n.grid,o=n.colProps;return s.useMemo(function(){return JN({grid:!!(a||r.grid),rowProps:r==null?void 0:r.rowProps,colProps:(r==null?void 0:r.colProps)||o,Wrapper:r==null?void 0:r.Wrapper})},[r==null?void 0:r.Wrapper,r.grid,a,JSON.stringify([o,r==null?void 0:r.colProps,r==null?void 0:r.rowProps])])},eT=["valueType","customLightMode","lightFilterLabelFormatter","valuePropName","ignoreWidth","defaultProps"],tT=["label","tooltip","placeholder","width","bordered","messageVariables","ignoreFormItem","transform","convertValue","readonly","allowClear","colSize","getFormItemProps","getFieldProps","filedConfig","cacheForSwr","proFieldProps"],af={xs:104,s:216,sm:216,m:328,md:328,l:440,lg:440,xl:552},nT=["switch","radioButton","radio","rate"];function zh(t,e){t.displayName="ProFormComponent";var r=function(o){var l=p(p({},o==null?void 0:o.filedConfig),e)||{},i=l.valueType,u=l.customLightMode,c=l.lightFilterLabelFormatter,d=l.valuePropName,f=d===void 0?"value":d,v=l.ignoreWidth,m=l.defaultProps,h=Le(l,eT),y=p(p({},m),o),g=y.label,b=y.tooltip,x=y.placeholder,S=y.width,w=y.bordered,E=y.messageVariables,P=y.ignoreFormItem,T=y.transform,M=y.convertValue,k=y.readonly,D=y.allowClear;y.colSize;var O=y.getFormItemProps,$=y.getFieldProps;y.filedConfig;var F=y.cacheForSwr,N=y.proFieldProps,R=Le(y,tT),I=i||R.valueType,L=s.useMemo(function(){return v||nT.includes(I)},[v,I]),j=s.useState(),_=ee(j,2),A=_[1],K=s.useState(),z=ee(K,2),V=z[0],X=z[1],W=G.useContext(kl),Z=s.useMemo(function(){return{formItemProps:O==null?void 0:O(),fieldProps:$==null?void 0:$()}},[$,O,R.dependenciesValues,V]),U=s.useMemo(function(){var he=p(p(p(p({},P?Hn({value:R.value}):{}),{},{placeholder:x,disabled:o.disabled},W.fieldProps),Z.fieldProps),R.fieldProps);return he.style=Hn(he==null?void 0:he.style),he},[P,R.value,R.fieldProps,x,o.disabled,W.fieldProps,Z.fieldProps]),ae=KN(R),q=s.useMemo(function(){return p(p(p(p({},W.formItemProps),ae),Z.formItemProps),R.formItemProps)},[Z.formItemProps,W.formItemProps,R.formItemProps,ae]),te=s.useMemo(function(){return p(p({messageVariables:E},h),q)},[h,q,E]);en(!R.defaultValue,"请不要在 Form 中使用 defaultXXX。如果需要默认值请使用 initialValues 和 initialValue。");var ue=s.useContext(Np),Y=ue.prefixName,J=s.useMemo(function(){var he,be=te==null?void 0:te.name;Array.isArray(be)&&(be=be.join("_")),Array.isArray(Y)&&be&&(be="".concat(Y.join("."),".").concat(be));var Re=be&&"form-".concat((he=W.formKey)!==null&&he!==void 0?he:"","-field-").concat(be);return Re},[va(te==null?void 0:te.name),Y,W.formKey]),Q=jh(R),ie=s.useCallback(function(){var he;O||$?X([]):R.renderFormItem&&A([]);for(var be=arguments.length,Re=new Array(be),Fe=0;Fe0?J.map(function(ie,le){var ge=Q==null?void 0:Q[le],Pe=(ge==null?void 0:ge["data-item"])||{};return p(p({},Pe),ie)}):[]},ue=function Y(J){return J.map(function(Q){var ie,le=Q.disabled,ge=Q.className,Pe=Q.optionType,ve=Q[I],ce=Q[j],fe=(ie=Q[A])!==null&&ie!==void 0?ie:[];return Pe==="optGroup"||Q.options?C.jsx(dT,{label:ve,children:Y(fe)},ce):s.createElement(cT,p(p({},Q),{},{value:ce,key:ce||(ve==null?void 0:ve.toString()),disabled:le,"data-item":Q,className:"".concat(ae,"-option ").concat(ge||""),label:ve}),(n==null?void 0:n(Q))||ve)})};return C.jsx(Nr,p(p({ref:W,className:q,allowClear:!0,autoClearSearchValue:u,disabled:w,mode:a,showSearch:O,searchValue:V,optionFilterProp:g,optionLabelProp:x,onClear:function(){k==null||k(),P(""),O&&X("")}},F),{},{onSearch:O?function(Y){h&&P(Y),o==null||o(Y),X(Y)}:void 0,onChange:function(J,Q){O&&u&&(V||P(""),o==null||o(""),X(""));for(var ie=arguments.length,le=new Array(ie>2?ie-2:0),ge=2;geN?w([N,F]):F===void 0&&N===void 0&&w(void 0)}},M=function($,F){var N=De(S||[]);N[$]=F===null?void 0:F,w(N)},k=(u==null?void 0:u.placeholder)||l,D=C.jsxs(En.Group,{compact:!0,onBlur:T,children:[C.jsx(Zr,p(p({},u),{},{placeholder:Array.isArray(k)?k[0]:k,id:g??"".concat(g,"-0"),style:{width:"calc((100% - ".concat(v,"px) / 2)")},value:S==null?void 0:S[0],defaultValue:h==null?void 0:h[0],onChange:function($){return M(0,$)}})),C.jsx(En,{style:{width:v,textAlign:"center",borderLeft:0,borderRight:0,pointerEvents:"none",backgroundColor:"#FFF"},placeholder:d,disabled:!0}),C.jsx(Zr,p(p({},u),{},{placeholder:Array.isArray(k)?k[1]:k,id:g??"".concat(g,"-1"),style:{width:"calc((100% - ".concat(v,"px) / 2)"),borderLeft:0},value:S==null?void 0:S[1],defaultValue:h==null?void 0:h[1],onChange:function($){return M(1,$)}}))]});return i?i(n,p({mode:a},u),D):D}return null};const jT=G.forwardRef(LT);var AT=function(e){var r=e.text,n=e.mode,a=e.render,o=e.renderFormItem,l=e.format,i=e.fieldProps,u=Yt();if(n==="read"){var c=C.jsx(un,{title:kt(r).format((i==null?void 0:i.format)||l||"YYYY-MM-DD HH:mm:ss"),children:kt(r).fromNow()});return a?a(r,p({mode:n},i),C.jsx(C.Fragment,{children:c})):C.jsx(C.Fragment,{children:c})}if(n==="edit"||n==="update"){var d=u.getMessage("tableForm.selectPlaceholder","请选择"),f=Jo(i.value),v=C.jsx(Qr,p(p({placeholder:d,showTime:!0},i),{},{value:f}));return o?o(r,p({mode:n},i),v):v}return null};const KT=AT;var VT=G.forwardRef(function(t,e){var r=t.text,n=t.mode,a=t.render,o=t.renderFormItem,l=t.fieldProps,i=t.placeholder,u=t.width;if(n==="read"){var c=C.jsx(Bb,p({ref:e,width:u||32,src:r},l));return a?a(r,p({mode:n},l),c):c}if(n==="edit"||n==="update"){var d=C.jsx(En,p({ref:e,placeholder:i},l));return o?o(r,p({mode:n},l),d):d}return null});const Bh=VT;var zT=function(e,r){var n,a=e.border,o=a===void 0?!1:a,l=e.children,i=s.useContext(rt.ConfigContext),u=i.getPrefixCls,c=u("pro-field-index-column");return C.jsx("div",{ref:r,className:pe(c,(n={},B(n,"".concat(c,"-border"),o),B(n,"top-three",l>3),n)),children:l})};const uf=G.forwardRef(zT);var BT=["content","numberFormatOptions","numberPopoverRender"],HT=["text","mode","render","renderFormItem","fieldProps","proFieldKey","plain","valueEnum","placeholder","locale","customSymbol","numberFormatOptions","numberPopoverRender"],WT=new Intl.NumberFormat("zh-Hans-CN",{currency:"CNY",style:"currency"}),UT={style:"currency",currency:"USD"},YT={style:"currency",currency:"RUB"},GT={style:"currency",currency:"RSD"},qT={style:"currency",currency:"MYR"},XT={style:"currency",currency:"BRL"},cf={default:WT,"zh-Hans-CN":{currency:"CNY",style:"currency"},"en-US":UT,"ru-RU":YT,"ms-MY":qT,"sr-RS":GT,"pt-BR":XT},df=function(e,r,n,a){var o=r;return typeof o=="string"&&(o=Number(o)),!o&&o!==0?"":new Intl.NumberFormat(e||"zh-Hans-CN",p(p({},e===!1?{}:cf[e||"zh-Hans-CN"]||cf["zh-Hans-CN"]),{},{maximumFractionDigits:n},a)).format(o)},Gl=2,ZT=G.forwardRef(function(t,e){var r=t.content;t.numberFormatOptions,t.numberPopoverRender;var n=Le(t,BT),a=xt(function(){return n.defaultValue},{value:n.value,onChange:n.onChange}),o=ee(a,2),l=o[0],i=o[1],u=r==null?void 0:r(p(p({},n),{},{value:l})),c={visible:u?n.visible:!1};return C.jsx(To,p(p({placement:"topLeft"},c),{},{trigger:["focus","click"],content:u,getPopupContainer:function(f){return(f==null?void 0:f.parentElement)||document.body},children:C.jsx(Zr,p(p({ref:e},n),{},{value:l,onChange:i}))}))}),QT=function(e,r){var n,a,o=e.text,l=e.mode,i=e.render,u=e.renderFormItem,c=e.fieldProps;e.proFieldKey,e.plain,e.valueEnum;var d=e.placeholder,f=e.locale,v=f===void 0?(n=c.customSymbol)!==null&&n!==void 0?n:"zh-Hans-CN":f,m=e.customSymbol,h=m===void 0?c.customSymbol:m,y=e.numberFormatOptions,g=y===void 0?c==null?void 0:c.numberFormatOptions:y,b=e.numberPopoverRender,x=b===void 0?(c==null?void 0:c.numberPopoverRender)||!1:b,S=Le(e,HT),w=(a=c==null?void 0:c.precision)!==null&&a!==void 0?a:Gl,E=Yt();v&&Ma[v]&&(E=Ma[v]);var P=s.useMemo(function(){if(h)return h;var D=E.getMessage("moneySymbol","¥");if(!(S.moneySymbol===!1||c.moneySymbol===!1))return D},[h,c.moneySymbol,E,S.moneySymbol]);if(l==="read"){var T=C.jsx("span",{ref:r,children:df(P?v:!1,o,w,g??c.numberFormatOptions)});return i?i(o,p({mode:l},c),T):T}if(l==="edit"||l==="update"){var M=function(O){var $=new RegExp("\\B(?=(\\d{".concat(3+Math.max(w-Gl,0),"})+(?!\\d))"),"g"),F=String(O).split("."),N=ee(F,2),R=N[0],I=N[1],L=R.replace($,","),j="";return I&&w>0&&(j=".".concat(I.slice(0,w===void 0?Gl:w))),"".concat(L).concat(j)},k=C.jsx(ZT,p({content:function(O){if(x!==!1&&O.value){var $=df(P?v:!1,"".concat(M(O.value)),w,p(p({},g),{},{notation:"compact"}));return typeof x=="function"?x==null?void 0:x(O,$):$}},ref:r,precision:w,formatter:function(O){return O&&P?"".concat(P," ").concat(M(O)):O==null?void 0:O.toString()},parser:function(O){return P&&O?O.replace(new RegExp("\\".concat(P,"\\s?|(,*)"),"g"),""):O},placeholder:d},tn(c,["numberFormatOptions","precision","numberPopoverRender","customSymbol","moneySymbol","visible"])));return u?u(o,p({mode:l},c),k):k}return null};const Hh=G.forwardRef(QT);var ff=function(e){return e.map(function(r,n){return G.isValidElement(r)?G.cloneElement(r,p({key:n},r==null?void 0:r.props)):C.jsx(G.Fragment,{children:r},n)})},JT=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.fieldProps,i=s.useContext(rt.ConfigContext),u=i.getPrefixCls,c=u("pro-field-option");if(s.useImperativeHandle(r,function(){return{}}),o){var d=o(n,p({mode:a},l),C.jsx(C.Fragment,{}));return!d||(d==null?void 0:d.length)<1||!Array.isArray(d)?null:C.jsx(Gt,{size:16,className:c,children:ff(d)})}return!n||!Array.isArray(n)?G.isValidElement(n)?n:null:C.jsx(Gt,{size:16,className:c,children:ff(n)})};const e$=G.forwardRef(JT);var t$=["text","mode","render","renderFormItem","fieldProps","proFieldKey"],n$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.renderFormItem,i=e.fieldProps;e.proFieldKey;var u=Le(e,t$),c=Yt(),d=xt(function(){return u.visible||!1},{value:u.visible,onChange:u.onVisible}),f=ee(d,2),v=f[0],m=f[1];if(a==="read"){var h=C.jsx(C.Fragment,{children:"-"});return n&&(h=C.jsxs(Gt,{children:[C.jsx("span",{ref:r,children:v?n:"* * * * *"}),C.jsx("a",{onClick:function(){return m(!v)},children:v?C.jsx(Bf,{}):C.jsx(Ap,{})})]})),o?o(n,p({mode:a},i),h):h}if(a==="edit"||a==="update"){var y=C.jsx(En.Password,p({placeholder:c.getMessage("tableForm.inputPlaceholder","请输入"),ref:r},i));return l?l(n,p({mode:a},i),y):y}return null};const r$=G.forwardRef(n$);function a$(t){return t===0?null:t>0?"+":"-"}function o$(t){return t===0?"#595959":t>0?"#ff4d4f":"#52c41a"}function i$(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;return e>=0?t==null?void 0:t.toFixed(e):t}var l$=function(e,r){var n=e.text,a=e.prefix,o=e.precision,l=e.suffix,i=l===void 0?"%":l,u=e.mode,c=e.showColor,d=c===void 0?!1:c,f=e.render,v=e.renderFormItem,m=e.fieldProps,h=e.placeholder,y=e.showSymbol,g=s.useMemo(function(){return typeof n=="string"&&n.includes("%")?Ui(n.replace("%","")):Ui(n)},[n]),b=s.useMemo(function(){return typeof y=="function"?y==null?void 0:y(n):y},[y,n]);if(u==="read"){var x=d?{color:o$(g)}:{},S=C.jsxs("span",{style:x,ref:r,children:[a&&C.jsx("span",{children:a}),b&&C.jsxs(s.Fragment,{children:[a$(g)," "]}),i$(Math.abs(g),o),i&&i]});return f?f(n,p(p({mode:u},m),{},{prefix:a,precision:o,showSymbol:b,suffix:i}),S):S}if(u==="edit"||u==="update"){var w=C.jsx(Zr,p({ref:r,formatter:function(P){return P&&a?"".concat(a," ").concat(P).replace(/\B(?=(\d{3})+(?!\d)$)/g,","):P},parser:function(P){return P?P.replace(/.*\s|,/g,""):""},placeholder:h},m));return v?v(n,p({mode:u},m),w):w}return null};const Wh=G.forwardRef(l$);function s$(t){return t===100?"success":t<0?"exception":t<100?"active":"normal"}var u$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.plain,i=e.renderFormItem,u=e.fieldProps,c=e.placeholder,d=s.useMemo(function(){return typeof n=="string"&&n.includes("%")?Ui(n.replace("%","")):Ui(n)},[n]);if(a==="read"){var f=C.jsx(Qf,p({ref:r,size:"small",style:{minWidth:100,maxWidth:320},percent:d,steps:l?10:void 0,status:s$(d)},u));return o?o(d,p({mode:a},u),f):f}if(a==="edit"||a==="update"){var v=C.jsx(Zr,p({ref:r,placeholder:c},u));return i?i(n,p({mode:a},u),v):v}return null};const Uh=G.forwardRef(u$);var c$=["radioType","renderFormItem","mode","render"],d$=function(e,r){var n=e.radioType,a=e.renderFormItem,o=e.mode,l=e.render,i=Le(e,c$),u=s.useContext(rt.ConfigContext),c=u.getPrefixCls,d=c("pro-field-radio"),f=ni(i),v=ee(f,3),m=v[0],h=v[1],y=v[2],g=s.useRef();if(s.useImperativeHandle(r,function(){return p(p({},g.current||{}),{},{fetchData:function(){return y()}})}),m)return C.jsx(Fr,{size:"small"});if(o==="read"){var b=h!=null&&h.length?h==null?void 0:h.reduce(function(P,T){var M;return p(p({},P),{},B({},(M=T.value)!==null&&M!==void 0?M:"",T.label))},{}):void 0,x=C.jsx(C.Fragment,{children:ti(i.text,$r(i.valueEnum||b))});return l?l(i.text,p({mode:o},i.fieldProps),x)||null:x}if(o==="edit"){var S,w=n==="button"?ao.Button:ao,E=C.jsx(ao.Group,p(p({ref:g},i.fieldProps),{},{className:pe((S=i.fieldProps)===null||S===void 0?void 0:S.className,"".concat(d,"-").concat(i.fieldProps.layout||"horizontal")),options:void 0,children:h==null?void 0:h.map(function(P){return C.jsx(w,p(p({},P),{},{children:P.label}),P.value)})}));return a?a(i.text,p({mode:o},i.fieldProps),E)||null:E}return null};const vf=G.forwardRef(d$);var f$=function(e,r){var n=e.text,a=e.mode,o=e.format,l=e.render,i=e.renderFormItem,u=e.plain,c=e.showTime,d=e.fieldProps,f=Yt(),v=Array.isArray(n)?n:[],m=ee(v,2),h=m[0],y=m[1],g=s.useCallback(function(P){if(typeof(d==null?void 0:d.format)=="function"){var T;return d==null||(T=d.format)===null||T===void 0?void 0:T.call(d,P)}return(d==null?void 0:d.format)||o||"YYYY-MM-DD"},[d,o]),b=h?kt(h).format(g(kt(h))):"",x=y?kt(y).format(g(kt(y))):"";if(a==="read"){var S=C.jsxs("div",{ref:r,children:[C.jsx("div",{children:b||"-"}),C.jsx("div",{children:x||"-"})]});return l?l(n,p({mode:a},d),C.jsx("span",{children:S})):S}if(a==="edit"||a==="update"){var w=Jo(d.value),E=C.jsx(Qr.RangePicker,p(p({ref:r,format:o,showTime:c,placeholder:[f.getMessage("tableForm.selectPlaceholder","请选择"),f.getMessage("tableForm.selectPlaceholder","请选择")],bordered:u===void 0?!0:!u},d),{},{value:w}));return i?i(n,p({mode:a},d),E):E}return null};const mf=G.forwardRef(f$);var v$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.renderFormItem,i=e.fieldProps;if(a==="read"){var u=C.jsx(pc,p(p({allowHalf:!0,disabled:!0,ref:r},i),{},{value:n}));return o?o(n,p({mode:a},i),C.jsx(C.Fragment,{children:u})):u}if(a==="edit"||a==="update"){var c=C.jsx(pc,p({allowHalf:!0,ref:r},i));return l?l(n,p({mode:a},i),c):c}return null};const m$=G.forwardRef(v$);function h$(t){var e="",r=Math.floor(t/86400),n=Math.floor(t/3600),a=Math.floor(t/60%60),o=Math.floor(t%60);return e="".concat(o,"秒"),a>0&&(e="".concat(a,"分钟").concat(e)),n>0&&(e="".concat(n,"小时").concat(e)),r>0&&(e="".concat(r,"天").concat(e)),e}var p$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.renderFormItem,i=e.fieldProps,u=e.placeholder;if(a==="read"){var c=h$(Number(n)),d=C.jsx("span",{ref:r,children:c});return o?o(n,p({mode:a},i),d):d}if(a==="edit"||a==="update"){var f=C.jsx(Zr,p({ref:r,min:0,style:{width:"100%"},placeholder:u},i));return l?l(n,p({mode:a},i),f):f}return null};const g$=G.forwardRef(p$);var y$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.renderFormItem,i=e.fieldProps;if(a==="read"){var u=n;return o?o(n,p({mode:a},i),C.jsx(C.Fragment,{children:u})):C.jsx(C.Fragment,{children:u})}if(a==="edit"||a==="update"){var c=C.jsx(Op,p({ref:r},i));return l?l(n,p({mode:a},i),c):c}return null};const b$=G.forwardRef(y$);var C$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.renderFormItem,i=e.fieldProps,u=Yt(),c=s.useMemo(function(){var v,m;return n==null||"".concat(n).length<1?"-":n?(v=i==null?void 0:i.checkedChildren)!==null&&v!==void 0?v:u.getMessage("switch.open","打开"):(m=i==null?void 0:i.unCheckedChildren)!==null&&m!==void 0?m:u.getMessage("switch.close","关闭")},[i==null?void 0:i.checkedChildren,i==null?void 0:i.unCheckedChildren,n]);if(a==="read")return o?o(n,p({mode:a},i),C.jsx(C.Fragment,{children:c})):c??"-";if(a==="edit"||a==="update"){var d,f=C.jsx(Vp,p(p({ref:r},tn(i,["value"])),{},{checked:(d=i==null?void 0:i.checked)!==null&&d!==void 0?d:i==null?void 0:i.value}));return l?l(n,p({mode:a},i),f):f}return null};const x$=G.forwardRef(C$);var S$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.renderFormItem,i=e.fieldProps,u=e.emptyText,c=u===void 0?"-":u,d=i||{},f=d.autoFocus,v=d.prefix,m=v===void 0?"":v,h=d.suffix,y=h===void 0?"":h,g=Yt(),b=s.useRef();if(s.useImperativeHandle(r,function(){return b.current}),s.useEffect(function(){if(f){var P;(P=b.current)===null||P===void 0||P.focus()}},[f]),a==="read"){var x=C.jsxs(C.Fragment,{children:[m,n??c,y]});if(o){var S;return(S=o(n,p({mode:a},i),x))!==null&&S!==void 0?S:c}return x}if(a==="edit"||a==="update"){var w=g.getMessage("tableForm.inputPlaceholder","请输入"),E=C.jsx(En,p({ref:b,placeholder:w,allowClear:!0},i));return l?l(n,p({mode:a},i),E):E}return null};const w$=G.forwardRef(S$);var P$=function(e,r){var n=e.text,a=e.mode,o=e.render,l=e.renderFormItem,i=e.fieldProps,u=Yt();if(a==="read"){var c=C.jsx("span",{ref:r,children:n??"-"});return o?o(n,p({mode:a},i),c):c}if(a==="edit"||a==="update"){var d=C.jsx(En.TextArea,p({ref:r,rows:3,onKeyPress:function(v){v.key==="Enter"&&v.stopPropagation()},placeholder:u.getMessage("tableForm.inputPlaceholder","请输入")},i));return l?l(n,p({mode:a},i),d):d}return null};const E$=G.forwardRef(P$);var k$=function(e,r){var n=e.text,a=e.mode,o=e.light,l=e.label,i=e.format,u=e.render,c=e.renderFormItem,d=e.plain,f=e.fieldProps,v=e.lightLabel,m=e.labelTrigger,h=s.useState(!1),y=ee(h,2),g=y[0],b=y[1],x=s.useContext(rt.SizeContext),S=s.useContext(rt.ConfigContext),w=S.getPrefixCls,E=w("pro-field-date-picker"),P=(f==null?void 0:f.format)||i||"HH:mm:ss",T=kt.isMoment(n)||typeof n=="number";if(a==="read"){var M=C.jsx("span",{ref:r,children:n?kt(n,T?void 0:P).format(P):"-"});return u?u(n,p({mode:a},f),C.jsx("span",{children:M})):M}if(a==="edit"||a==="update"){var k,D=f.disabled,O=f.onChange,$=f.placeholder,F=f.allowClear,N=f.value,R=Jo(N,P);if(o){var I=R&&R.format(P)||"";k=C.jsxs("div",{className:"".concat(E,"-light"),onClick:function(j){var _,A,K,z=v==null||(_=v.current)===null||_===void 0||(A=_.labelRef)===null||A===void 0||(K=A.current)===null||K===void 0?void 0:K.contains(j.target);b(z?!g:!0)},children:[C.jsx(Mm,p(p({value:R,format:i,ref:r},f),{},{onChange:function(j){O==null||O(j),setTimeout(function(){b(!1)},0)},onOpenChange:function(j){m||b(j)},open:g})),C.jsx(aa,{label:l,disabled:D,placeholder:$,size:x,value:I,allowClear:F,onClear:function(){return O==null?void 0:O(null)},expanded:g,ref:v})]})}else k=C.jsx(Qr.TimePicker,p(p({ref:r,format:i,bordered:d===void 0?!0:!d},f),{},{value:R}));return c?c(n,p({mode:a},f),k):k}return null},R$=function(e){var r=e.text,n=e.mode,a=e.format,o=e.render,l=e.renderFormItem,i=e.plain,u=e.fieldProps,c=(u==null?void 0:u.format)||a||"HH:mm:ss",d=Array.isArray(r)?r:[],f=ee(d,2),v=f[0],m=f[1],h=kt.isMoment(v)||typeof v=="number",y=kt.isMoment(m)||typeof m=="number",g=v?kt(v,h?void 0:c).format(c):"",b=m?kt(m,y?void 0:c).format(c):"";if(n==="read"){var x=C.jsxs("div",{children:[C.jsx("div",{children:g||"-"}),C.jsx("div",{children:b||"-"})]});return o?o(r,p({mode:n},u),C.jsx("span",{children:x})):x}if(n==="edit"||n==="update"){var S=u.value,w=Jo(S,c),E=C.jsx(Mm.RangePicker,p(p({format:a,bordered:i===void 0?!0:!i},u),{},{value:w}));return l?l(r,p({mode:n},u),E):E}return null};const F$=G.forwardRef(k$);var M$=["radioType","renderFormItem","mode","light","label","render"],N$=["onSearch","onClear","onChange","onBlur","showSearch","autoClearSearchValue","treeData","searchValue"],T$=function(e,r){e.radioType;var n=e.renderFormItem,a=e.mode,o=e.light,l=e.label,i=e.render,u=Le(e,M$),c=s.useContext(rt.ConfigContext),d=c.getPrefixCls,f=d("pro-field-tree-select"),v=s.useRef(null),m=s.useState(!1),h=ee(m,2),y=h[0],g=h[1],b=u.fieldProps||{},x=b.onSearch,S=b.onClear,w=b.onChange,E=b.onBlur,P=b.showSearch,T=b.autoClearSearchValue;b.treeData;var M=b.searchValue,k=Le(b,N$),D=s.useContext(rt.SizeContext),O=ni(p(p({},u),{},{defaultKeyWords:M})),$=ee(O,3),F=$[0],N=$[1],R=$[2],I=xt("",{onChange:x,value:M}),L=ee(I,2),j=L[0],_=L[1];s.useImperativeHandle(r,function(){return p(p({},v.current||{}),{},{fetchData:function(){return R()}})});var A=s.useMemo(function(){if(a==="read"){var q=(k==null?void 0:k.fieldNames)||{},te=q.value,ue=te===void 0?"value":te,Y=q.label,J=Y===void 0?"label":Y,Q=q.children,ie=Q===void 0?"children":Q,le=new Map,ge=function Pe(ve){if(!(ve!=null&&ve.length))return le;for(var ce=ve.length,fe=0;fe0?C.jsx("div",{className:"".concat(u,"-action"),children:z}):null,X={name:E.name,field:h,index:y,record:g==null||(r=g.getFieldValue)===null||r===void 0?void 0:r.call(g,[P.listName,E.name,h.name].filter(function(q){return q!==void 0}).flat(1)),fields:v,operation:c,meta:m},W=Aa(),Z=W.grid,U=(o==null?void 0:o(j,X))||j,ae=(l==null?void 0:l({listDom:C.jsx("div",{className:"".concat(u,"-container"),style:{width:Z?"100%":void 0},children:U}),action:V},X))||C.jsxs("div",{className:"".concat(u,"-item ").concat(i?"".concat(u,"-item-show-label"):""),style:{display:"flex",alignItems:"flex-end"},children:[C.jsx("div",{className:"".concat(u,"-container"),style:{width:Z?"100%":void 0},children:U}),V]});return C.jsx(Ro.Provider,{value:p(p({},h),{},{listName:[P.listName,b,h.name].filter(function(q){return q!==void 0}).flat(1)}),children:ae})},H$=function(e){var r=Yt(),n=e.creatorButtonProps,a=e.prefixCls,o=e.children,l=e.creatorRecord,i=e.action,u=e.fields,c=e.actionGuard,d=e.max,f=e.fieldExtraRender,v=e.meta,m=e.containerClassName,h=e.containerStyle,y=e.onAfterAdd,g=e.onAfterRemove,b=s.useRef(new Map),x=s.useState(!1),S=ee(x,2),w=S[0],E=S[1],P=s.useMemo(function(){return u.map(function(D){var O,$;if(!(!((O=b.current)===null||O===void 0)&&O.has(D.key.toString()))){var F;(F=b.current)===null||F===void 0||F.set(D.key.toString(),Vu())}var N=($=b.current)===null||$===void 0?void 0:$.get(D.key.toString());return p(p({},D),{},{uuid:N})})},[u]),T=s.useMemo(function(){var D=p({},i),O=P.length;return c!=null&&c.beforeAddRow?D.add=pt($e().mark(function $(){var F,N,R,I,L,j=arguments;return $e().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:for(F=j.length,N=new Array(F),R=0;R0?C.jsx("div",{style:{display:"none"},children:W}):null]},[o,R,_,P]),z=ee(K,2),V=z[0],X=z[1];return C.jsx(N,{children:C.jsxs("div",{className:pe(I,B({},"".concat(I,"-twoLine"),c==="twoLine")),style:u,ref:e,children:[X,(f||v||E)&&C.jsx("div",{className:"".concat(I,"-title"),style:x,onClick:function(){D(!k)},children:E?C.jsxs("div",{style:{display:"flex",width:"100%",alignItems:"center",justifyContent:"space-between"},children:[A,C.jsx("span",{onClick:function(Z){return Z.stopPropagation()},children:E})]}):A}),l&&k?null:V]})})});qh.displayName="ProForm-Group";const uD=qh;var Gi={exports:{}};Gi.exports;(function(t,e){var r=200,n="__lodash_hash_undefined__",a=800,o=16,l=9007199254740991,i="[object Arguments]",u="[object Array]",c="[object AsyncFunction]",d="[object Boolean]",f="[object Date]",v="[object Error]",m="[object Function]",h="[object GeneratorFunction]",y="[object Map]",g="[object Number]",b="[object Null]",x="[object Object]",S="[object Proxy]",w="[object RegExp]",E="[object Set]",P="[object String]",T="[object Undefined]",M="[object WeakMap]",k="[object ArrayBuffer]",D="[object DataView]",O="[object Float32Array]",$="[object Float64Array]",F="[object Int8Array]",N="[object Int16Array]",R="[object Int32Array]",I="[object Uint8Array]",L="[object Uint8ClampedArray]",j="[object Uint16Array]",_="[object Uint32Array]",A=/[\\^$.*+?()[\]{}|]/g,K=/^\[object .+?Constructor\]$/,z=/^(?:0|[1-9]\d*)$/,V={};V[O]=V[$]=V[F]=V[N]=V[R]=V[I]=V[L]=V[j]=V[_]=!0,V[i]=V[u]=V[k]=V[d]=V[D]=V[f]=V[v]=V[m]=V[y]=V[g]=V[x]=V[w]=V[E]=V[P]=V[M]=!1;var X=typeof fi=="object"&&fi&&fi.Object===Object&&fi,W=typeof self=="object"&&self&&self.Object===Object&&self,Z=X||W||Function("return this")(),U=e&&!e.nodeType&&e,ae=U&&!0&&t&&!t.nodeType&&t,q=ae&&ae.exports===U,te=q&&X.process,ue=function(){try{var H=ae&&ae.require&&ae.require("util").types;return H||te&&te.binding&&te.binding("util")}catch{}}(),Y=ue&&ue.isTypedArray;function J(H,re,me){switch(me.length){case 0:return H.call(re);case 1:return H.call(re,me[0]);case 2:return H.call(re,me[0],me[1]);case 3:return H.call(re,me[0],me[1],me[2])}return H.apply(re,me)}function Q(H,re){for(var me=-1,Ke=Array(H);++me-1}function At(H,re){var me=this.__data__,Ke=Ht(me,H);return Ke<0?(++this.size,me.push([H,re])):me[Ke][1]=re,this}Ne.prototype.clear=xe,Ne.prototype.delete=qe,Ne.prototype.get=it,Ne.prototype.has=ft,Ne.prototype.set=At;function Kt(H){var re=-1,me=H==null?0:H.length;for(this.clear();++re1?me[bt-1]:void 0,Tt=bt>2?me[2]:void 0;for(Pt=H.length>3&&typeof Pt=="function"?(bt--,Pt):void 0,Tt&&Ba(me[0],me[1],Tt)&&(Pt=bt<3?void 0:Pt,bt=1),re=Object(re);++Ke-1&&H%1==0&&H0){if(++re>=a)return arguments[0]}else re=0;return H.apply(void 0,arguments)}}function pr(H){if(H!=null){try{return oe.call(H)}catch{}try{return H+""}catch{}}return""}function Rn(H,re){return H===re||H!==H&&re!==re}var sa=Xt(function(){return arguments}())?Xt:function(H){return gr(H)&&se.call(H,"callee")&&!dt.call(H,"callee")},Wa=Array.isArray;function Kr(H){return H!=null&&oi(H.length)&&!Vr(H)}function ri(H){return gr(H)&&Kr(H)}var ai=ot||ci;function Vr(H){if(!Fn(H))return!1;var re=Vt(H);return re==m||re==h||re==c||re==S}function oi(H){return typeof H=="number"&&H>-1&&H%1==0&&H<=l}function Fn(H){var re=typeof H;return H!=null&&(re=="object"||re=="function")}function gr(H){return H!=null&&typeof H=="object"}function Fl(H){if(!gr(H)||Vt(H)!=x)return!1;var re=Qe(H);if(re===null)return!0;var me=se.call(re,"constructor")&&re.constructor;return typeof me=="function"&&me instanceof me&&oe.call(me)==Re}var ua=Y?ie(Y):ur;function Ml(H){return Xn(H,ii(H))}function ii(H){return Kr(H)?_e(H,!0):qn(H)}var li=_r(function(H,re,me){oa(H,re,me)});function si(H){return function(){return H}}function ui(H){return H}function ci(){return!1}t.exports=li})(Gi,Gi.exports);var cD=Gi.exports;const Xh=Ta(cD);var dD=["children","trigger","onVisibleChange","drawerProps","onFinish","submitTimeout","title","width","visible"];function fD(t){var e,r,n,a,o=t.children,l=t.trigger,i=t.onVisibleChange,u=t.drawerProps,c=t.onFinish,d=t.submitTimeout,f=t.title,v=t.width,m=t.visible,h=Le(t,dD);en(!h.footer||!(u!=null&&u.footer),"DrawerForm 是一个 ProForm 的特殊布局,如果想自定义按钮,请使用 submit.render 自定义。");var y=s.useContext(rt.ConfigContext),g=s.useState([]),b=ee(g,2),x=b[1],S=s.useState(!1),w=ee(S,2),E=w[0],P=w[1],T=xt(!!m,{value:m,onChange:i}),M=ee(T,2),k=M[0],D=M[1],O=s.useRef(null),$=s.useCallback(function(_){O.current===null&&_&&x([]),O.current=_},[]),F=s.useRef(),N=s.useCallback(function(){var _,A,K,z=(_=(A=(K=h.formRef)===null||K===void 0?void 0:K.current)!==null&&A!==void 0?A:h.form)!==null&&_!==void 0?_:F.current;z&&(u!=null&&u.destroyOnClose)&&z.resetFields()},[u==null?void 0:u.destroyOnClose,h.form,h.formRef]);s.useEffect(function(){k&&m&&(i==null||i(!0))},[m,k]);var R=s.useMemo(function(){return l?G.cloneElement(l,p(p({key:"trigger"},l.props),{},{onClick:function(){var _=pt($e().mark(function K(z){var V,X;return $e().wrap(function(Z){for(;;)switch(Z.prev=Z.next){case 0:D(!k),(V=l.props)===null||V===void 0||(X=V.onClick)===null||X===void 0||X.call(V,z);case 2:case"end":return Z.stop()}},K)}));function A(K){return _.apply(this,arguments)}return A}()})):null},[D,l,k]),I=s.useMemo(function(){var _,A,K,z,V,X;return h.submitter===!1?!1:Xh({searchConfig:{submitText:(_=(A=y.locale)===null||A===void 0||(K=A.Modal)===null||K===void 0?void 0:K.okText)!==null&&_!==void 0?_:"确认",resetText:(z=(V=y.locale)===null||V===void 0||(X=V.Modal)===null||X===void 0?void 0:X.cancelText)!==null&&z!==void 0?z:"取消"},resetButtonProps:{preventDefault:!0,disabled:d?E:void 0,onClick:function(Z){var U;D(!1),N(),u==null||(U=u.onClose)===null||U===void 0||U.call(u,Z)}}},h.submitter)},[h.submitter,(e=y.locale)===null||e===void 0||(r=e.Modal)===null||r===void 0?void 0:r.okText,(n=y.locale)===null||n===void 0||(a=n.Modal)===null||a===void 0?void 0:a.cancelText,d,E,D,N,u]),L=s.useCallback(function(_,A){return C.jsxs(C.Fragment,{children:[_,O.current&&A?Af.createPortal(A,O.current):A]})},[]),j=Xr(function(){var _=pt($e().mark(function A(K){var z,V,X;return $e().wrap(function(Z){for(;;)switch(Z.prev=Z.next){case 0:return z=c==null?void 0:c(K),d&&z instanceof Promise&&(P(!0),V=setTimeout(function(){return P(!1)},d),z.finally(function(){clearTimeout(V),P(!1)})),Z.next=4,z;case 4:return X=Z.sent,X&&D(!1),Z.abrupt("return",X);case 7:case"end":return Z.stop()}},A)}));return function(A){return _.apply(this,arguments)}}());return C.jsxs(C.Fragment,{children:[C.jsx(zp,p(p({title:f,width:v||800},u),{},{visible:k,onClose:function(A){var K;d&&E||(N(),D(!1),u==null||(K=u.onClose)===null||K===void 0||K.call(u,A))},afterVisibleChange:function(A){var K;A||N(),u==null||(K=u.afterVisibleChange)===null||K===void 0||K.call(u,A)},footer:h.submitter!==!1&&C.jsx("div",{ref:$,style:{display:"flex",justifyContent:"flex-end"}}),children:C.jsx(C.Fragment,{children:C.jsx(Ka,p(p({formComponentType:"DrawerForm",layout:"vertical",formRef:F},h),{},{submitter:I,onFinish:function(){var _=pt($e().mark(function K(z){var V;return $e().wrap(function(W){for(;;)switch(W.prev=W.next){case 0:return W.next=2,j(z);case 2:return V=W.sent,V===!0&&N(),W.abrupt("return",V);case 5:case"end":return W.stop()}},K)}));function A(K){return _.apply(this,arguments)}return A}(),contentRender:L,children:o}))})})),R]})}var vD=["size","collapse","collapseLabel","initialValues","onValuesChange","form","placement","formRef","bordered","ignoreRules","footerRender"],mD=function(e){var r=e.items,n=e.prefixCls,a=e.size,o=a===void 0?"middle":a,l=e.collapse,i=e.collapseLabel,u=e.onValuesChange,c=e.bordered,d=e.values,f=e.footerRender,v=e.placement,m=Yt(),h="".concat(n,"-light-filter"),y=s.useState(!1),g=ee(y,2),b=g[0],x=g[1],S=s.useState(function(){return p({},d)}),w=ee(S,2),E=w[0],P=w[1];s.useEffect(function(){P(p({},d))},[d]);var T=s.useMemo(function(){var O=[],$=[];return r.forEach(function(F){var N=F.props||{},R=N.secondary;R||l?O.push(F):$.push(F)}),{collapseItems:O,outsideItems:$}},[e.items]),M=T.collapseItems,k=T.outsideItems,D=function(){return i||(l?C.jsx(qg,{className:"".concat(h,"-collapse-icon")}):C.jsx(aa,{size:o,label:m.getMessage("form.lightFilter.more","更多筛选"),expanded:b}))};return C.jsx("div",{className:pe(h,"".concat(h,"-").concat(o),B({},"".concat(h,"-effective"),Object.keys(d).some(function(O){return d[O]}))),children:C.jsxs("div",{className:"".concat(h,"-container"),children:[k.map(function(O,$){var F=O.key,N=O.props.fieldProps,R=N!=null&&N.placement?N==null?void 0:N.placement:v;return C.jsx("div",{className:"".concat(h,"-item"),children:G.cloneElement(O,{fieldProps:p(p({},O.props.fieldProps),{},{placement:R}),proFieldProps:{light:!0,label:O.props.label,bordered:c},bordered:c})},F||$)}),M.length?C.jsx("div",{className:"".concat(h,"-item"),children:C.jsx(Ih,{padding:24,onVisibleChange:x,visible:b,placement:v,label:D(),footerRender:f,footer:{onConfirm:function(){u(p({},E)),x(!1)},onClear:function(){var $={};M.forEach(function(F){var N=F.props.name;$[N]=void 0}),u($)}},children:M.map(function(O){var $=O.key,F=O.props,N=F.name,R=F.fieldProps,I=p(p({},R),{},{onChange:function(_){return P(p(p({},E),{},B({},N,_!=null&&_.target?_.target.value:_))),!1}});E.hasOwnProperty(N)&&(I[O.props.valuePropName||"value"]=E[N]);var L=R!=null&&R.placement?R==null?void 0:R.placement:v;return C.jsx("div",{className:"".concat(h,"-line"),children:G.cloneElement(O,{fieldProps:p(p({},I),{},{placement:L})})},$)})})},"more"):null]})})};function hD(t){var e=t.size,r=t.collapse,n=t.collapseLabel,a=t.initialValues,o=t.onValuesChange,l=t.form,i=t.placement,u=t.formRef,c=t.bordered;t.ignoreRules;var d=t.footerRender,f=Le(t,vD),v=s.useContext(rt.ConfigContext),m=v.getPrefixCls,h=m("pro-form"),y=s.useState(function(){return p({},a)}),g=ee(y,2),b=g[0],x=g[1],S=s.useRef();return s.useImperativeHandle(u,function(){return S.current}),C.jsx(Ka,p(p({size:e,initialValues:a,form:l,contentRender:function(E){return C.jsx(mD,{prefixCls:h,items:E.flatMap(function(P){return(P==null?void 0:P.type.displayName)==="ProForm-Group"?P.props.children:P}),size:e,bordered:c,collapse:r,collapseLabel:n,placement:i,values:b||{},footerRender:d,onValuesChange:function(T){var M,k,D=p(p({},b),T);x(D),(M=S.current)===null||M===void 0||M.setFieldsValue(D),(k=S.current)===null||k===void 0||k.submit(),o&&o(T,D)}})},formRef:S,formItemProps:{colon:!1,labelAlign:"left"},fieldProps:{style:{width:void 0}}},tn(f,["labelWidth"])),{},{onValuesChange:function(E,P){var T;x(P),o==null||o(E,P),(T=S.current)===null||T===void 0||T.submit()}}))}var pD=["children","trigger","onVisibleChange","modalProps","onFinish","submitTimeout","title","width","visible"];function gD(t){var e,r,n,a,o=t.children,l=t.trigger,i=t.onVisibleChange,u=t.modalProps,c=t.onFinish,d=t.submitTimeout,f=t.title,v=t.width,m=t.visible,h=Le(t,pD);en(!h.footer||!(u!=null&&u.footer),"ModalForm 是一个 ProForm 的特殊布局,如果想自定义按钮,请使用 submit.render 自定义。");var y=s.useContext(rt.ConfigContext),g=s.useState([]),b=ee(g,2),x=b[1],S=s.useState(!1),w=ee(S,2),E=w[0],P=w[1],T=xt(!!m,{value:m,onChange:i}),M=ee(T,2),k=M[0],D=M[1],O=s.useRef(null),$=s.useCallback(function(_){O.current===null&&_&&x([]),O.current=_},[]),F=s.useRef(),N=s.useCallback(function(){var _,A,K,z=(_=(A=h.form)!==null&&A!==void 0?A:(K=h.formRef)===null||K===void 0?void 0:K.current)!==null&&_!==void 0?_:F.current;z&&(u!=null&&u.destroyOnClose)&&z.resetFields()},[u==null?void 0:u.destroyOnClose,h.form,h.formRef]);s.useEffect(function(){k&&m&&(i==null||i(!0))},[m,k]);var R=s.useMemo(function(){return l?G.cloneElement(l,p(p({key:"trigger"},l.props),{},{onClick:function(){var _=pt($e().mark(function K(z){var V,X;return $e().wrap(function(Z){for(;;)switch(Z.prev=Z.next){case 0:D(!k),(V=l.props)===null||V===void 0||(X=V.onClick)===null||X===void 0||X.call(V,z);case 2:case"end":return Z.stop()}},K)}));function A(K){return _.apply(this,arguments)}return A}()})):null},[D,l,k]),I=s.useMemo(function(){var _,A,K,z,V,X,W,Z;return h.submitter===!1?!1:Xh({searchConfig:{submitText:(_=(A=u==null?void 0:u.okText)!==null&&A!==void 0?A:(K=y.locale)===null||K===void 0||(z=K.Modal)===null||z===void 0?void 0:z.okText)!==null&&_!==void 0?_:"确认",resetText:(V=(X=u==null?void 0:u.cancelText)!==null&&X!==void 0?X:(W=y.locale)===null||W===void 0||(Z=W.Modal)===null||Z===void 0?void 0:Z.cancelText)!==null&&V!==void 0?V:"取消"},resetButtonProps:{preventDefault:!0,disabled:d?E:void 0,onClick:function(ae){var q;D(!1),N(),u==null||(q=u.onCancel)===null||q===void 0||q.call(u,ae)}}},h.submitter)},[(e=y.locale)===null||e===void 0||(r=e.Modal)===null||r===void 0?void 0:r.cancelText,(n=y.locale)===null||n===void 0||(a=n.Modal)===null||a===void 0?void 0:a.okText,u,h.submitter,D,E,d,N]),L=s.useCallback(function(_,A){return C.jsxs(C.Fragment,{children:[_,O.current&&A?Af.createPortal(A,O.current):A]})},[]),j=s.useCallback(function(){var _=pt($e().mark(function A(K){var z,V,X;return $e().wrap(function(Z){for(;;)switch(Z.prev=Z.next){case 0:return z=c==null?void 0:c(K),d&&z instanceof Promise&&(P(!0),V=setTimeout(function(){return P(!1)},d),z.finally(function(){clearTimeout(V),P(!1)})),Z.next=4,z;case 4:return X=Z.sent,X&&D(!1),Z.abrupt("return",X);case 7:case"end":return Z.stop()}},A)}));return function(A){return _.apply(this,arguments)}}(),[c,D,d]);return C.jsxs(C.Fragment,{children:[C.jsx(Gp,p(p({title:f,width:v||800},u),{},{visible:k,onCancel:function(A){var K;d&&E||(D(!1),u==null||(K=u.onCancel)===null||K===void 0||K.call(u,A))},afterClose:function(){var A;N(),u==null||(A=u.afterClose)===null||A===void 0||A.call(u)},footer:h.submitter!==!1&&C.jsx("div",{ref:$,style:{display:"flex",justifyContent:"flex-end"}}),children:C.jsx(Ka,p(p({formComponentType:"ModalForm",layout:"vertical",formRef:F},h),{},{submitter:I,onFinish:function(){var _=pt($e().mark(function K(z){var V;return $e().wrap(function(W){for(;;)switch(W.prev=W.next){case 0:return W.next=2,j(z);case 2:return V=W.sent,V===!0&&N(),W.abrupt("return",V);case 5:case"end":return W.stop()}},K)}));function A(K){return _.apply(this,arguments)}return A}(),contentRender:L,children:o}))})),R]})}var yD=function(e,r,n,a){return e?C.jsxs(C.Fragment,{children:[n.getMessage("tableForm.collapsed","展开"),a&&"(".concat(a,")"),C.jsx(go,{style:{marginLeft:"0.5em",transition:"0.3s all",transform:"rotate(".concat(e?0:.5,"turn)")}})]}):C.jsxs(C.Fragment,{children:[n.getMessage("tableForm.expand","收起"),C.jsx(go,{style:{marginLeft:"0.5em",transition:"0.3s all",transform:"rotate(".concat(e?0:.5,"turn)")}})]})},bD=function(e){var r=e.setCollapsed,n=e.collapsed,a=n===void 0?!1:n,o=e.submitter,l=e.style,i=e.hiddenNum,u=s.useContext(rt.ConfigContext),c=u.getPrefixCls,d=Yt(),f=_N(e.collapseRender)||yD;return C.jsxs(Gt,{style:l,size:16,children:[o,e.collapseRender!==!1&&C.jsx("a",{className:c("pro-form-collapse-button"),onClick:function(){return r(!a)},children:f==null?void 0:f(a,e,d,i)})]})};const CD=bD;var xD=["collapsed","layout","defaultCollapsed","defaultColsNumber","span","searchGutter","searchText","resetText","optionRender","collapseRender","onReset","onCollapse","labelWidth","style","split","preserve","ignoreRules","showHiddenNum"],Xl,Zl,SD={xs:513,sm:513,md:785,lg:992,xl:1057,xxl:1/0},pf={vertical:[[513,1,"vertical"],[785,2,"vertical"],[1057,3,"vertical"],[1/0,4,"vertical"]],default:[[513,1,"vertical"],[701,2,"vertical"],[1062,3,"horizontal"],[1352,3,"horizontal"],[1/0,4,"horizontal"]]},wD=function(e,r,n){if(n&&typeof n=="number")return{span:n,layout:e};var a=n?["xs","sm","md","lg","xl","xxl"].map(function(l){return[SD[l],24/n[l],"horizontal"]}):pf[e||"default"],o=(a||pf.default).find(function(l){return rh-1)&&!!F&&x>=24;S+=1;var z=G.isValidElement($)&&($.key||"".concat((L=$.props)===null||L===void 0?void 0:L.name))||F;return G.isValidElement($)&&K?e.preserve?{itemDom:G.cloneElement($,{hidden:!0,key:z||F}),hidden:!0,colSpan:_}:{itemDom:null,colSpan:0,hidden:!0}:{itemDom:$,colSpan:_,hidden:!1}}),M=T.map(function($,F){var N,R,I=$.itemDom,L=$.colSpan,j=I==null||(N=I.props)===null||N===void 0?void 0:N.hidden;if(j)return I;var _=G.isValidElement(I)&&(I.key||"".concat((R=I.props)===null||R===void 0?void 0:R.name))||F;24-P%2417&&$(L.width)},children:C.jsx(Ka,p(p({isKeyPressSubmit:!0,preserve:x},P),{},{className:pe(M,P.className),onReset:f,style:y,layout:F.layout,fieldProps:{style:{width:"100%"}},formItemProps:R,groupProps:{titleStyle:{display:"inline-block",marginRight:16}},contentRender:function(L,j,_){return C.jsx(ED,{spanSize:F,collapsed:e,form:_,collapseRender:d,defaultCollapsed:a,onCollapse:v,optionRender:c,submitter:j,items:L,split:g,resetText:t.resetText,searchText:t.searchText,searchGutter:u,preserve:x,ignoreRules:S,showLength:N,showHiddenNum:E})}}))},"resize-observer")}var FD=["onFinish","step","formRef","title","stepProps"];function MD(t){var e=s.useRef(),r=s.useContext(Zh),n=t.onFinish,a=t.step,o=t.formRef;t.title,t.stepProps;var l=Le(t,FD);return en(!l.submitter,"StepForm 不包含提交按钮,请在 StepsForm 上"),s.useImperativeHandle(o,function(){return e.current}),s.useEffect(function(){if(t.name||t.step){var i=(t.name||t.step).toString();return r==null||r.regForm(i,t),function(){r==null||r.unRegForm(i)}}},[]),r&&(r!=null&&r.formArrayRef)&&(r.formArrayRef.current[a||0]=e),C.jsx(Ka,p({formRef:e,onFinish:function(){var i=pt($e().mark(function c(d){var f;return $e().wrap(function(m){for(;;)switch(m.prev=m.next){case 0:if(l.name&&(r==null||r.onFormFinish(l.name,d)),!n){m.next=9;break}return r==null||r.setLoading(!0),m.next=5,n==null?void 0:n(d);case 5:return f=m.sent,f&&(r==null||r.next()),r==null||r.setLoading(!1),m.abrupt("return");case 9:r!=null&&r.lastStep||r==null||r.next();case 10:case"end":return m.stop()}},c)}));function u(c){return i.apply(this,arguments)}return u}(),layout:"vertical"},l))}var ND=["current","onCurrentChange","submitter","stepsFormRender","stepsRender","stepFormRender","stepsProps","onFinish","formProps","containerStyle","formRef","formMapRef"],Zh=G.createContext(void 0),TD={horizontal:function(e){var r=e.stepsDom,n=e.formDom;return C.jsxs(C.Fragment,{children:[C.jsx(Bn,{gutter:{xs:8,sm:16,md:24},children:C.jsx(qt,{span:24,children:r})}),C.jsx(Bn,{gutter:{xs:8,sm:16,md:24},children:C.jsx(qt,{span:24,children:n})})]})},vertical:function(e){var r=e.stepsDom,n=e.formDom;return C.jsxs(Bn,{align:"stretch",wrap:!0,gutter:{xs:8,sm:16,md:24},children:[C.jsx(qt,{xxl:4,xl:6,lg:7,md:8,sm:10,xs:12,children:G.cloneElement(r,{style:{height:"100%"}})}),C.jsx(qt,{children:C.jsx("div",{style:{display:"flex",alignItems:"center",width:"100%",height:"100%"},children:n})})]})}};function $D(t){var e=s.useContext(rt.ConfigContext),r=e.getPrefixCls,n=r("pro-steps-form");t.current,t.onCurrentChange;var a=t.submitter,o=t.stepsFormRender,l=t.stepsRender,i=t.stepFormRender,u=t.stepsProps,c=t.onFinish,d=t.formProps,f=t.containerStyle,v=t.formRef,m=t.formMapRef,h=Le(t,ND),y=s.useRef(new Map),g=s.useRef(new Map),b=s.useRef([]),x=s.useState([]),S=ee(x,2),w=S[0],E=S[1],P=s.useState(!1),T=ee(P,2),M=T[0],k=T[1],D=Yt(),O=xt(0,{value:t.current,onChange:t.onCurrentChange}),$=ee(O,2),F=$[0],N=$[1],R=s.useMemo(function(){return TD[(u==null?void 0:u.direction)||"horizontal"]},[u==null?void 0:u.direction]),I=s.useMemo(function(){return F===w.length-1},[w.length,F]),L=s.useCallback(function(Y,J){g.current.has(Y)||E(function(Q){return[].concat(De(Q),[Y])}),g.current.set(Y,J)},[]),j=s.useCallback(function(Y){E(function(J){return J.filter(function(Q){return Q!==Y})}),g.current.delete(Y),y.current.delete(Y)},[]);s.useImperativeHandle(m,function(){return b.current}),s.useImperativeHandle(v,function(){var Y;return(Y=b.current[F||0])===null||Y===void 0?void 0:Y.current},[F]);var _=s.useCallback(function(){var Y=pt($e().mark(function J(Q,ie){var le,ge;return $e().wrap(function(ve){for(;;)switch(ve.prev=ve.next){case 0:if(y.current.set(Q,ie),!(!I||!c)){ve.next=3;break}return ve.abrupt("return");case 3:return k(!0),le=Ku.apply(void 0,[{}].concat(De(Array.from(y.current.values())))),ve.prev=5,ve.next=8,c(le);case 8:ge=ve.sent,ge&&(N(0),b.current.forEach(function(ce){var fe;return(fe=ce.current)===null||fe===void 0?void 0:fe.resetFields()})),ve.next=15;break;case 12:ve.prev=12,ve.t0=ve.catch(5),console.log(ve.t0);case 15:return ve.prev=15,k(!1),ve.finish(15);case 18:case"end":return ve.stop()}},J,null,[[5,12,15,18]])}));return function(J,Q){return Y.apply(this,arguments)}}(),[I,c,k,N]),A=s.useMemo(function(){return C.jsx("div",{className:"".concat(n,"-steps-container"),style:{maxWidth:Math.min(w.length*320,1160)},children:C.jsx(yc,p(p({},u),{},{current:F,onChange:void 0,children:w.map(function(Y){var J=g.current.get(Y);return C.jsx(yc.Step,p({title:J==null?void 0:J.title},J==null?void 0:J.stepProps),Y)})}))})},[w,n,F,u]),K=Xr(function(){var Y,J=b.current[F];(Y=J.current)===null||Y===void 0||Y.submit()}),z=Xr(function(){F<1||N(F-1)}),V=s.useMemo(function(){return a!==!1&&C.jsx(On,p(p({type:"primary",loading:M},a==null?void 0:a.submitButtonProps),{},{onClick:function(){var J;a==null||(J=a.onSubmit)===null||J===void 0||J.call(a),K()},children:D.getMessage("stepsForm.next","下一步")}),"next")},[D,M,K,a]),X=s.useMemo(function(){return a!==!1&&C.jsx(On,p(p({},a==null?void 0:a.resetButtonProps),{},{onClick:function(){var J;z(),a==null||(J=a.onReset)===null||J===void 0||J.call(a)},children:D.getMessage("stepsForm.prev","上一步")}),"pre")},[D,z,a]),W=s.useMemo(function(){return a!==!1&&C.jsx(On,p(p({type:"primary",loading:M},a==null?void 0:a.submitButtonProps),{},{onClick:function(){var J;a==null||(J=a.onSubmit)===null||J===void 0||J.call(a),K()},children:D.getMessage("stepsForm.submit","提交")}),"submit")},[D,M,K,a]),Z=Xr(function(){F>w.length-2||N(F+1)}),U=s.useMemo(function(){var Y=[],J=F||0;if(J<1?Y.push(V):J+1===w.length?Y.push(X,W):Y.push(X,V),Y=Y.filter(G.isValidElement),a&&a.render){var Q,ie={form:(Q=b.current[F])===null||Q===void 0?void 0:Q.current,onSubmit:K,step:F,onPre:z};return a.render(ie,Y)}return a&&(a==null?void 0:a.render)===!1?null:Y},[w.length,V,K,X,z,F,W,a]),ae=s.useMemo(function(){return lr(t.children).map(function(Y,J){var Q=Y.props,ie=Q.name||"".concat(J),le=F===J,ge=le?{contentRender:i,submitter:!1}:{};return C.jsx("div",{className:pe("".concat(n,"-step"),B({},"".concat(n,"-step-active"),le)),children:G.cloneElement(Y,p(p(p(p({},ge),d),Q),{},{name:ie,step:J,key:ie}))},ie)})},[d,n,t.children,F,i]),q=s.useMemo(function(){return l?l(w.map(function(Y){var J;return{key:Y,title:(J=g.current.get(Y))===null||J===void 0?void 0:J.title}}),A):A},[w,A,l]),te=s.useMemo(function(){return C.jsxs("div",{className:"".concat(n,"-container"),style:f,children:[ae,o?null:C.jsx(Gt,{children:U})]})},[f,ae,n,o,U]),ue=s.useMemo(function(){var Y={stepsDom:q,formDom:te};return o?o(R(Y),U):R(Y)},[q,te,R,o,U]);return C.jsx("div",{className:n,children:C.jsx(_t.Provider,p(p({},h),{},{children:C.jsx(Zh.Provider,{value:{loading:M,setLoading:k,regForm:L,keyArray:w,next:Z,formArrayRef:b,formMapRef:g,lastStep:I,unRegForm:j,onFormFinish:_},children:ue})}))})}function Rl(t){return C.jsx(Oh,{children:C.jsx($D,p({},t))})}Rl.StepForm=MD;Rl.useForm=_t.useForm;var DD=function(e){var r=e.children;return C.jsx(C.Fragment,{children:r})};const OD=DD;var ID=["steps","columns","forceUpdate","grid"],_D=function(e){var r=e.steps,n=e.columns,a=e.forceUpdate,o=e.grid,l=Le(e,ID),i=Au(l),u=s.useCallback(function(d){var f,v;(f=(v=i.current).onCurrentChange)===null||f===void 0||f.call(v,d),a([])},[a,i]),c=s.useMemo(function(){return r==null?void 0:r.map(function(d,f){return s.createElement(Qh,p(p({grid:o},d),{},{key:f,layoutType:"StepForm",columns:n[f]}))})},[n,o,r]);return C.jsx(Rl,p(p({},l),{},{onCurrentChange:u,children:c}))};const LD=_D;var jD=function(e,r){var n=r.genItems;if(e.valueType==="dependency"){var a,o,l,i=(a=e.getFieldProps)===null||a===void 0?void 0:a.call(e);return en(Array.isArray((o=e.name)!==null&&o!==void 0?o:i==null?void 0:i.name),'SchemaForm: fieldProps.name should be NamePath[] when valueType is "dependency"'),en(typeof e.columns=="function",'SchemaForm: columns should be a function when valueType is "dependency"'),Array.isArray((l=e.name)!==null&&l!==void 0?l:i==null?void 0:i.name)?s.createElement(zu,p(p({name:e.name},i),{},{key:e.key}),function(u){return!e.columns||typeof e.columns!="function"?null:n(e.columns(u))}):null}return!0},AD=function(e){if(e.valueType==="divider"){var r;return s.createElement(Wf,p(p({},(r=e.getFieldProps)===null||r===void 0?void 0:r.call(e)),{},{key:e.key}))}return!0},KD=function(e,r){var n=r.action,a=r.formRef,o=r.type,l=r.originItem,i=p(p({},tn(e,["dataIndex","width","render","renderFormItem","renderText","title"])),{},{name:e.dataIndex,width:e.width,render:e!=null&&e.render?function(f,v,m){var h,y,g;return e==null||(h=e.render)===null||h===void 0?void 0:h.call(e,f,v,m,n==null?void 0:n.current,p(p({type:o},e),{},{formItemProps:(y=e.getFormItemProps)===null||y===void 0?void 0:y.call(e),fieldProps:(g=e.getFieldProps)===null||g===void 0?void 0:g.call(e)}))}:void 0}),u=function(){return C.jsx(Yi,p(p({},i),{},{ignoreFormItem:!0}))},c=e!=null&&e.renderFormItem?function(f,v){var m,h,y,g=Hn(p(p({},v),{},{onChange:void 0}));return e==null||(m=e.renderFormItem)===null||m===void 0?void 0:m.call(e,p(p({type:o},e),{},{formItemProps:(h=e.getFormItemProps)===null||h===void 0?void 0:h.call(e),fieldProps:(y=e.getFieldProps)===null||y===void 0?void 0:y.call(e),originProps:l}),p(p({},g),{},{defaultRender:u,type:o}),a.current)}:void 0;if(e!=null&&e.renderFormItem){var d=c==null?void 0:c(null,{});if(!d||e.ignoreFormItem)return d}return s.createElement(Yi,p(p({},i),{},{key:"".concat(e.key,"-").concat(e.index),renderFormItem:c}))},VD=function(e,r){var n=r.genItems;if(e.valueType==="formList"&&e.dataIndex){var a,o,l,i,u,c,d,f,v,m,h;return!e.columns||!Array.isArray(e.columns)?null:C.jsx(U$,p(p({name:e.dataIndex,label:e.label,initialValue:e.initialValue,colProps:e.colProps,rowProps:e.rowProps},(a=e.getFieldProps)===null||a===void 0?void 0:a.call(e)),{},{isValidateList:(o=((u=e.getFormItemProps)===null||u===void 0?void 0:u.call(e))||((c=e.getFieldProps)===null||c===void 0?void 0:c.call(e)))===null||o===void 0||(l=o.rules)===null||l===void 0||(i=l[0])===null||i===void 0?void 0:i.required,emptyListMessage:(d=((m=e.getFormItemProps)===null||m===void 0?void 0:m.call(e))||((h=e.getFieldProps)===null||h===void 0?void 0:h.call(e)))===null||d===void 0||(f=d.rules)===null||f===void 0||(v=f[0])===null||v===void 0?void 0:v.message,children:n(e.columns)}),e.key)}return!0},zD=function(e,r){var n=r.genItems;if(e.valueType==="formSet"&&e.dataIndex){var a,o;return!e.columns||!Array.isArray(e.columns)?null:s.createElement(nD,p(p({},(a=e.getFormItemProps)===null||a===void 0?void 0:a.call(e)),{},{key:e.key,initialValue:e.initialValue,name:e.dataIndex,label:e.label,colProps:e.colProps,rowProps:e.rowProps},(o=e.getFieldProps)===null||o===void 0?void 0:o.call(e)),n(e.columns))}return!0},BD=function(e,r){var n=r.genItems;if(e.valueType==="group"){var a;return!e.columns||!Array.isArray(e.columns)?null:C.jsx(tO,p(p({label:e.label,colProps:e.colProps,rowProps:e.rowProps},(a=e.getFieldProps)===null||a===void 0?void 0:a.call(e)),{},{children:n(e.columns)}),e.key)}return!0},HD=function(e){return e.valueType&&typeof e.valueType=="string"&&["index","indexBorder","option"].includes(e==null?void 0:e.valueType)?null:!0},gf=[HD,BD,VD,zD,AD,jD],WD=function(e,r){for(var n=0;n0&&arguments[0]!==void 0?arguments[0]:[],K=yf(A);if(!K)throw new Error("nameList is require");var z=(_=O())===null||_===void 0?void 0:_.getFieldValue(K),V=K?pn({},K,z):z;return hn(a(V,y,K),K)},getFieldFormatValueObject:function(_){var A,K=yf(_),z=(A=O())===null||A===void 0?void 0:A.getFieldValue(K),V=K?pn({},K,z):z;return a(V,y,K)},validateFieldsReturnFormatValue:function(){var j=pt($e().mark(function A(K){var z,V,X;return $e().wrap(function(Z){for(;;)switch(Z.prev=Z.next){case 0:if(!(!Array.isArray(K)&&K)){Z.next=2;break}throw new Error("nameList must be array");case 2:return Z.next=4,(z=O())===null||z===void 0?void 0:z.validateFields(K);case 4:return V=Z.sent,X=a(V,y),Z.abrupt("return",X||{});case 7:case"end":return Z.stop()}},A)}));function _(A){return j.apply(this,arguments)}return _}(),formRef:M}},[y,a]),F=s.useMemo(function(){return G.Children.toArray(e).map(function(j,_){return _===0&&G.isValidElement(j)&&b?G.cloneElement(j,p(p({},j.props),{},{autoFocus:b})):j})},[b,e]),N=s.useMemo(function(){return typeof n=="boolean"||!n?{}:n},[n]);s.useImperativeHandle(o,function(){return p(p({},P),$)},[$,P]);var R=s.useMemo(function(){if(n!==!1)return C.jsx(qD,p(p({},N),{},{onReset:function(){var _,A,K=a((_=M.current)===null||_===void 0?void 0:_.getFieldsValue(),y);if(N==null||(A=N.onReset)===null||A===void 0||A.call(N,K),m==null||m(K),f){var z,V=Object.keys(a((z=M.current)===null||z===void 0?void 0:z.getFieldsValue(),!1)).reduce(function(X,W){return p(p({},X),{},B({},W,K[W]||void 0))},d);v(qs(f,V,"set"))}},submitButtonProps:p({loading:u},N.submitButtonProps)}),"submitter")},[n,N,u,a,y,m,f,d,v]),I=s.useMemo(function(){var j=x?C.jsx(D,{children:F}):F;return r?r(j,R,M.current):j},[x,D,F,r,R]),L=jh(t.initialValues);return s.useEffect(function(){if(!(f||!t.initialValues||!L||E.request)){var j=kr(t.initialValues,L);en(j,"initialValues 只在 form 初始化时生效,如果你需要异步加载推荐使用 request,或者 initialValues ? : null "),en(j,"The initialValues only take effect when the form is initialized, if you need to load asynchronously recommended request, or the initialValues ? : null ")}},[t.initialValues]),s.useEffect(function(){var j,_,A=a((j=M.current)===null||j===void 0||(_=j.getFieldsValue)===null||_===void 0?void 0:_.call(j,!0),y);l==null||l(A,M.current)},[]),C.jsx(ju.Provider,{value:$,children:C.jsx(rt.SizeContext.Provider,{value:E.size||T,children:C.jsxs(Vh.Provider,{value:{grid:x,colProps:w},children:[E.component!==!1&&C.jsx("input",{type:"text",style:{display:"none"}}),I]})})})}var bf=0;function Ka(t){var e=t.extraUrlParams,r=e===void 0?{}:e,n=t.syncToUrl,a=t.isKeyPressSubmit,o=t.syncToUrlAsImportant,l=o===void 0?!1:o,i=t.syncToInitialValues,u=i===void 0?!0:i;t.children,t.contentRender,t.submitter;var c=t.fieldProps,d=t.formItemProps,f=t.groupProps,v=t.dateFormatter,m=v===void 0?"string":v,h=t.formRef;t.onInit;var y=t.form,g=t.formComponentType;t.onReset,t.grid,t.rowProps,t.colProps;var b=t.omitNil,x=b===void 0?!0:b,S=t.request,w=t.params,E=t.initialValues,P=t.formKey,T=P===void 0?bf:P;t.readonly;var M=Le(t,ZD),k=s.useRef({}),D=ei(!1),O=ee(D,2),$=O[0],F=O[1],N=YN({},{disabled:!n}),R=ee(N,2),I=R[0],L=R[1],j=s.useRef(Vu());s.useEffect(function(){bf+=0},[]);var _=TN({request:S,params:w,proFieldKey:T}),A=ee(_,1),K=A[0],z=s.useState(function(){return n?qs(n,I,"get"):{}}),V=ee(z,2),X=V[0],W=V[1],Z=s.useRef({}),U=s.useRef({}),ae=s.useCallback(function(ue,Y,J){return WN(CN(ue,m,U.current,Y,J),Z.current,Y)},[m]);s.useEffect(function(){u||W({})},[u]),s.useEffect(function(){n&&L(p(p({},I),r))},[r,n]);var q=s.useMemo(function(){if(!(typeof window>"u")&&g&&["DrawerForm"].includes(g))return function(ue){return ue.parentNode||document.body}},[g]),te=Xr(pt($e().mark(function ue(){var Y,J,Q,ie,le,ge;return $e().wrap(function(ve){for(;;)switch(ve.prev=ve.next){case 0:if(M.onFinish){ve.next=2;break}return ve.abrupt("return");case 2:if(!$){ve.next=4;break}return ve.abrupt("return");case 4:return F(!0),ve.prev=5,Q=k==null||(Y=k.current)===null||Y===void 0||(J=Y.getFieldsFormatValue)===null||J===void 0?void 0:J.call(Y),ve.next=9,M.onFinish(Q);case 9:n&&(ge=Object.keys(k==null||(ie=k.current)===null||ie===void 0||(le=ie.getFieldsFormatValue)===null||le===void 0?void 0:le.call(ie,void 0,!1)).reduce(function(ce,fe){var oe;return p(p({},ce),{},B({},fe,(oe=Q[fe])!==null&&oe!==void 0?oe:void 0))},r),Object.keys(I).forEach(function(ce){ge[ce]!==!1&&ge[ce]!==0&&!ge[ce]&&(ge[ce]=void 0)}),L(qs(n,ge,"set"))),F(!1),ve.next=16;break;case 13:ve.prev=13,ve.t0=ve.catch(5),F(!1);case 16:case"end":return ve.stop()}},ue,null,[[5,13]])})));return s.useImperativeHandle(h,function(){return k.current},[!K]),!K&&t.request?C.jsx("div",{style:{paddingTop:50,paddingBottom:50,textAlign:"center"},children:C.jsx(Fr,{})}):C.jsx(Yh.Provider,{value:{mode:t.readonly?"read":"edit"},children:C.jsx(Oh,{children:C.jsx(kl.Provider,{value:{formRef:k,fieldProps:c,formItemProps:d,groupProps:f,formComponentType:g,getPopupContainer:q,formKey:j.current,setFieldValueType:function(Y,J){var Q=J.valueType,ie=Q===void 0?"text":Q,le=J.dateFormat,ge=J.transform;Array.isArray(Y)&&(Z.current=pn(Z.current,Y,ge),U.current=pn(U.current,Y,{valueType:ie,dateFormat:le}))}},children:C.jsx(_t,p(p({onKeyPress:function(Y){if(a&&Y.key==="Enter"){var J;(J=k.current)===null||J===void 0||J.submit()}},autoComplete:"off",form:y},tn(M,["autoFocusFirstInput"])),{},{initialValues:l?p(p(p({},K),E),X):p(p(p({},X),K),E),onValuesChange:function(Y,J){var Q;M==null||(Q=M.onValuesChange)===null||Q===void 0||Q.call(M,ae(Y,!!x),ae(J,!!x))},onFinish:te,children:C.jsx(QD,p(p({transformKey:ae,autoComplete:"off",loading:$,onUrlSearchChange:L},t),{},{formRef:k,initialValues:p(p({},E),K)}))}))})})})}var JD=["label","size","disabled","onChange","className","style","children","valuePropName","placeholder","labelFormatter","bordered","footerRender","allowClear","otherFieldProps","valueType","placement"],eO=function(e){var r,n=e.label,a=e.size,o=e.disabled,l=e.onChange,i=e.className,u=e.style,c=e.children,d=e.valuePropName,f=e.placeholder,v=e.labelFormatter,m=e.bordered,h=e.footerRender,y=e.allowClear,g=e.otherFieldProps,b=e.valueType,x=e.placement,S=Le(e,JD),w=s.useContext(rt.ConfigContext),E=w.getPrefixCls,P=E("pro-field-light-wrapper"),T=s.useState(e[d]),M=ee(T,2),k=M[0],D=M[1],O=ei(!1),$=ee(O,2),F=$[0],N=$[1],R=function(){for(var _,A=arguments.length,K=new Array(A),z=0;z");return a}return{Provider:r,useContainer:n}}function bO(){var t,e,r,n,a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},o=s.useRef(),l=s.useRef(null),i=s.useRef(),u=s.useRef(),c=s.useState(""),d=ee(c,2),f=d[0],v=d[1],m=s.useRef([]),h=xt(function(){return a.size||a.defaultSize||"middle"},{value:a.size,onChange:a.onSizeChange}),y=ee(h,2),g=y[0],b=y[1],x=s.useMemo(function(){var k,D={};return(k=a.columns)===null||k===void 0||k.forEach(function(O,$){var F=O.key,N=O.dataIndex,R=O.fixed,I=O.disable,L=Va(F??N,$);L&&(D[L]={show:!0,fixed:R,disable:I})}),D},[a.columns]),S=xt(function(){var k,D,O=a.columnsState||{},$=O.persistenceType,F=O.persistenceKey;if(F&&$&&typeof window<"u"){var N=window[$];try{var R=N==null?void 0:N.getItem(F);if(R)return JSON.parse(R)}catch(I){console.warn(I)}}return a.columnsStateMap||((k=a.columnsState)===null||k===void 0?void 0:k.value)||((D=a.columnsState)===null||D===void 0?void 0:D.defaultValue)||x},{value:((t=a.columnsState)===null||t===void 0?void 0:t.value)||a.columnsStateMap,onChange:((e=a.columnsState)===null||e===void 0?void 0:e.onChange)||a.onColumnsStateChange}),w=ee(S,2),E=w[0],P=w[1];s.useLayoutEffect(function(){var k=a.columnsState||{},D=k.persistenceType,O=k.persistenceKey;if(O&&D&&typeof window<"u"){var $=window[D];try{var F=$==null?void 0:$.getItem(O);P(F?JSON.parse(F):x)}catch(N){console.warn(N)}}},[a.columnsState,x,P]),en(!a.columnsStateMap,"columnsStateMap已经废弃,请使用 columnsState.value 替换"),en(!a.columnsStateMap,"columnsStateMap has been discarded, please use columnSstate.value replacement");var T=s.useCallback(function(){var k=a.columnsState||{},D=k.persistenceType,O=k.persistenceKey;if(!(!O||!D||typeof window>"u")){var $=window[D];try{$==null||$.removeItem(O)}catch(F){console.error(F)}}},[a.columnsState]);s.useEffect(function(){var k,D;if(!(!(!((k=a.columnsState)===null||k===void 0)&&k.persistenceKey)||!(!((D=a.columnsState)===null||D===void 0)&&D.persistenceType))&&!(typeof window>"u")){var O=a.columnsState,$=O.persistenceType,F=O.persistenceKey,N=window[$];try{N==null||N.setItem(F,JSON.stringify(E))}catch(R){console.error(R)}}},[(r=a.columnsState)===null||r===void 0?void 0:r.persistenceKey,E,(n=a.columnsState)===null||n===void 0?void 0:n.persistenceType]);var M={action:o.current,setAction:function(D){o.current=D},sortKeyColumns:m.current,setSortKeyColumns:function(D){m.current=D},propsRef:u,columnsMap:E,keyWords:f,setKeyWords:function(D){return v(D)},setTableSize:b,tableSize:g,prefixName:i.current,setPrefixName:function(D){i.current=D},setColumnsMap:P,columns:a.columns,rootDomRef:l,clearPersistenceStorage:T};return Object.defineProperty(M,"prefixName",{get:function(){return i.current}}),Object.defineProperty(M,"sortKeyColumns",{get:function(){return m.current}}),Object.defineProperty(M,"action",{get:function(){return o.current}}),M}var CO=yO(bO);const Dr=CO;var xO=["key","dataIndex","children"],Ql=function(e){var r=e.title,n=e.show,a=e.children,o=e.columnKey,l=e.fixed,i=Dr.useContainer(),u=i.columnsMap,c=i.setColumnsMap;return n?C.jsx(un,{title:r,children:C.jsx("span",{onClick:function(f){f.stopPropagation(),f.preventDefault();var v=u[o]||{},m=typeof v.disable=="boolean"&&v.disable;if(!m){var h=p(p({},u),{},B({},o,p(p({},v),{},{fixed:l})));c(h)}},children:a})}):null},SO=function(e){var r=e.columnKey,n=e.isLeaf,a=e.title,o=e.className,l=e.fixed,i=Gn(),u=C.jsxs("span",{className:"".concat(o,"-list-item-option"),children:[C.jsx(Ql,{columnKey:r,fixed:"left",title:i.getMessage("tableToolBar.leftPin","固定在列首"),show:l!=="left",children:C.jsx(d1,{})}),C.jsx(Ql,{columnKey:r,fixed:void 0,title:i.getMessage("tableToolBar.noPin","不固定"),show:!!l,children:C.jsx(i1,{})}),C.jsx(Ql,{columnKey:r,fixed:"right",title:i.getMessage("tableToolBar.rightPin","固定在列尾"),show:l!=="right",children:C.jsx(t1,{})})]});return C.jsxs("span",{className:"".concat(o,"-list-item"),children:[C.jsx("div",{className:"".concat(o,"-list-item-title"),children:a}),n?null:u]},r)},Jl=function(e){var r,n,a=e.list,o=e.draggable,l=e.checkable,i=e.className,u=e.showTitle,c=u===void 0?!0:u,d=e.title,f=e.listHeight,v=f===void 0?280:f,m=Dr.useContainer(),h=m.columnsMap,y=m.setColumnsMap,g=m.sortKeyColumns,b=m.setSortKeyColumns,x=a&&a.length>0,S=s.useMemo(function(){if(!x)return{};var T=[],M=function k(D,O){return D.map(function($){var F,N=$.key;$.dataIndex;var R=$.children,I=Le($,xO),L=Va(N,I.index),j=h[L||"null"]||{show:!0};j.show!==!1&&(O==null?void 0:O.show)!==!1&&!R&&T.push(L);var _=p(p({key:L},tn(I,["className"])),{},{selectable:!1,disabled:j.disable===!0,disableCheckbox:typeof j.disable=="boolean"?j.disable:(F=j.disable)===null||F===void 0?void 0:F.checkbox,isLeaf:O?!0:void 0});return R&&(_.children=k(R,j)),_})};return{list:M(a),keys:T}},[h,a,x]),w=Qt(function(T,M,k){var D=p({},h),O=De(g),$=O.findIndex(function(I){return I===T}),F=O.findIndex(function(I){return I===M}),N=k>F;if(!($<0)){var R=O[$];O.splice($,1),k===0?O.unshift(R):O.splice(N?F:F+1,0,R),O.forEach(function(I,L){D[I]=p(p({},D[I]||{}),{},{order:L})}),y(D),b(O)}}),E=Qt(function(T){var M=T.node.key,k=p({},h[M]);k.show=T.checked,y(p(p({},h),{},B({},M,k)))});if(!x)return null;var P=C.jsx(bm,{itemHeight:24,draggable:o&&!!(!((r=S.list)===null||r===void 0)&&r.length)&&((n=S.list)===null||n===void 0?void 0:n.length)>1,checkable:l,onDrop:function(M){var k=M.node.key,D=M.dragNode.key,O=M.dropPosition,$=M.dropToGap,F=O===-1||!$?O+1:O;w(D,k,F)},blockNode:!0,onCheck:function(M,k){return E(k)},checkedKeys:S.keys,showLine:!1,titleRender:function(M){var k=p(p({},M),{},{children:void 0});return C.jsx(SO,p(p({className:i},k),{},{title:Sa(k.title,k),columnKey:k.key}))},height:v,treeData:S.list});return C.jsxs(C.Fragment,{children:[c&&C.jsx("span",{className:"".concat(i,"-list-title"),children:d}),P]})},wO=function(e){var r=e.localColumns,n=e.className,a=e.draggable,o=e.checkable,l=e.listsHeight,i=[],u=[],c=[],d=Gn();r.forEach(function(m){if(!m.hideInSetting){var h=m.fixed;if(h==="left"){u.push(m);return}if(h==="right"){i.push(m);return}c.push(m)}});var f=i&&i.length>0,v=u&&u.length>0;return C.jsxs("div",{className:pe("".concat(n,"-list"),B({},"".concat(n,"-list-group"),f||v)),children:[C.jsx(Jl,{title:d.getMessage("tableToolBar.leftFixedTitle","固定在左侧"),list:u,draggable:a,checkable:o,className:n,listHeight:l}),C.jsx(Jl,{list:c,draggable:a,checkable:o,title:d.getMessage("tableToolBar.noFixedTitle","不固定"),showTitle:v||f,className:n,listHeight:l}),C.jsx(Jl,{title:d.getMessage("tableToolBar.rightFixedTitle","固定在右侧"),list:i,draggable:a,checkable:o,className:n,listHeight:l})]})};function PO(t){var e,r,n=s.useRef({}),a=Dr.useContainer(),o=t.columns,l=t.checkedReset,i=l===void 0?!0:l,u=a.columnsMap,c=a.setColumnsMap,d=a.clearPersistenceStorage;s.useEffect(function(){var w,E;if(!((w=a.propsRef.current)===null||w===void 0||(E=w.columnsState)===null||E===void 0)&&E.value){var P,T;n.current=JSON.parse(JSON.stringify(((P=a.propsRef.current)===null||P===void 0||(T=P.columnsState)===null||T===void 0?void 0:T.value)||{}))}},[]);var f=Qt(function(){var w=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,E={},P=function T(M){M.forEach(function(k){var D=k.key,O=k.fixed,$=k.index,F=k.children,N=Va(D,$);N&&(E[N]={show:w,fixed:O}),F&&T(F)})};P(o),c(E)}),v=Qt(function(w){w.target.checked?f():f(!1)}),m=Qt(function(){d==null||d(),c(n.current)}),h=Object.values(u).filter(function(w){return!w||w.show===!1}),y=h.length>0&&h.length!==o.length,g=Gn(),b=s.useContext(rt.ConfigContext),x=b.getPrefixCls,S=x("pro-table-column-setting");return C.jsx(To,{arrowPointAtCenter:!0,title:C.jsxs("div",{className:"".concat(S,"-title"),children:[C.jsx(pa,{indeterminate:y,checked:h.length===0&&h.length!==o.length,onChange:function(E){return v(E)},children:g.getMessage("tableToolBar.columnDisplay","列展示")}),i?C.jsx("a",{onClick:m,className:"".concat(S,"-action-rest-button"),children:g.getMessage("tableToolBar.reset","重置")}):null,t!=null&&t.extra?C.jsx(Gt,{size:12,align:"center",children:t.extra}):null]}),overlayClassName:"".concat(S,"-overlay"),trigger:"click",placement:"bottomRight",content:C.jsx(wO,{checkable:(e=t.checkable)!==null&&e!==void 0?e:!0,draggable:(r=t.draggable)!==null&&r!==void 0?r:!0,className:S,localColumns:o,listsHeight:t.listsHeight}),children:t.children||C.jsx(un,{title:g.getMessage("tableToolBar.columnSetting","列设置"),children:C.jsx(Uf,{})})})}function EO(t,e){return MO(t)||FO(t,e)||RO(t,e)||kO()}function kO(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function RO(t,e){if(t){if(typeof t=="string")return Cf(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Cf(t,e)}}function Cf(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r"u",r=s.useState(function(){return e?!1:window.matchMedia(t).matches}),n=EO(r,2),a=n[0],o=n[1];return s.useLayoutEffect(function(){if(!e){var l=window.matchMedia(t),i=function(c){return o(c.matches)};return l.addListener(i),function(){return l.removeListener(i)}}},[t]),a}function NO(t,e){return OO(t)||DO(t,e)||$O(t,e)||TO()}function TO(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function $O(t,e){if(t){if(typeof t=="string")return xf(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return xf(t,e)}}function xf(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r"u")return e;var r=Object.keys(xr).find(function(n){var a=xr[n].matchMedia;return!!window.matchMedia(a).matches});return e=r,e},_O=function(){var e=da(xr.md.matchMedia),r=da(xr.lg.matchMedia),n=da(xr.xxl.matchMedia),a=da(xr.xl.matchMedia),o=da(xr.sm.matchMedia),l=da(xr.xs.matchMedia),i=s.useState(IO()),u=NO(i,2),c=u[0],d=u[1];return s.useEffect(function(){if(n){d("xxl");return}if(a){d("xl");return}if(r){d("lg");return}if(e){d("md");return}if(o){d("sm");return}if(l){d("xs");return}d("md")},[e,r,n,a,o,l]),c};var LO=["label","key"],jO=function(e){var r=e.items,n=r===void 0?[]:r,a=e.type,o=a===void 0?"inline":a,l=e.prefixCls,i=e.activeKey,u=xt(i,{value:i,onChange:e.onChange}),c=ee(u,2),d=c[0],f=c[1];if(n.length<1)return null;var v=n.find(function(m){return m.key===d})||n[0];return o==="inline"?C.jsx("div",{className:pe("".concat(l,"-menu"),"".concat(l,"-inline-menu")),children:n.map(function(m,h){return C.jsx("div",{onClick:function(){f(m.key)},className:pe("".concat(l,"-inline-menu-item"),v.key===m.key?"".concat(l,"-inline-menu-item-active"):void 0),children:m.label},m.key||h)})}):o==="tab"?C.jsx(ga,{activeKey:v.key,onTabClick:function(h){return f(h)},children:n.map(function(m,h){var y=m.label,g=m.key,b=Le(m,LO);return C.jsx(ga.TabPane,p({tab:y},b),g||h)})}):C.jsx("div",{className:pe("".concat(l,"-menu"),"".concat(l,"-dropdownmenu")),children:C.jsx($o,{trigger:["click"],menu:{selectedKeys:[v.key],onClick:function(h){f(h.key)},items:n.map(function(m,h){return{key:m.key||h,disabled:m.disabled,label:m.label}})},children:C.jsxs(Gt,{className:"".concat(l,"-dropdownmenu-label"),children:[v.label,C.jsx(go,{})]})})})};const AO=jO;function KO(t){if(G.isValidElement(t))return t;if(t){var e=t,r=e.icon,n=e.tooltip,a=e.onClick,o=e.key;return r&&n?C.jsx(un,{title:n,children:C.jsx("span",{onClick:function(){a&&a(o)},children:r},o)}):r}return null}var VO=function(e){var r=e.prefixCls,n=e.tabs,a=n===void 0?{}:n,o=e.multipleLine,l=e.filtersNode;return o?C.jsx("div",{className:"".concat(r,"-extra-line"),children:a.items&&a.items.length?C.jsx(ga,{activeKey:a.activeKey,onChange:a.onChange,tabBarExtraContent:l,children:a.items.map(function(i,u){return C.jsx(ga.TabPane,p({},i),i.key||u)})}):l}):null},zO=function(e){var r=e.prefixCls,n=e.title,a=e.subTitle,o=e.tooltip,l=e.className,i=e.style,u=e.search,c=e.onSearch,d=e.multipleLine,f=d===void 0?!1:d,v=e.filter,m=e.actions,h=m===void 0?[]:m,y=e.settings,g=y===void 0?[]:y,b=e.tabs,x=b===void 0?{}:b,S=e.menu,w=Gn(),E=_O(),P=E==="sm"||E==="xs",T=w.getMessage("tableForm.inputPlaceholder","请输入"),M=s.useMemo(function(){return u?G.isValidElement(u)?u:C.jsx(En.Search,p(p({style:{width:200},placeholder:T},u),{},{onSearch:function(){for(var K,z=arguments.length,V=new Array(z),X=0;Xae||U!==void 0&&g&&g.length<=ae&&W.run(!1)},[k==null?void 0:k.current]),s.useEffect(function(){j&&W.run(!1)},[k==null?void 0:k.pageSize]),Ls(function(){return W.run(!1),i||(v.current=!1),function(){W.cancel()}},[].concat(De(z),[i])),{dataSource:g,setDataSource:b,loading:w,reload:function(){var Z=pt($e().mark(function ae(){return $e().wrap(function(te){for(;;)switch(te.prev=te.next){case 0:return te.next=2,W.run(!1);case 2:case"end":return te.stop()}},ae)}));function U(){return Z.apply(this,arguments)}return U}(),pageInfo:k,pollingLoading:N,reset:function(){var Z=pt($e().mark(function ae(){var q,te,ue,Y,J,Q,ie,le;return $e().wrap(function(Pe){for(;;)switch(Pe.prev=Pe.next){case 0:q=n||{},te=q.pageInfo,ue=te||{},Y=ue.defaultCurrent,J=Y===void 0?1:Y,Q=ue.defaultPageSize,ie=Q===void 0?20:Q,le={current:J,total:0,pageSize:ie},O(le);case 4:case"end":return Pe.stop()}},ae)}));function U(){return Z.apply(this,arguments)}return U}(),setPageInfo:function(){var Z=pt($e().mark(function ae(q){return $e().wrap(function(ue){for(;;)switch(ue.prev=ue.next){case 0:O(p(p({},k),q));case 1:case"end":return ue.stop()}},ae)}));function U(ae){return Z.apply(this,arguments)}return U}()}};const nI=tI;var rI=function(e){return function(r,n){var a,o,l=r.fixed,i=r.index,u=n.fixed,c=n.index;if(l==="left"&&u!=="left"||u==="right"&&l!=="right")return-2;if(u==="left"&&l!=="left"||l==="right"&&u!=="right")return 2;var d=r.key||"".concat(i),f=n.key||"".concat(c);if(!((a=e[d])===null||a===void 0)&&a.order||!((o=e[f])===null||o===void 0)&&o.order){var v,m;return(((v=e[d])===null||v===void 0?void 0:v.order)||0)-(((m=e[f])===null||m===void 0?void 0:m.order)||0)}return(r.index||0)-(n.index||0)}},aI=["children"],oI=["",null,void 0],Sf=function(){for(var e=arguments.length,r=new Array(e),n=0;nU.length?(U.push(V),U):(U.splice((l==null?void 0:l.current)*(l==null?void 0:l.pageSize)-1,0,V),U)}return[].concat(De(n.dataSource),[V])},$=function(){return p(p({},T),{},{size:u,rowSelection:i===!1?void 0:i,className:r,style:c,columns:k.map(function(A){return A.isExtraColumns?A.extraColumn:A}),loading:n.loading,dataSource:E.newLineRecord?O(n.dataSource):n.dataSource,pagination:l,onChange:function(K,z,V,X){var W;if((W=T.onChange)===null||W===void 0||W.call(T,K,z,V,X),D||g(qr(z)),Array.isArray(V)){var Z=V.reduce(function(te,ue){return p(p({},te),{},B({},"".concat(ue.field),ue.order))},{});y(qr(Z))}else{var U,ae=(U=V.column)===null||U===void 0?void 0:U.sorter,q=(ae==null?void 0:ae.toString())===ae;y(qr(B({},"".concat(q?ae:V.field),V.order))||{})}}})},F=C.jsx(xa,p(p({},$()),{},{rowKey:e})),N=t.tableViewRender?t.tableViewRender(p(p({},$()),{},{rowSelection:i!==!1?i:void 0}),F):F,R=s.useMemo(function(){if(t.editable&&!t.name){var _,A,K,z;return C.jsxs(C.Fragment,{children:[d,h,s.createElement(In,p(p({},(_=t.editable)===null||_===void 0?void 0:_.formProps),{},{formRef:(A=t.editable)===null||A===void 0||(K=A.formProps)===null||K===void 0?void 0:K.formRef,component:!1,form:(z=t.editable)===null||z===void 0?void 0:z.form,onValuesChange:E.onValuesChange,key:"table",submitter:!1,omitNil:!1,dateFormatter:t.dateFormatter}),N)]})}return C.jsxs(C.Fragment,{children:[d,h,N]})},[h,t.loading,!!t.editable,N,d]),I=m===!1||t.name?R:C.jsx(m9,p(p({ghost:t.ghost,bordered:Jh("table",w),bodyStyle:d?{paddingTop:0}:{padding:0}},m),{},{children:R})),L=function(){return t.tableRender?t.tableRender(t,I,{toolbar:d||void 0,alert:h||void 0,table:N||void 0}):I},j=C.jsxs("div",{className:pe(S,B({},"".concat(S,"-polling"),n.pollingLoading)),style:v,ref:M.rootDomRef,children:[x?null:f,o!=="form"&&t.tableExtraRender&&C.jsx("div",{className:"".concat(S,"-extra"),children:t.tableExtraRender(t,n.dataSource||[])}),o!=="form"&&L()]});return!b||!(b!=null&&b.fullScreen)?j:C.jsx(rt,{getPopupContainer:function(){return M.rootDomRef.current||document.body},children:j})}var mI={},hI=function(e){var r;e.cardBordered;var n=e.request,a=e.className,o=e.params,l=o===void 0?mI:o,i=e.defaultData,u=e.headerTitle,c=e.postData,d=e.ghost,f=e.pagination,v=e.actionRef,m=e.columns,h=m===void 0?[]:m,y=e.toolBarRender,g=e.onLoad,b=e.onRequestError;e.style,e.cardProps,e.tableStyle,e.tableClassName,e.columnsStateMap,e.onColumnsStateChange;var x=e.options,S=e.search,w=e.name,E=e.onLoadingChange,P=e.rowSelection,T=P===void 0?!1:P,M=e.beforeSearchSubmit,k=e.tableAlertRender,D=e.defaultClassName,O=e.formRef,$=e.type,F=$===void 0?"table":$,N=e.columnEmptyText,R=N===void 0?"-":N,I=e.toolbar,L=e.rowKey,j=e.manualRequest,_=e.polling,A=e.tooltip,K=e.revalidateOnFocus,z=K===void 0?!1:K,V=Le(e,fI),X=pe(D,a),W=s.useRef(),Z=s.useRef(),U=O||Z;s.useImperativeHandle(v,function(){return W.current});var ae=Un(T?(T==null?void 0:T.defaultSelectedRowKeys)||[]:void 0,{value:T?T.selectedRowKeys:void 0}),q=ee(ae,2),te=q[0],ue=q[1],Y=s.useRef([]),J=s.useCallback(function(ye,de){ue(ye),(!T||!(T!=null&&T.selectedRowKeys))&&(Y.current=de)},[ue]),Q=Un(function(){if(!(j||S!==!1))return{}}),ie=ee(Q,2),le=ie[0],ge=ie[1],Pe=Un({}),ve=ee(Pe,2),ce=ve[0],fe=ve[1],oe=Un({}),se=ee(oe,2),he=se[0],be=se[1];s.useEffect(function(){var ye=uO(h),de=ye.sort,Ce=ye.filter;fe(Ce),be(de)},[]);var Re=Gn(),Fe=Ve(f)==="object"?f:{defaultCurrent:1,defaultPageSize:20,pageSize:20,current:1},Ee=Dr.useContainer(),ke=s.useMemo(function(){if(n)return function(){var ye=pt($e().mark(function de(Ce){var Me,Be;return $e().wrap(function(Ne){for(;;)switch(Ne.prev=Ne.next){case 0:return Me=p(p(p({},Ce||{}),le),l),delete Me._timestamp,Ne.next=4,n(Me,he,ce);case 4:return Be=Ne.sent,Ne.abrupt("return",Be);case 6:case"end":return Ne.stop()}},de)}));return function(de){return ye.apply(this,arguments)}}()},[le,l,ce,he,n]),we=nI(ke,i,{pageInfo:f===!1?!1:Fe,loading:e.loading,dataSource:e.dataSource,onDataSourceChange:e.onDataSourceChange,onLoad:g,onLoadingChange:E,onRequestError:b,postData:c,revalidateOnFocus:z,manual:le===void 0,polling:_,effects:[va(l),va(le),va(ce),va(he)],debounceTime:e.debounceTime,onPageInfoChange:function(de){var Ce,Me;F==="list"||!f||!ke||(f==null||(Ce=f.onChange)===null||Ce===void 0||Ce.call(f,de.current,de.pageSize),f==null||(Me=f.onShowSizeChange)===null||Me===void 0||Me.call(f,de.current,de.pageSize))}});s.useEffect(function(){var ye;if(!(e.manualRequest||!e.request||!z||!((ye=e.form)===null||ye===void 0)&&ye.ignoreRules)){var de=function(){document.visibilityState==="visible"&&we.reload()};return document.addEventListener("visibilitychange",de),function(){return document.removeEventListener("visibilitychange",de)}}},[]);var Ge=G.useRef(new Map),Qe=G.useMemo(function(){return typeof L=="function"?L:function(ye,de){var Ce;return de===-1?ye==null?void 0:ye[L]:e.name?de==null?void 0:de.toString():(Ce=ye==null?void 0:ye[L])!==null&&Ce!==void 0?Ce:de==null?void 0:de.toString()}},[e.name,L]);s.useMemo(function(){var ye;if(!((ye=we.dataSource)===null||ye===void 0)&&ye.length){var de=new Map,Ce=we.dataSource.map(function(Me){var Be=Qe(Me,-1);return de.set(Be,Me),Be});return Ge.current=de,Ce}return[]},[we.dataSource,Qe]),s.useEffect(function(){Y.current=te==null?void 0:te.map(function(ye){var de;return(de=Ge.current)===null||de===void 0?void 0:de.get(ye)})},[te]);var ct=s.useMemo(function(){var ye=f===!1?!1:p({},f),de=p(p({},we.pageInfo),{},{setPageInfo:function(Me){var Be=Me.pageSize,nt=Me.current,Ne=we.pageInfo;if(Be===Ne.pageSize||Ne.current===1){we.setPageInfo({pageSize:Be,current:nt});return}n&&we.setDataSource([]),we.setPageInfo({pageSize:Be,current:F==="list"?nt:1})}});return n&&ye&&(delete ye.onChange,delete ye.onShowSizeChange),aO(ye,de,Re)},[f,we,Re]);Ls(function(){var ye;e.request&&l&&we.dataSource&&(we==null||(ye=we.pageInfo)===null||ye===void 0?void 0:ye.current)!==1&&we.setPageInfo({current:1})},[l]),Ee.setPrefixName(e.name);var dt=s.useCallback(function(){T&&T.onChange&&T.onChange([],[],{type:"none"}),J([],[])},[T,J]);Ee.setAction(W.current),Ee.propsRef.current=e;var mt=L6(p(p({},e.editable),{},{tableName:e.name,getRowKey:Qe,childrenColumnName:((r=e.expandable)===null||r===void 0?void 0:r.childrenColumnName)||"children",dataSource:we.dataSource||[],setDataSource:function(de){var Ce,Me;(Ce=e.editable)===null||Ce===void 0||(Me=Ce.onValuesChange)===null||Me===void 0||Me.call(Ce,void 0,de),we.setDataSource(de)}}));oO(W,we,{fullScreen:function(){var de;if(!(!(!((de=Ee.rootDomRef)===null||de===void 0)&&de.current)||!document.fullscreenEnabled))if(document.fullscreenElement)document.exitFullscreen();else{var Ce;(Ce=Ee.rootDomRef)===null||Ce===void 0||Ce.current.requestFullscreen()}},onCleanSelected:function(){dt()},resetAll:function(){var de;dt(),fe({}),be({}),Ee.setKeyWords(void 0),we.setPageInfo({current:1}),U==null||(de=U.current)===null||de===void 0||de.resetFields(),ge({})},editableUtils:mt}),v&&(v.current=W.current);var We=s.useMemo(function(){var ye;return np({columns:h,counter:Ee,columnEmptyText:R,type:F,editableUtils:mt,rowKey:L,childrenColumnName:(ye=e.expandable)===null||ye===void 0?void 0:ye.childrenColumnName}).sort(rI(Ee.columnsMap))},[h,Ee==null?void 0:Ee.sortKeyColumns,Ee==null?void 0:Ee.columnsMap,R,F,mt.editableKeys&&mt.editableKeys.join(",")]);rh(function(){if(We&&We.length>0){var ye=We.map(function(de){return Va(de.key,de.index)});Ee.setSortKeyColumns(ye)}},[We],["render","renderFormItem"],100),Ls(function(){var ye=we.pageInfo,de=f||{},Ce=de.current,Me=Ce===void 0?ye==null?void 0:ye.current:Ce,Be=de.pageSize,nt=Be===void 0?ye==null?void 0:ye.pageSize:Be;f&&(Me||nt)&&(nt!==(ye==null?void 0:ye.pageSize)||Me!==(ye==null?void 0:ye.current))&&we.setPageInfo({pageSize:nt||ye.pageSize,current:Me||ye.current})},[f&&f.pageSize,f&&f.current]);var Oe=p(p({selectedRowKeys:te},T),{},{onChange:function(de,Ce,Me){T&&T.onChange&&T.onChange(de,Ce,Me),J(de,Ce)}}),ot=S!==!1&&(S==null?void 0:S.filterType)==="light",Je=function(de){if(x&&x.search){var Ce,Me,Be=x.search===!0?{}:x.search,nt=Be.name,Ne=nt===void 0?"keyword":nt,xe=(Ce=x.search)===null||Ce===void 0||(Me=Ce.onSearch)===null||Me===void 0?void 0:Me.call(Ce,Ee.keyWords);if(xe!==!1){ge(p(p({},de),{},B({},Ne,Ee.keyWords)));return}}ge(de)},Se=s.useMemo(function(){if(Ve(we.loading)==="object"){var ye;return((ye=we.loading)===null||ye===void 0?void 0:ye.spinning)||!1}return we.loading},[we.loading]),He=S===!1&&F!=="form"?null:C.jsx(gO,{pagination:ct,beforeSearchSubmit:M,action:W,columns:h,onFormSearchSubmit:function(de){Je(de)},ghost:d,onReset:e.onReset,onSubmit:e.onSubmit,loading:!!Se,manualRequest:j,search:S,form:e.form,formRef:U,type:e.type||"table",cardBordered:e.cardBordered,dateFormatter:e.dateFormatter}),je=y===!1?null:C.jsx(QO,{headerTitle:u,hideToolbar:x===!1&&!u&&!y&&!I&&!ot,selectedRows:Y.current,selectedRowKeys:te,tableColumn:We,tooltip:A,toolbar:I,onFormSearchSubmit:function(de){ge(p(p({},le),de))},searchNode:ot?He:null,options:x,actionRef:W,toolBarRender:y}),ze=T!==!1?C.jsx(rO,{selectedRowKeys:te,selectedRows:Y.current,onCleanSelected:dt,alertOptionRender:V.tableAlertOptionRender,alertInfoRender:k,alwaysShowAlert:T==null?void 0:T.alwaysShowAlert}):null;return C.jsx(vI,p(p({},e),{},{name:w,size:Ee.tableSize,onSizeChange:Ee.setTableSize,pagination:ct,searchNode:He,rowSelection:T!==!1?Oe:void 0,className:X,tableColumn:We,isLightFilter:ot,action:we,alertDom:ze,toolbarDom:je,onSortChange:be,onFilterChange:fe,editableUtils:mt,getRowKey:Qe}))},rp=function(e){var r=s.useContext(rt.ConfigContext),n=r.getPrefixCls,a=e.ErrorBoundary===!1?G.Fragment:e.ErrorBoundary||i6;return C.jsx(Dr.Provider,{initialState:e,children:C.jsx(a6,{children:C.jsx(a,{children:C.jsx(hI,p({defaultClassName:n("pro-table")},e))})})})};rp.Summary=xa.Summary;const MI=rp;export{Bb as I,gD as M,MI as P,d1 as V,R1 as g,M1 as s}; diff --git a/dist/assets/Tags-7859f157.js b/dist/assets/Tags-7859f157.js deleted file mode 100644 index 4583e7b93693fbd271a26dc6d877bc1f842436da..0000000000000000000000000000000000000000 --- a/dist/assets/Tags-7859f157.js +++ /dev/null @@ -1 +0,0 @@ -import{A as L,f as E,N as b,a as J,O as G,P as H,o as q,c as K,r as T}from"./_setToString-038b76d7.js";import{r as s,_ as U,j as l}from"./umi-2135699e.js";import{t as X,B as w}from"./button-eb671c5b.js";import{b as N,D as F,a as Q}from"./index-c4a8d365.js";import{T as R}from"./useDebounce-ed4013a1.js";import{i as W,n as _}from"./util-e99b60d9.js";import{u as Y}from"./useAsyncFn-1ec42995.js";import{E as Z}from"./index-bbd283be.js";var V={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};const ee=V;var te=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:ee}))},se=s.forwardRef(te);const Ce=se;var ae={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M938 458.8l-29.6-312.6c-1.5-16.2-14.4-29-30.6-30.6L565.2 86h-.4c-3.2 0-5.7 1-7.6 2.9L88.9 557.2a9.96 9.96 0 000 14.1l363.8 363.8c1.9 1.9 4.4 2.9 7.1 2.9s5.2-1 7.1-2.9l468.3-468.3c2-2.1 3-5 2.8-8zM459.7 834.7L189.3 564.3 589 164.6 836 188l23.4 247-399.7 399.7zM680 256c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm0 120c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"}}]},name:"tag",theme:"outlined"};const re=ae;var ne=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:re}))},ie=s.forwardRef(ne);const ce=ie;var z=N.Option;function I(a){return a&&a.type&&(a.type.isSelectOption||a.type.isSelectOptGroup)}var le=function(n,r){var O=n.prefixCls,g=n.className,x=n.popupClassName,p=n.dropdownClassName,o=n.children,C=n.dataSource,u=X(o),i;if(u.length===1&&b(u[0])&&!I(u[0])){var f=J(u,1);i=f[0]}var c=i?function(){return i}:void 0,v;return u.length&&I(u[0])?v=o:v=C?C.map(function(d){if(b(d))return d;switch(G(d)){case"string":return s.createElement(z,{key:d,value:d},d);case"object":{var S=d.value;return s.createElement(z,{key:S,value:S},d.text)}default:return}}):[],s.createElement(H,null,function(d){var S=d.getPrefixCls,y=S("select",O);return s.createElement(N,U({ref:r},q(n,["dataSource"]),{prefixCls:y,popupClassName:x||p,className:K("".concat(y,"-auto-complete"),g),mode:N.SECRET_COMBOBOX_MODE_DO_NOT_USE},{getInputElement:c}),v)})},P=s.forwardRef(le);P.Option=z;const oe=P;var ue=function(a,n,r){if(!W)return[n,_,_];if(!a)throw new Error("useLocalStorage key may not be falsy");var O=r?r.raw?function(i){return i}:r.deserializer:JSON.parse,g=s.useRef(function(i){try{var f=r?r.raw?String:r.serializer:JSON.stringify,c=localStorage.getItem(i);return c!==null?O(c):(n&&localStorage.setItem(i,f(n)),n)}catch{return n}}),x=s.useState(function(){return g.current(a)}),p=x[0],o=x[1];s.useLayoutEffect(function(){return o(g.current(a))},[a]);var C=s.useCallback(function(i){try{var f=typeof i=="function"?i(p):i;if(typeof f>"u")return;var c=void 0;r?r.raw?typeof f=="string"?c=f:c=JSON.stringify(f):r.serializer?c=r.serializer(f):c=JSON.stringify(f):c=JSON.stringify(f),localStorage.setItem(a,c),o(O(c))}catch{}},[a,o]),u=s.useCallback(function(){try{localStorage.removeItem(a),o(void 0)}catch{}},[a,o]);return[p,C,u]};const fe=ue,de=({id:a,tagList:n,onChange:r,preview:O})=>{const[g,x]=s.useState(""),p=s.useRef(null),[o,C]=fe("TAG_PRIORITIES",{}),[u,i]=s.useState(!1),[f,c]=s.useState(null),[v,d]=s.useState(!1),[S,y]=Y(async()=>T.get("/api/tags"),[]);s.useLayoutEffect(()=>{var e;u&&((e=p.current)==null||e.focus())},[u]);const h=f||n,$=s.useMemo(()=>{var e;return((e=S.value)==null?void 0:e.filter(t=>!h.some(m=>m.id===t.id)).sort((t,m)=>(o[m.id]||0)-(o[t.id]||0)).filter(t=>t.name.indexOf(g)>-1).map(t=>({value:t.name})))??[]},[h,S.value,o,g]),A=async e=>{const t=await T.post("/api/tags",{data:{name:e}});return{name:e,id:t.id}},B=async(e,t)=>{C({...o,[t]:Date.now()});const m=await T.post(`/api/musicSets/${e}/tags/${t}`);return!!(m!=null&&m.success)},M=async(e,t)=>{const m=await T.delete(`/api/musicSets/${e}/tags/${t}`);return!!(m!=null&&m.success)},D=async()=>{if(!g){i(!1);return}const e=await A(g);if(a&&await B(a,e.id),g&&!h.some(t=>t.id===e.id)){const t=[...h,e];c(t),r&&r(t)}i(!1),x("")},k=async e=>{a&&await M(a,e.id);const t=h.filter(m=>m.id!==e.id);c(t),r&&r(t)},j=s.useCallback(async()=>{await y(),d(!v)},[]);return l.jsxs(l.Fragment,{children:[O?l.jsx("div",{onClick:j,children:h.length?h.map(e=>l.jsx(R,{style:{display:"inline-block",fontSize:"12px",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id)):l.jsx(w,{type:"dashed",icon:l.jsx(Z,{}),size:"small"})}):l.jsx(w,{title:"标签",icon:l.jsx(ce,{}),onClick:j}),l.jsx(F,{title:"标签管理",placement:"right",onClose:()=>d(!1),open:v,mask:!0,style:{marginTop:"64px",height:"calc(100vh - 64px)"},children:l.jsxs("div",{className:"score-tags",children:[l.jsx("div",{className:"list",children:h.map(e=>l.jsx(R,{closable:!0,onClose:()=>k(e),style:{display:"inline-block",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id))}),u&&l.jsx(oe,{ref:p,size:"small",backfill:!0,options:$,style:{width:100},onChange:e=>{x(e)},placeholder:"输入",onBlur:()=>D(),onSelect:()=>{setTimeout(()=>{var e;(e=p.current)==null||e.blur()},0)},onKeyDown:e=>{e.key==="Enter"&&p.current.blur()}}),!u&&l.jsx(w,{className:"site-tag-plus",size:"small",onClick:()=>i(!0),children:l.jsx(Q,{})})]})})]})},ye=de;export{oe as A,Ce as P,ye as S,ce as T,fe as u}; diff --git a/dist/assets/Tags-a5fcdf82.js b/dist/assets/Tags-a5fcdf82.js new file mode 100644 index 0000000000000000000000000000000000000000..18d13a5503ef8bfb2d75575593fa935bd70e876f --- /dev/null +++ b/dist/assets/Tags-a5fcdf82.js @@ -0,0 +1 @@ +import{A as L,f as E,i as b,a as J,j as G,k as H,o as q,c as K}from"./_setToString-64803aa4.js";import{r as s,_ as U,j as o}from"./umi-6680b95f.js";import{t as X,B as w}from"./button-8d21fb6b.js";import{a as j,D as F}from"./index-d8ba9a0a.js";import{T as R}from"./useDebounce-f20bbecc.js";import{r as T}from"./index-ca4e65ae.js";import{i as Q,n as _}from"./util-5cf3b889.js";import{u as W}from"./useAsyncFn-49a4ae5f.js";import{E as Y}from"./Dropdown-ff3ebc45.js";import{a as Z}from"./progress-ab875831.js";var V={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};const ee=V;var te=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:ee}))},se=s.forwardRef(te);const Te=se;var ae={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M938 458.8l-29.6-312.6c-1.5-16.2-14.4-29-30.6-30.6L565.2 86h-.4c-3.2 0-5.7 1-7.6 2.9L88.9 557.2a9.96 9.96 0 000 14.1l363.8 363.8c1.9 1.9 4.4 2.9 7.1 2.9s5.2-1 7.1-2.9l468.3-468.3c2-2.1 3-5 2.8-8zM459.7 834.7L189.3 564.3 589 164.6 836 188l23.4 247-399.7 399.7zM680 256c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm0 120c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"}}]},name:"tag",theme:"outlined"};const re=ae;var ne=function(n,r){return s.createElement(L,E(E({},n),{},{ref:r,icon:re}))},ie=s.forwardRef(ne);const ce=ie;var z=j.Option;function I(a){return a&&a.type&&(a.type.isSelectOption||a.type.isSelectOptGroup)}var oe=function(n,r){var C=n.prefixCls,p=n.className,x=n.popupClassName,g=n.dropdownClassName,l=n.children,O=n.dataSource,u=X(l),i;if(u.length===1&&b(u[0])&&!I(u[0])){var f=J(u,1);i=f[0]}var c=i?function(){return i}:void 0,v;return u.length&&I(u[0])?v=l:v=O?O.map(function(m){if(b(m))return m;switch(G(m)){case"string":return s.createElement(z,{key:m,value:m},m);case"object":{var S=m.value;return s.createElement(z,{key:S,value:S},m.text)}default:return}}):[],s.createElement(H,null,function(m){var S=m.getPrefixCls,y=S("select",C);return s.createElement(j,U({ref:r},q(n,["dataSource"]),{prefixCls:y,popupClassName:x||g,className:K("".concat(y,"-auto-complete"),p),mode:j.SECRET_COMBOBOX_MODE_DO_NOT_USE},{getInputElement:c}),v)})},$=s.forwardRef(oe);$.Option=z;const le=$;var ue=function(a,n,r){if(!Q)return[n,_,_];if(!a)throw new Error("useLocalStorage key may not be falsy");var C=r?r.raw?function(i){return i}:r.deserializer:JSON.parse,p=s.useRef(function(i){try{var f=r?r.raw?String:r.serializer:JSON.stringify,c=localStorage.getItem(i);return c!==null?C(c):(n&&localStorage.setItem(i,f(n)),n)}catch{return n}}),x=s.useState(function(){return p.current(a)}),g=x[0],l=x[1];s.useLayoutEffect(function(){return l(p.current(a))},[a]);var O=s.useCallback(function(i){try{var f=typeof i=="function"?i(g):i;if(typeof f>"u")return;var c=void 0;r?r.raw?typeof f=="string"?c=f:c=JSON.stringify(f):r.serializer?c=r.serializer(f):c=JSON.stringify(f):c=JSON.stringify(f),localStorage.setItem(a,c),l(C(c))}catch{}},[a,l]),u=s.useCallback(function(){try{localStorage.removeItem(a),l(void 0)}catch{}},[a,l]);return[g,O,u]};const fe=ue,me=({id:a,tagList:n,onChange:r,preview:C})=>{const[p,x]=s.useState(""),g=s.useRef(null),[l,O]=fe("TAG_PRIORITIES",{}),[u,i]=s.useState(!1),[f,c]=s.useState(null),[v,m]=s.useState(!1),[S,y]=W(async()=>T.get("/api/tags"),[]);s.useLayoutEffect(()=>{var e;u&&((e=g.current)==null||e.focus())},[u]);const h=f||n,A=s.useMemo(()=>{var e;return((e=S.value)==null?void 0:e.filter(t=>!h.some(d=>d.id===t.id)).sort((t,d)=>(l[d.id]||0)-(l[t.id]||0)).filter(t=>t.name.indexOf(p)>-1).map(t=>({value:t.name})))??[]},[h,S.value,l,p]),P=async e=>{const t=await T.post("/api/tags",{data:{name:e}});return{name:e,id:t.id}},B=async(e,t)=>{O({...l,[t]:Date.now()});const d=await T.post(`/api/musicSets/${e}/tags/${t}`);return!!(d!=null&&d.success)},M=async(e,t)=>{const d=await T.delete(`/api/musicSets/${e}/tags/${t}`);return!!(d!=null&&d.success)},k=async()=>{if(!p){i(!1);return}const e=await P(p);if(a&&await B(a,e.id),p&&!h.some(t=>t.id===e.id)){const t=[...h,e];c(t),r&&r(t)}i(!1),x("")},D=async e=>{a&&await M(a,e.id);const t=h.filter(d=>d.id!==e.id);c(t),r&&r(t)},N=s.useCallback(async()=>{await y(),m(!v)},[]);return o.jsxs(o.Fragment,{children:[C?o.jsx("div",{onClick:N,children:h.length?h.map(e=>o.jsx(R,{style:{display:"inline-block",fontSize:"12px",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id)):o.jsx(w,{type:"dashed",icon:o.jsx(Y,{}),size:"small"})}):o.jsx(w,{title:"标签",icon:o.jsx(ce,{}),onClick:N}),o.jsx(F,{title:"标签管理",placement:"right",onClose:()=>m(!1),open:v,mask:!0,style:{marginTop:"64px",height:"calc(100vh - 64px)"},children:o.jsxs("div",{className:"score-tags",children:[o.jsx("div",{className:"list",children:h.map(e=>o.jsx(R,{closable:!0,onClose:()=>D(e),style:{display:"inline-block",marginRight:"5px",marginBottom:"5px"},children:e.name},e.id))}),u&&o.jsx(le,{ref:g,size:"small",backfill:!0,options:A,style:{width:100},onChange:e=>{x(e)},placeholder:"输入",onBlur:()=>k(),onSelect:()=>{setTimeout(()=>{var e;(e=g.current)==null||e.blur()},0)},onKeyDown:e=>{e.key==="Enter"&&g.current.blur()}}),!u&&o.jsx(w,{className:"site-tag-plus",size:"small",onClick:()=>i(!0),children:o.jsx(Z,{})})]})})]})},Ee=me;export{le as A,Te as P,Ee as S,ce as T,fe as u}; diff --git a/dist/assets/TextArea-268b64d7.js b/dist/assets/TextArea-268b64d7.js new file mode 100644 index 0000000000000000000000000000000000000000..60dc5f6e2a737552999d93cd45411d8208129ac9 --- /dev/null +++ b/dist/assets/TextArea-268b64d7.js @@ -0,0 +1,40 @@ +import{A as zi,f as k,q as Et,B as Bt,p as Ke,l as Ge,P as Gr,aG as Li,K as kt,j as ge,Q as $n,ax as bn,a as q,O as wn,u as Ce,c as ee,w as Ae,d as zn,z as Ve,bb as It,v as Ln,ad as it,ae as Oe,b as h,t as _,_ as Z,bd as vt,af as $e,ag as De,o as qt,H as xt,C as at,i as Hi,be as Wi,e as zt,D as Hn,S as Yr,G as Xr,r as ir,s as ji,ay as Ui}from"./_setToString-64803aa4.js";import{r as f,_ as L,o as Lt,e as Bi,R as G}from"./umi-6680b95f.js";import{t as Wn,C as qi,u as Ki,N as ar}from"./button-8d21fb6b.js";var Gi={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"};const Yi=Gi;var Xi=function(t,n){return f.createElement(zi,k(k({},t),{},{ref:n,icon:Yi}))},Zi=f.forwardRef(Xi);const Ou=Zi;var Cn=f.createContext(null);function Qi(e){var t=e.children,n=e.onBatchResize,r=f.useRef(0),i=f.useRef([]),o=f.useContext(Cn),a=f.useCallback(function(u,s,l){r.current+=1;var c=r.current;i.current.push({size:u,element:s,data:l}),Promise.resolve().then(function(){c===r.current&&(n==null||n(i.current),i.current=[])}),o==null||o(u,s,l)},[n,o]);return f.createElement(Cn.Provider,{value:a},t)}var Zr=function(){if(typeof Map<"u")return Map;function e(t,n){var r=-1;return t.some(function(i,o){return i[0]===n?(r=o,!0):!1}),r}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(n){var r=e(this.__entries__,n),i=this.__entries__[r];return i&&i[1]},t.prototype.set=function(n,r){var i=e(this.__entries__,n);~i?this.__entries__[i][1]=r:this.__entries__.push([n,r])},t.prototype.delete=function(n){var r=this.__entries__,i=e(r,n);~i&&r.splice(i,1)},t.prototype.has=function(n){return!!~e(this.__entries__,n)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(n,r){r===void 0&&(r=null);for(var i=0,o=this.__entries__;i0},e.prototype.connect_=function(){!En||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ia?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!En||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var n=t.propertyName,r=n===void 0?"":n,i=ra.some(function(o){return!!~r.indexOf(o)});i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Qr=function(e,t){for(var n=0,r=Object.keys(t);n"u"||!(Element instanceof Object))){if(!(t instanceof nt(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(t)||(n.set(t,new va(t)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof nt(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(t)&&(n.delete(t),n.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(n){n.isActive()&&t.activeObservations_.push(n)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,n=this.activeObservations_.map(function(r){return new pa(r.target,r.broadcastRect())});this.callback_.call(t,n,t),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),ei=typeof WeakMap<"u"?new WeakMap:new Zr,ti=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=aa.getInstance(),r=new ha(t,n,this);ei.set(this,r)}return e}();["observe","unobserve","disconnect"].forEach(function(e){ti.prototype[e]=function(){var t;return(t=ei.get(this))[e].apply(t,arguments)}});var ni=function(){return typeof Ht.ResizeObserver<"u"?Ht.ResizeObserver:ti}(),ze=new Map;function ga(e){e.forEach(function(t){var n,r=t.target;(n=ze.get(r))===null||n===void 0||n.forEach(function(i){return i(r)})})}var ri=new ni(ga);function ma(e,t){ze.has(e)||(ze.set(e,new Set),ri.observe(e)),ze.get(e).add(t)}function ya(e,t){ze.has(e)&&(ze.get(e).delete(t),ze.get(e).size||(ri.unobserve(e),ze.delete(e)))}var ba=function(e){Et(n,e);var t=Bt(n);function n(){return Ke(this,n),t.apply(this,arguments)}return Ge(n,[{key:"render",value:function(){return this.props.children}}]),n}(f.Component);function wa(e,t){var n=e.children,r=e.disabled,i=f.useRef(null),o=f.useRef(null),a=f.useContext(Cn),u=typeof n=="function",s=u?n(i):n,l=f.useRef({width:-1,height:-1,offsetWidth:-1,offsetHeight:-1}),c=!u&&f.isValidElement(s)&&Gr(s),d=c?s.ref:null,v=Li(d,i),m=function(){var p;return kt(i.current)||(i.current&&ge(i.current)==="object"?kt((p=i.current)===null||p===void 0?void 0:p.nativeElement):null)||kt(o.current)};f.useImperativeHandle(t,function(){return m()});var y=f.useRef(e);y.current=e;var g=f.useCallback(function(b){var p=y.current,C=p.onResize,w=p.data,x=b.getBoundingClientRect(),E=x.width,P=x.height,S=b.offsetWidth,N=b.offsetHeight,F=Math.floor(E),R=Math.floor(P);if(l.current.width!==F||l.current.height!==R||l.current.offsetWidth!==S||l.current.offsetHeight!==N){var O={width:F,height:R,offsetWidth:S,offsetHeight:N};l.current=O;var T=S===Math.round(E)?E:S,M=N===Math.round(P)?P:N,I=k(k({},O),{},{offsetWidth:T,offsetHeight:M});a==null||a(I,b,w),C&&Promise.resolve().then(function(){C(I,b)})}},[]);return f.useEffect(function(){var b=m();return b&&!r&&ma(b,g),function(){return ya(b,g)}},[i.current,r]),f.createElement(ba,{ref:o},c?f.cloneElement(s,{ref:v}):s)}var Ca=f.forwardRef(wa),Ea="rc-observer-key";function xa(e,t){var n=e.children,r=typeof n=="function"?[n]:Wn(n);return r.map(function(i,o){var a=(i==null?void 0:i.key)||"".concat(Ea,"-").concat(o);return f.createElement(Ca,L({},e,{key:a,ref:o===0?t:void 0}),i)})}var Gt=f.forwardRef(xa);Gt.Collection=Qi;var sr=$n()?f.useLayoutEffect:f.useEffect,Be=function(t,n){var r=f.useRef(!0);sr(function(){return t(r.current)},n),sr(function(){return r.current=!1,function(){r.current=!0}},[])},ur=function(t,n){Be(function(r){if(!r)return t()},n)};function rn(e){return e!==void 0}function St(e,t){var n=t||{},r=n.defaultValue,i=n.value,o=n.onChange,a=n.postState,u=bn(function(){return rn(i)?i:rn(r)?typeof r=="function"?r():r:typeof e=="function"?e():e}),s=q(u,2),l=s[0],c=s[1],d=i!==void 0?i:l,v=a?a(d):d,m=wn(o),y=bn([d]),g=q(y,2),b=g[0],p=g[1];ur(function(){var w=b[0];l!==w&&m(l,w)},[b]),ur(function(){rn(i)||c(i)},[i]);var C=wn(function(w,x){c(w,x),p([d],x)});return[v,C]}function pt(e,t,n,r){var i=Lt.unstable_batchedUpdates?function(a){Lt.unstable_batchedUpdates(n,a)}:n;return e!=null&&e.addEventListener&&e.addEventListener(t,i,r),{remove:function(){e!=null&&e.removeEventListener&&e.removeEventListener(t,i,r)}}}const Sa=function(){if(typeof navigator>"u"||typeof window>"u")return!1;var e=navigator.userAgent||navigator.vendor||window.opera;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e==null?void 0:e.substr(0,4))};var H={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(t){var n=t.keyCode;if(t.altKey&&!t.ctrlKey||t.metaKey||n>=H.F1&&n<=H.F12)return!1;switch(n){case H.ALT:case H.CAPS_LOCK:case H.CONTEXT_MENU:case H.CTRL:case H.DOWN:case H.END:case H.ESC:case H.HOME:case H.INSERT:case H.LEFT:case H.MAC_FF_META:case H.META:case H.NUMLOCK:case H.NUM_CENTER:case H.PAGE_DOWN:case H.PAGE_UP:case H.PAUSE:case H.PRINT_SCREEN:case H.RIGHT:case H.SHIFT:case H.UP:case H.WIN_KEY:case H.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(t){if(t>=H.ZERO&&t<=H.NINE||t>=H.NUM_ZERO&&t<=H.NUM_MULTIPLY||t>=H.A&&t<=H.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&t===0)return!0;switch(t){case H.SPACE:case H.QUESTION_MARK:case H.NUM_PLUS:case H.NUM_MINUS:case H.NUM_PERIOD:case H.NUM_DIVISION:case H.SEMICOLON:case H.DASH:case H.EQUALS:case H.COMMA:case H.PERIOD:case H.SLASH:case H.APOSTROPHE:case H.SINGLE_QUOTE:case H.OPEN_SQUARE_BRACKET:case H.BACKSLASH:case H.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}},Pa=`accept acceptCharset accessKey action allowFullScreen allowTransparency + alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge + charSet checked classID className colSpan cols content contentEditable contextMenu + controls coords crossOrigin data dateTime default defer dir disabled download draggable + encType form formAction formEncType formMethod formNoValidate formTarget frameBorder + headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity + is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media + mediaGroup method min minLength multiple muted name noValidate nonce open + optimum pattern placeholder poster preload radioGroup readOnly rel required + reversed role rowSpan rows sandbox scope scoped scrolling seamless selected + shape size sizes span spellCheck src srcDoc srcLang srcSet start step style + summary tabIndex target title type useMap value width wmode wrap`,Fa=`onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown + onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick + onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown + onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel + onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough + onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata + onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError`,Ra="".concat(Pa," ").concat(Fa).split(/[\s\n]+/),Oa="aria-",Na="data-";function lr(e,t){return e.indexOf(t)===0}function Nu(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,n;t===!1?n={aria:!0,data:!0,attr:!0}:t===!0?n={aria:!0}:n=k({},t);var r={};return Object.keys(e).forEach(function(i){(n.aria&&(i==="role"||lr(i,Oa))||n.data&&lr(i,Na)||n.attr&&Ra.includes(i))&&(r[i]=e[i])}),r}var Ta=["prefixCls","invalidate","item","renderItem","responsive","responsiveDisabled","registerSize","itemKey","className","style","children","display","order","component"],Xe=void 0;function Ma(e,t){var n=e.prefixCls,r=e.invalidate,i=e.item,o=e.renderItem,a=e.responsive,u=e.responsiveDisabled,s=e.registerSize,l=e.itemKey,c=e.className,d=e.style,v=e.children,m=e.display,y=e.order,g=e.component,b=g===void 0?"div":g,p=Ce(e,Ta),C=a&&!m;function w(N){s(l,N)}f.useEffect(function(){return function(){w(null)}},[]);var x=o&&i!==Xe?o(i):v,E;r||(E={opacity:C?0:1,height:C?0:Xe,overflowY:C?"hidden":Xe,order:a?y:Xe,pointerEvents:C?"none":Xe,position:C?"absolute":Xe});var P={};C&&(P["aria-hidden"]=!0);var S=f.createElement(b,L({className:ee(!r&&n,c),style:k(k({},E),d)},P,p,{ref:t}),x);return a&&(S=f.createElement(Gt,{onResize:function(F){var R=F.offsetWidth;w(R)},disabled:u},S)),S}var mt=f.forwardRef(Ma);mt.displayName="Item";function _a(e){if(typeof MessageChannel>"u")Ae(e);else{var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(void 0)}}function Aa(){var e=f.useRef(null),t=function(r){e.current||(e.current=[],_a(function(){Bi.unstable_batchedUpdates(function(){e.current.forEach(function(i){i()}),e.current=null})})),e.current.push(r)};return t}function ft(e,t){var n=f.useState(t),r=q(n,2),i=r[0],o=r[1],a=wn(function(u){e(function(){o(u)})});return[i,a]}var jt=G.createContext(null),Va=["component"],ka=["className"],Ia=["className"],Da=function(t,n){var r=f.useContext(jt);if(!r){var i=t.component,o=i===void 0?"div":i,a=Ce(t,Va);return f.createElement(o,L({},a,{ref:n}))}var u=r.className,s=Ce(r,ka),l=t.className,c=Ce(t,Ia);return f.createElement(jt.Provider,{value:null},f.createElement(mt,L({ref:n,className:ee(u,l)},s,c)))},ii=f.forwardRef(Da);ii.displayName="RawItem";var $a=["prefixCls","data","renderItem","renderRawItem","itemKey","itemWidth","ssr","style","className","maxCount","renderRest","renderRawRest","suffix","component","itemComponent","onVisibleChange"],ai="responsive",oi="invalidate";function za(e){return"+ ".concat(e.length," ...")}function La(e,t){var n=e.prefixCls,r=n===void 0?"rc-overflow":n,i=e.data,o=i===void 0?[]:i,a=e.renderItem,u=e.renderRawItem,s=e.itemKey,l=e.itemWidth,c=l===void 0?10:l,d=e.ssr,v=e.style,m=e.className,y=e.maxCount,g=e.renderRest,b=e.renderRawRest,p=e.suffix,C=e.component,w=C===void 0?"div":C,x=e.itemComponent,E=e.onVisibleChange,P=Ce(e,$a),S=d==="full",N=Aa(),F=ft(N,null),R=q(F,2),O=R[0],T=R[1],M=O||0,I=ft(N,new Map),K=q(I,2),D=K[0],z=K[1],A=ft(N,0),W=q(A,2),J=W[0],j=W[1],V=ft(N,0),Y=q(V,2),$=Y[0],U=Y[1],se=ft(N,0),fe=q(se,2),ae=fe[0],pe=fe[1],ke=f.useState(null),Ne=q(ke,2),me=Ne[0],ie=Ne[1],Ee=f.useState(null),Te=q(Ee,2),xe=Te[0],st=Te[1],Ie=f.useMemo(function(){return xe===null&&S?Number.MAX_SAFE_INTEGER:xe||0},[xe,O]),Zt=f.useState(!1),he=q(Zt,2),Qt=he[0],Le=he[1],Ye="".concat(r,"-item"),ut=Math.max(J,$),He=y===ai,le=o.length&&He,re=y===oi,oe=le||typeof y=="number"&&o.length>y,ue=f.useMemo(function(){var X=o;return le?O===null&&S?X=o:X=o.slice(0,Math.min(o.length,M/c)):typeof y=="number"&&(X=o.slice(0,y)),X},[o,c,O,y,le]),ye=f.useMemo(function(){return le?o.slice(Ie+1):o.slice(ue.length)},[o,ue,le,Ie]),Rt=f.useCallback(function(X,te){var ve;return typeof s=="function"?s(X):(ve=s&&(X==null?void 0:X[s]))!==null&&ve!==void 0?ve:te},[s]),Vi=f.useCallback(a||function(X){return X},[a]);function Ot(X,te,ve){xe===X&&(te===void 0||te===me)||(st(X),ve||(Le(XM){Ot(Me-1,X-ct-ae+$);break}}p&&Jt(0)+ae>M&&ie(null)}},[M,D,$,ae,Rt,ue]);var tr=Qt&&!!ye.length,nr={};me!==null&&le&&(nr={position:"absolute",left:me,top:0});var lt={prefixCls:Ye,responsive:le,component:x,invalidate:re},$i=u?function(X,te){var ve=Rt(X,te);return f.createElement(jt.Provider,{key:ve,value:k(k({},lt),{},{order:te,item:X,itemKey:ve,registerSize:er,display:te<=Ie})},u(X,te))}:function(X,te){var ve=Rt(X,te);return f.createElement(mt,L({},lt,{order:te,key:ve,item:X,renderItem:Vi,itemKey:ve,registerSize:er,display:te<=Ie}))},en,rr={order:tr?Ie:Number.MAX_SAFE_INTEGER,className:"".concat(Ye,"-rest"),registerSize:Ii,display:tr};if(b)b&&(en=f.createElement(jt.Provider,{value:k(k({},lt),rr)},b(ye)));else{var tn=g||za;en=f.createElement(mt,L({},lt,rr),typeof tn=="function"?tn(ye):tn)}var nn=f.createElement(w,L({className:ee(!re&&r,m),style:v,ref:t},P),ue.map($i),oe?en:null,p&&f.createElement(mt,L({},lt,{responsive:He,responsiveDisabled:!le,order:Ie,className:"".concat(Ye,"-suffix"),registerSize:Di,display:!0,style:nr}),p));return He&&(nn=f.createElement(Gt,{onResize:ki,disabled:!le},nn)),nn}var Yt=f.forwardRef(La);Yt.displayName="Overflow";Yt.Item=ii;Yt.RESPONSIVE=ai;Yt.INVALIDATE=oi;var Ha=f.forwardRef(function(e,t){var n=e.didUpdate,r=e.getContainer,i=e.children,o=f.useRef(),a=f.useRef();f.useImperativeHandle(t,function(){return{}});var u=f.useRef(!1);return!u.current&&$n()&&(a.current=r(),o.current=a.current.parentNode,u.current=!0),f.useEffect(function(){n==null||n(e)}),f.useEffect(function(){return a.current.parentNode===null&&o.current!==null&&o.current.appendChild(a.current),function(){var s;(s=a.current)===null||s===void 0||(s=s.parentNode)===null||s===void 0||s.removeChild(a.current)}},[]),a.current?Lt.createPortal(i,a.current):null});function Wa(e,t,n){return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}function ja(e,t,n){var r=e[t]||{};return k(k({},r),n)}function Ua(e,t,n,r){for(var i=n.points,o=Object.keys(e),a=0;a=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function ho(e,t,n,r){var i=B.clone(e),o={width:t.width,height:t.height};return r.adjustX&&i.left=n.left&&i.left+o.width>n.right&&(o.width-=i.left+o.width-n.right),r.adjustX&&i.left+o.width>n.right&&(i.left=Math.max(n.right-o.width,n.left)),r.adjustY&&i.top=n.top&&i.top+o.height>n.bottom&&(o.height-=i.top+o.height-n.bottom),r.adjustY&&i.top+o.height>n.bottom&&(i.top=Math.max(n.bottom-o.height,n.top)),B.mix(i,o)}function qn(e){var t,n,r;if(!B.isWindow(e)&&e.nodeType!==9)t=B.offset(e),n=B.outerWidth(e),r=B.outerHeight(e);else{var i=B.getWindow(e);t={left:B.getWindowScrollLeft(i),top:B.getWindowScrollTop(i)},n=B.viewportWidth(i),r=B.viewportHeight(i)}return t.width=n,t.height=r,t}function br(e,t){var n=t.charAt(0),r=t.charAt(1),i=e.width,o=e.height,a=e.left,u=e.top;return n==="c"?u+=o/2:n==="b"&&(u+=o),r==="c"?a+=i/2:r==="r"&&(a+=i),{left:a,top:u}}function Tt(e,t,n,r,i){var o=br(t,n[1]),a=br(e,n[0]),u=[a.left-o.left,a.top-o.top];return{left:Math.round(e.left-u[0]+r[0]-i[0]),top:Math.round(e.top-u[1]+r[1]-i[1])}}function wr(e,t,n){return e.leftn.right}function Cr(e,t,n){return e.topn.bottom}function go(e,t,n){return e.left>n.right||e.left+t.widthn.bottom||e.top+t.height=n.right||r.top>=n.bottom}function Kn(e,t,n){var r=n.target||t,i=qn(r),o=!yo(r,n.overflow&&n.overflow.alwaysByViewport);return hi(e,i,n,o)}Kn.__getOffsetParent=Fn;Kn.__getVisibleRectForElement=Bn;function bo(e,t,n){var r,i,o=B.getDocument(e),a=o.defaultView||o.parentWindow,u=B.getWindowScrollLeft(a),s=B.getWindowScrollTop(a),l=B.viewportWidth(a),c=B.viewportHeight(a);"pageX"in t?r=t.pageX:r=u+t.clientX,"pageY"in t?i=t.pageY:i=s+t.clientY;var d={left:r,top:i,width:0,height:0},v=r>=0&&r<=u+l&&i>=0&&i<=s+c,m=[n.points[0],"cc"];return hi(e,d,fr(fr({},n),{},{points:m}),v)}function gi(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=new Set;function i(o,a){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,s=r.has(o);if(Ve(!s,"Warning: There may be circular references"),s)return!1;if(o===a)return!0;if(n&&u>1)return!1;r.add(o);var l=u+1;if(Array.isArray(o)){if(!Array.isArray(a)||o.length!==a.length)return!1;for(var c=0;c1&&(me=f.createElement("div",{className:"".concat(r,"-content")},a)),f.createElement(zn,L({visible:n,ref:P,leavedClassName:"".concat(r,"-hidden")},ae,{onAppearPrepare:pe,onEnterPrepare:pe,removeOnLeave:l,forceRender:c}),function(ie,Ee){var Te=ie.className,xe=ie.style,st=ee(r,i,F,Te);return f.createElement(mi,{target:U(),key:"popup",ref:E,monitorWindowResize:!0,disabled:Ne,align:d,onAlign:fe},f.createElement("div",{ref:Ee,className:st,onMouseEnter:b,onMouseLeave:p,onMouseDownCapture:C,onTouchStartCapture:w,onClick:x,style:k(k({},xe),ke)},me))})});yi.displayName="PopupInner";var bi=f.forwardRef(function(e,t){var n=e.prefixCls,r=e.visible,i=e.zIndex,o=e.children,a=e.mobile;a=a===void 0?{}:a;var u=a.popupClassName,s=a.popupStyle,l=a.popupMotion,c=l===void 0?{}:l,d=a.popupRender,v=e.onClick,m=f.useRef();f.useImperativeHandle(t,function(){return{forceAlign:function(){},getElement:function(){return m.current}}});var y=k({zIndex:i},s),g=o;return f.Children.count(o)>1&&(g=f.createElement("div",{className:"".concat(n,"-content")},o)),d&&(g=d(g)),f.createElement(zn,L({visible:r,ref:m,removeOnLeave:!0},c),function(b,p){var C=b.className,w=b.style,x=ee(n,u,C);return f.createElement("div",{ref:p,className:x,onClick:v,style:k(k({},w),y)},g)})});bi.displayName="MobilePopupInner";var Ro=["visible","mobile"],wi=f.forwardRef(function(e,t){var n=e.visible,r=e.mobile,i=Ce(e,Ro),o=f.useState(n),a=q(o,2),u=a[0],s=a[1],l=f.useState(!1),c=q(l,2),d=c[0],v=c[1],m=k(k({},i),{},{visible:u});f.useEffect(function(){s(n),n&&r&&v(Sa())},[n,r]);var y=d?f.createElement(bi,L({},m,{mobile:r,ref:t})):f.createElement(yi,L({},m,{ref:t}));return f.createElement("div",null,f.createElement(Ba,m),y)});wi.displayName="Popup";var Or=f.createContext(null);function ln(){}function Oo(){return""}function No(e){return e?e.ownerDocument:window.document}var To=["onClick","onMouseDown","onTouchStart","onMouseEnter","onMouseLeave","onFocus","onBlur","onContextMenu"];function Mo(e){var t=function(n){Et(i,n);var r=Bt(i);function i(o){var a;Ke(this,i),a=r.call(this,o),h(_(a),"popupRef",f.createRef()),h(_(a),"triggerRef",f.createRef()),h(_(a),"portalContainer",void 0),h(_(a),"attachId",void 0),h(_(a),"clickOutsideHandler",void 0),h(_(a),"touchOutsideHandler",void 0),h(_(a),"contextMenuOutsideHandler1",void 0),h(_(a),"contextMenuOutsideHandler2",void 0),h(_(a),"mouseDownTimeout",void 0),h(_(a),"focusTime",void 0),h(_(a),"preClickTime",void 0),h(_(a),"preTouchTime",void 0),h(_(a),"delayTimer",void 0),h(_(a),"hasPopupMouseDown",void 0),h(_(a),"onMouseEnter",function(s){var l=a.props.mouseEnterDelay;a.fireEvents("onMouseEnter",s),a.delaySetPopupVisible(!0,l,l?null:s)}),h(_(a),"onMouseMove",function(s){a.fireEvents("onMouseMove",s),a.setPoint(s)}),h(_(a),"onMouseLeave",function(s){a.fireEvents("onMouseLeave",s),a.delaySetPopupVisible(!1,a.props.mouseLeaveDelay)}),h(_(a),"onPopupMouseEnter",function(){a.clearDelayTimer()}),h(_(a),"onPopupMouseLeave",function(s){var l;s.relatedTarget&&!s.relatedTarget.setTimeout&&It((l=a.popupRef.current)===null||l===void 0?void 0:l.getElement(),s.relatedTarget)||a.delaySetPopupVisible(!1,a.props.mouseLeaveDelay)}),h(_(a),"onFocus",function(s){a.fireEvents("onFocus",s),a.clearDelayTimer(),a.isFocusToShow()&&(a.focusTime=Date.now(),a.delaySetPopupVisible(!0,a.props.focusDelay))}),h(_(a),"onMouseDown",function(s){a.fireEvents("onMouseDown",s),a.preClickTime=Date.now()}),h(_(a),"onTouchStart",function(s){a.fireEvents("onTouchStart",s),a.preTouchTime=Date.now()}),h(_(a),"onBlur",function(s){a.fireEvents("onBlur",s),a.clearDelayTimer(),a.isBlurToHide()&&a.delaySetPopupVisible(!1,a.props.blurDelay)}),h(_(a),"onContextMenu",function(s){s.preventDefault(),a.fireEvents("onContextMenu",s),a.setPopupVisible(!0,s)}),h(_(a),"onContextMenuClose",function(){a.isContextMenuToShow()&&a.close()}),h(_(a),"onClick",function(s){if(a.fireEvents("onClick",s),a.focusTime){var l;if(a.preClickTime&&a.preTouchTime?l=Math.min(a.preClickTime,a.preTouchTime):a.preClickTime?l=a.preClickTime:a.preTouchTime&&(l=a.preTouchTime),Math.abs(l-a.focusTime)<20)return;a.focusTime=0}a.preClickTime=0,a.preTouchTime=0,a.isClickToShow()&&(a.isClickToHide()||a.isBlurToHide())&&s&&s.preventDefault&&s.preventDefault();var c=!a.state.popupVisible;(a.isClickToHide()&&!c||c&&a.isClickToShow())&&a.setPopupVisible(!a.state.popupVisible,s)}),h(_(a),"onPopupMouseDown",function(){if(a.hasPopupMouseDown=!0,clearTimeout(a.mouseDownTimeout),a.mouseDownTimeout=window.setTimeout(function(){a.hasPopupMouseDown=!1},0),a.context){var s;(s=a.context).onPopupMouseDown.apply(s,arguments)}}),h(_(a),"onDocumentClick",function(s){if(!(a.props.mask&&!a.props.maskClosable)){var l=s.target,c=a.getRootDomNode(),d=a.getPopupDomNode();(!It(c,l)||a.isContextMenuOnly())&&!It(d,l)&&!a.hasPopupMouseDown&&a.close()}}),h(_(a),"getRootDomNode",function(){var s=a.props.getTriggerDOMNode;if(s)return s(a.triggerRef.current);try{var l=kt(a.triggerRef.current);if(l)return l}catch{}return Lt.findDOMNode(_(a))}),h(_(a),"getPopupClassNameFromAlign",function(s){var l=[],c=a.props,d=c.popupPlacement,v=c.builtinPlacements,m=c.prefixCls,y=c.alignPoint,g=c.getPopupClassNameFromAlign;return d&&v&&l.push(Ua(v,m,s,y)),g&&l.push(g(s)),l.join(" ")}),h(_(a),"getComponent",function(){var s=a.props,l=s.prefixCls,c=s.destroyPopupOnHide,d=s.popupClassName,v=s.onPopupAlign,m=s.popupMotion,y=s.popupAnimation,g=s.popupTransitionName,b=s.popupStyle,p=s.mask,C=s.maskAnimation,w=s.maskTransitionName,x=s.maskMotion,E=s.zIndex,P=s.popup,S=s.stretch,N=s.alignPoint,F=s.mobile,R=s.forceRender,O=s.onPopupClick,T=a.state,M=T.popupVisible,I=T.point,K=a.getPopupAlign(),D={};return a.isMouseEnterToShow()&&(D.onMouseEnter=a.onPopupMouseEnter),a.isMouseLeaveToHide()&&(D.onMouseLeave=a.onPopupMouseLeave),D.onMouseDown=a.onPopupMouseDown,D.onTouchStart=a.onPopupMouseDown,f.createElement(wi,L({prefixCls:l,destroyPopupOnHide:c,visible:M,point:N&&I,className:d,align:K,onAlign:v,animation:y,getClassNameFromAlign:a.getPopupClassNameFromAlign},D,{stretch:S,getRootDomNode:a.getRootDomNode,style:b,mask:p,zIndex:E,transitionName:g,maskAnimation:C,maskTransitionName:w,maskMotion:x,ref:a.popupRef,motion:m,mobile:F,forceRender:R,onClick:O}),typeof P=="function"?P():P)}),h(_(a),"attachParent",function(s){Ae.cancel(a.attachId);var l=a.props,c=l.getPopupContainer,d=l.getDocument,v=a.getRootDomNode(),m;c?(v||c.length===0)&&(m=c(v)):m=d(a.getRootDomNode()).body,m?m.appendChild(s):a.attachId=Ae(function(){a.attachParent(s)})}),h(_(a),"getContainer",function(){if(!a.portalContainer){var s=a.props.getDocument,l=s(a.getRootDomNode()).createElement("div");l.style.position="absolute",l.style.top="0",l.style.left="0",l.style.width="100%",a.portalContainer=l}return a.attachParent(a.portalContainer),a.portalContainer}),h(_(a),"setPoint",function(s){var l=a.props.alignPoint;!l||!s||a.setState({point:{pageX:s.pageX,pageY:s.pageY}})}),h(_(a),"handlePortalUpdate",function(){a.state.prevPopupVisible!==a.state.popupVisible&&a.props.afterPopupVisibleChange(a.state.popupVisible)}),h(_(a),"triggerContextValue",{onPopupMouseDown:a.onPopupMouseDown});var u;return"popupVisible"in o?u=!!o.popupVisible:u=!!o.defaultPopupVisible,a.state={prevPopupVisible:u,popupVisible:u},To.forEach(function(s){a["fire".concat(s)]=function(l){a.fireEvents(s,l)}}),a}return Ge(i,[{key:"componentDidMount",value:function(){this.componentDidUpdate()}},{key:"componentDidUpdate",value:function(){var a=this.props,u=this.state;if(u.popupVisible){var s;!this.clickOutsideHandler&&(this.isClickToHide()||this.isContextMenuToShow())&&(s=a.getDocument(this.getRootDomNode()),this.clickOutsideHandler=pt(s,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(s=s||a.getDocument(this.getRootDomNode()),this.touchOutsideHandler=pt(s,"touchstart",this.onDocumentClick)),!this.contextMenuOutsideHandler1&&this.isContextMenuToShow()&&(s=s||a.getDocument(this.getRootDomNode()),this.contextMenuOutsideHandler1=pt(s,"scroll",this.onContextMenuClose)),!this.contextMenuOutsideHandler2&&this.isContextMenuToShow()&&(this.contextMenuOutsideHandler2=pt(window,"blur",this.onContextMenuClose));return}this.clearOutsideHandler()}},{key:"componentWillUnmount",value:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout),Ae.cancel(this.attachId)}},{key:"getPopupDomNode",value:function(){var a;return((a=this.popupRef.current)===null||a===void 0?void 0:a.getElement())||null}},{key:"getPopupAlign",value:function(){var a=this.props,u=a.popupPlacement,s=a.popupAlign,l=a.builtinPlacements;return u&&l?ja(l,u,s):s}},{key:"setPopupVisible",value:function(a,u){var s=this.props.alignPoint,l=this.state.popupVisible;this.clearDelayTimer(),l!==a&&("popupVisible"in this.props||this.setState({popupVisible:a,prevPopupVisible:l}),this.props.onPopupVisibleChange(a)),s&&u&&a&&this.setPoint(u)}},{key:"delaySetPopupVisible",value:function(a,u,s){var l=this,c=u*1e3;if(this.clearDelayTimer(),c){var d=s?{pageX:s.pageX,pageY:s.pageY}:null;this.delayTimer=window.setTimeout(function(){l.setPopupVisible(a,d),l.clearDelayTimer()},c)}else this.setPopupVisible(a,s)}},{key:"clearDelayTimer",value:function(){this.delayTimer&&(clearTimeout(this.delayTimer),this.delayTimer=null)}},{key:"clearOutsideHandler",value:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextMenuOutsideHandler1&&(this.contextMenuOutsideHandler1.remove(),this.contextMenuOutsideHandler1=null),this.contextMenuOutsideHandler2&&(this.contextMenuOutsideHandler2.remove(),this.contextMenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)}},{key:"createTwoChains",value:function(a){var u=this.props.children.props,s=this.props;return u[a]&&s[a]?this["fire".concat(a)]:u[a]||s[a]}},{key:"isClickToShow",value:function(){var a=this.props,u=a.action,s=a.showAction;return u.indexOf("click")!==-1||s.indexOf("click")!==-1}},{key:"isContextMenuOnly",value:function(){var a=this.props.action;return a==="contextMenu"||a.length===1&&a[0]==="contextMenu"}},{key:"isContextMenuToShow",value:function(){var a=this.props,u=a.action,s=a.showAction;return u.indexOf("contextMenu")!==-1||s.indexOf("contextMenu")!==-1}},{key:"isClickToHide",value:function(){var a=this.props,u=a.action,s=a.hideAction;return u.indexOf("click")!==-1||s.indexOf("click")!==-1}},{key:"isMouseEnterToShow",value:function(){var a=this.props,u=a.action,s=a.showAction;return u.indexOf("hover")!==-1||s.indexOf("mouseEnter")!==-1}},{key:"isMouseLeaveToHide",value:function(){var a=this.props,u=a.action,s=a.hideAction;return u.indexOf("hover")!==-1||s.indexOf("mouseLeave")!==-1}},{key:"isFocusToShow",value:function(){var a=this.props,u=a.action,s=a.showAction;return u.indexOf("focus")!==-1||s.indexOf("focus")!==-1}},{key:"isBlurToHide",value:function(){var a=this.props,u=a.action,s=a.hideAction;return u.indexOf("focus")!==-1||s.indexOf("blur")!==-1}},{key:"forcePopupAlign",value:function(){if(this.state.popupVisible){var a;(a=this.popupRef.current)===null||a===void 0||a.forceAlign()}}},{key:"fireEvents",value:function(a,u){var s=this.props.children.props[a];s&&s(u);var l=this.props[a];l&&l(u)}},{key:"close",value:function(){this.setPopupVisible(!1)}},{key:"render",value:function(){var a=this.state.popupVisible,u=this.props,s=u.children,l=u.forceRender,c=u.alignPoint,d=u.className,v=u.autoDestroy,m=f.Children.only(s),y={key:"trigger"};this.isContextMenuToShow()?y.onContextMenu=this.onContextMenu:y.onContextMenu=this.createTwoChains("onContextMenu"),this.isClickToHide()||this.isClickToShow()?(y.onClick=this.onClick,y.onMouseDown=this.onMouseDown,y.onTouchStart=this.onTouchStart):(y.onClick=this.createTwoChains("onClick"),y.onMouseDown=this.createTwoChains("onMouseDown"),y.onTouchStart=this.createTwoChains("onTouchStart")),this.isMouseEnterToShow()?(y.onMouseEnter=this.onMouseEnter,c&&(y.onMouseMove=this.onMouseMove)):y.onMouseEnter=this.createTwoChains("onMouseEnter"),this.isMouseLeaveToHide()?y.onMouseLeave=this.onMouseLeave:y.onMouseLeave=this.createTwoChains("onMouseLeave"),this.isFocusToShow()||this.isBlurToHide()?(y.onFocus=this.onFocus,y.onBlur=this.onBlur):(y.onFocus=this.createTwoChains("onFocus"),y.onBlur=this.createTwoChains("onBlur"));var g=ee(m&&m.props&&m.props.className,d);g&&(y.className=g);var b=k({},y);Gr(m)&&(b.ref=Ln(this.triggerRef,m.ref));var p=f.cloneElement(m,b),C;return(a||this.popupRef.current||l)&&(C=f.createElement(e,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},this.getComponent())),!a&&v&&(C=null),f.createElement(Or.Provider,{value:this.triggerContextValue},p,C)}}],[{key:"getDerivedStateFromProps",value:function(a,u){var s=a.popupVisible,l={};return s!==void 0&&u.popupVisible!==s&&(l.popupVisible=s,l.prevPopupVisible=u.popupVisible),l}}]),i}(f.Component);return h(t,"contextType",Or),h(t,"defaultProps",{prefixCls:"rc-trigger-popup",getPopupClassNameFromAlign:Oo,getDocument:No,onPopupVisibleChange:ln,afterPopupVisibleChange:ln,onPopupAlign:ln,popupClassName:"",mouseEnterDelay:0,mouseLeaveDelay:.1,focusDelay:0,blurDelay:.15,popupStyle:{},destroyPopupOnHide:!1,popupAlign:{},defaultPopupVisible:!1,mask:!1,maskClosable:!0,action:[],showAction:[],hideAction:[],autoDestroy:!1}),t}const _o=Mo(Ha);var je="RC_FORM_INTERNAL_HOOKS",ne=function(){Ve(!1,"Can not find FormContext. Please make sure you wrap Field under Form.")},qe=f.createContext({getFieldValue:ne,getFieldsValue:ne,getFieldError:ne,getFieldWarning:ne,getFieldsError:ne,isFieldsTouched:ne,isFieldTouched:ne,isFieldValidating:ne,isFieldsValidating:ne,resetFields:ne,setFields:ne,setFieldValue:ne,setFieldsValue:ne,validateFields:ne,submit:ne,getInternalHooks:function(){return ne(),{dispatch:ne,initEntityValue:ne,registerField:ne,useSubscribe:ne,setInitialValues:ne,destroyForm:ne,setCallbacks:ne,registerWatch:ne,getFields:ne,setValidateMessages:ne,setPreserve:ne,getInitialValue:ne}}}),wt=f.createContext(null);function Rn(e){return e==null?[]:Array.isArray(e)?e:[e]}function Ao(e){return e&&!!e._init}function Ue(){return Ue=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Dt(e,t,n){return ko()?Dt=Reflect.construct.bind():Dt=function(i,o,a){var u=[null];u.push.apply(u,o);var s=Function.bind.apply(i,u),l=new s;return a&&Ct(l,a.prototype),l},Dt.apply(null,arguments)}function Io(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function Nn(e){var t=typeof Map=="function"?new Map:void 0;return Nn=function(r){if(r===null||!Io(r))return r;if(typeof r!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(r))return t.get(r);t.set(r,i)}function i(){return Dt(r,arguments,On(this).constructor)}return i.prototype=Object.create(r.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),Ct(i,r)},Nn(e)}var Do=/%[sdj%]/g,$o=function(){};typeof process<"u"&&process.env;function Tn(e){if(!e||!e.length)return null;var t={};return e.forEach(function(n){var r=n.field;t[r]=t[r]||[],t[r].push(n)}),t}function we(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=o)return u;switch(u){case"%s":return String(n[i++]);case"%d":return Number(n[i++]);case"%j":try{return JSON.stringify(n[i++])}catch{return"[Circular]"}break;default:return u}});return a}return e}function zo(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"}function de(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||zo(t)&&typeof e=="string"&&!e)}function Lo(e,t,n){var r=[],i=0,o=e.length;function a(u){r.push.apply(r,u||[]),i++,i===o&&n(r)}e.forEach(function(u){t(u,a)})}function Nr(e,t,n){var r=0,i=e.length;function o(a){if(a&&a.length){n(a);return}var u=r;r=r+1,u()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},gt={integer:function(t){return gt.number(t)&&parseInt(t,10)===t},float:function(t){return gt.number(t)&&!gt.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return typeof t=="object"&&!gt.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(Ar.email)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(qo())},hex:function(t){return typeof t=="string"&&!!t.match(Ar.hex)}},Ko=function(t,n,r,i,o){if(t.required&&n===void 0){Ci(t,n,r,i,o);return}var a=["integer","float","array","regexp","object","method","email","number","date","url","hex"],u=t.type;a.indexOf(u)>-1?gt[u](n)||i.push(we(o.messages.types[u],t.fullField,t.type)):u&&typeof n!==t.type&&i.push(we(o.messages.types[u],t.fullField,t.type))},Go=function(t,n,r,i,o){var a=typeof t.len=="number",u=typeof t.min=="number",s=typeof t.max=="number",l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=n,d=null,v=typeof n=="number",m=typeof n=="string",y=Array.isArray(n);if(v?d="number":m?d="string":y&&(d="array"),!d)return!1;y&&(c=n.length),m&&(c=n.replace(l,"_").length),a?c!==t.len&&i.push(we(o.messages[d].len,t.fullField,t.len)):u&&!s&&ct.max?i.push(we(o.messages[d].max,t.fullField,t.max)):u&&s&&(ct.max)&&i.push(we(o.messages[d].range,t.fullField,t.min,t.max))},Ze="enum",Yo=function(t,n,r,i,o){t[Ze]=Array.isArray(t[Ze])?t[Ze]:[],t[Ze].indexOf(n)===-1&&i.push(we(o.messages[Ze],t.fullField,t[Ze].join(", ")))},Xo=function(t,n,r,i,o){if(t.pattern){if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(n)||i.push(we(o.messages.pattern.mismatch,t.fullField,n,t.pattern));else if(typeof t.pattern=="string"){var a=new RegExp(t.pattern);a.test(n)||i.push(we(o.messages.pattern.mismatch,t.fullField,n,t.pattern))}}},Q={required:Ci,whitespace:Bo,type:Ko,range:Go,enum:Yo,pattern:Xo},Zo=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n,"string")&&!t.required)return r();Q.required(t,n,i,a,o,"string"),de(n,"string")||(Q.type(t,n,i,a,o),Q.range(t,n,i,a,o),Q.pattern(t,n,i,a,o),t.whitespace===!0&&Q.whitespace(t,n,i,a,o))}r(a)},Qo=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o),n!==void 0&&Q.type(t,n,i,a,o)}r(a)},Jo=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(n===""&&(n=void 0),de(n)&&!t.required)return r();Q.required(t,n,i,a,o),n!==void 0&&(Q.type(t,n,i,a,o),Q.range(t,n,i,a,o))}r(a)},es=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o),n!==void 0&&Q.type(t,n,i,a,o)}r(a)},ts=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o),de(n)||Q.type(t,n,i,a,o)}r(a)},ns=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o),n!==void 0&&(Q.type(t,n,i,a,o),Q.range(t,n,i,a,o))}r(a)},rs=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o),n!==void 0&&(Q.type(t,n,i,a,o),Q.range(t,n,i,a,o))}r(a)},is=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(n==null&&!t.required)return r();Q.required(t,n,i,a,o,"array"),n!=null&&(Q.type(t,n,i,a,o),Q.range(t,n,i,a,o))}r(a)},as=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o),n!==void 0&&Q.type(t,n,i,a,o)}r(a)},os="enum",ss=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o),n!==void 0&&Q[os](t,n,i,a,o)}r(a)},us=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n,"string")&&!t.required)return r();Q.required(t,n,i,a,o),de(n,"string")||Q.pattern(t,n,i,a,o)}r(a)},ls=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n,"date")&&!t.required)return r();if(Q.required(t,n,i,a,o),!de(n,"date")){var s;n instanceof Date?s=n:s=new Date(n),Q.type(t,s,i,a,o),s&&Q.range(t,s.getTime(),i,a,o)}}r(a)},cs=function(t,n,r,i,o){var a=[],u=Array.isArray(n)?"array":typeof n;Q.required(t,n,i,a,o,u),r(a)},cn=function(t,n,r,i,o){var a=t.type,u=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(de(n,a)&&!t.required)return r();Q.required(t,n,i,u,o,a),de(n,a)||Q.type(t,n,i,u,o)}r(u)},fs=function(t,n,r,i,o){var a=[],u=t.required||!t.required&&i.hasOwnProperty(t.field);if(u){if(de(n)&&!t.required)return r();Q.required(t,n,i,a,o)}r(a)},yt={string:Zo,method:Qo,number:Jo,boolean:es,regexp:ts,integer:ns,float:rs,array:is,object:as,enum:ss,pattern:us,date:ls,url:cn,hex:cn,email:cn,required:cs,any:fs};function Mn(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var _n=Mn(),Ft=function(){function e(n){this.rules=null,this._messages=_n,this.define(n)}var t=e.prototype;return t.define=function(r){var i=this;if(!r)throw new Error("Cannot configure a schema with no rules");if(typeof r!="object"||Array.isArray(r))throw new Error("Rules must be an object");this.rules={},Object.keys(r).forEach(function(o){var a=r[o];i.rules[o]=Array.isArray(a)?a:[a]})},t.messages=function(r){return r&&(this._messages=_r(Mn(),r)),this._messages},t.validate=function(r,i,o){var a=this;i===void 0&&(i={}),o===void 0&&(o=function(){});var u=r,s=i,l=o;if(typeof s=="function"&&(l=s,s={}),!this.rules||Object.keys(this.rules).length===0)return l&&l(null,u),Promise.resolve(u);function c(g){var b=[],p={};function C(x){if(Array.isArray(x)){var E;b=(E=b).concat.apply(E,x)}else b.push(x)}for(var w=0;w2&&arguments[2]!==void 0?arguments[2]:!1;return e&&e.some(function(r){return xi(t,r,n)})}function xi(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return!e||!t||!n&&e.length!==t.length?!1:t.every(function(r,i){return e[i]===r})}function gs(e,t){if(e===t)return!0;if(!e&&t||e&&!t||!e||!t||ge(e)!=="object"||ge(t)!=="object")return!1;var n=Object.keys(e),r=Object.keys(t),i=new Set([].concat(n,r));return Z(i).every(function(o){var a=e[o],u=t[o];return typeof a=="function"&&typeof u=="function"?!0:a===u})}function ms(e){var t=arguments.length<=1?void 0:arguments[1];return t&&t.target&&ge(t.target)==="object"&&e in t.target?t.target[e]:t}function Dr(e,t,n){var r=e.length;if(t<0||t>=r||n<0||n>=r)return e;var i=e[t],o=t-n;return o>0?[].concat(Z(e.slice(0,n)),[i],Z(e.slice(n,t)),Z(e.slice(t+1,r))):o<0?[].concat(Z(e.slice(0,t)),Z(e.slice(t+1,n+1)),[i],Z(e.slice(n+1,r))):e}var ys=["name"],Se=[];function $r(e,t,n,r,i,o){return typeof e=="function"?e(t,n,"source"in o?{source:o.source}:{}):r!==i}var Gn=function(e){Et(n,e);var t=Bt(n);function n(r){var i;if(Ke(this,n),i=t.call(this,r),h(_(i),"state",{resetCount:0}),h(_(i),"cancelRegisterFunc",null),h(_(i),"mounted",!1),h(_(i),"touched",!1),h(_(i),"dirty",!1),h(_(i),"validatePromise",void 0),h(_(i),"prevValidating",void 0),h(_(i),"errors",Se),h(_(i),"warnings",Se),h(_(i),"cancelRegister",function(){var s=i.props,l=s.preserve,c=s.isListField,d=s.name;i.cancelRegisterFunc&&i.cancelRegisterFunc(c,l,ce(d)),i.cancelRegisterFunc=null}),h(_(i),"getNamePath",function(){var s=i.props,l=s.name,c=s.fieldContext,d=c.prefixName,v=d===void 0?[]:d;return l!==void 0?[].concat(Z(v),Z(l)):[]}),h(_(i),"getRules",function(){var s=i.props,l=s.rules,c=l===void 0?[]:l,d=s.fieldContext;return c.map(function(v){return typeof v=="function"?v(d):v})}),h(_(i),"refresh",function(){i.mounted&&i.setState(function(s){var l=s.resetCount;return{resetCount:l+1}})}),h(_(i),"metaCache",null),h(_(i),"triggerMetaEvent",function(s){var l=i.props.onMetaChange;if(l){var c=k(k({},i.getMeta()),{},{destroy:s});gi(i.metaCache,c)||l(c),i.metaCache=c}else i.metaCache=null}),h(_(i),"onStoreChange",function(s,l,c){var d=i.props,v=d.shouldUpdate,m=d.dependencies,y=m===void 0?[]:m,g=d.onReset,b=c.store,p=i.getNamePath(),C=i.getValue(s),w=i.getValue(b),x=l&&et(l,p);switch(c.type==="valueUpdate"&&c.source==="external"&&C!==w&&(i.touched=!0,i.dirty=!0,i.validatePromise=null,i.errors=Se,i.warnings=Se,i.triggerMetaEvent()),c.type){case"reset":if(!l||x){i.touched=!1,i.dirty=!1,i.validatePromise=void 0,i.errors=Se,i.warnings=Se,i.triggerMetaEvent(),g==null||g(),i.refresh();return}break;case"remove":{if(v){i.reRender();return}break}case"setField":{var E=c.data;if(x){"touched"in E&&(i.touched=E.touched),"validating"in E&&!("originRCField"in E)&&(i.validatePromise=E.validating?Promise.resolve([]):null),"errors"in E&&(i.errors=E.errors||Se),"warnings"in E&&(i.warnings=E.warnings||Se),i.dirty=!0,i.triggerMetaEvent(),i.reRender();return}else if("value"in E&&et(l,p,!0)){i.reRender();return}if(v&&!p.length&&$r(v,s,b,C,w,c)){i.reRender();return}break}case"dependenciesUpdate":{var P=y.map(ce);if(P.some(function(S){return et(c.relatedFields,S)})){i.reRender();return}break}default:if(x||(!y.length||p.length||v)&&$r(v,s,b,C,w,c)){i.reRender();return}break}v===!0&&i.reRender()}),h(_(i),"validateRules",function(s){var l=i.getNamePath(),c=i.getValue(),d=s||{},v=d.triggerName,m=d.validateOnly,y=m===void 0?!1:m,g=Promise.resolve().then(it(Oe().mark(function b(){var p,C,w,x,E,P,S;return Oe().wrap(function(F){for(;;)switch(F.prev=F.next){case 0:if(i.mounted){F.next=2;break}return F.abrupt("return",[]);case 2:if(p=i.props,C=p.validateFirst,w=C===void 0?!1:C,x=p.messageVariables,E=p.validateDebounce,P=i.getRules(),v&&(P=P.filter(function(R){return R}).filter(function(R){var O=R.validateTrigger;if(!O)return!0;var T=Rn(O);return T.includes(v)})),!(E&&v)){F.next=10;break}return F.next=8,new Promise(function(R){setTimeout(R,E)});case 8:if(i.validatePromise===g){F.next=10;break}return F.abrupt("return",[]);case 10:return S=vs(l,c,P,s,w,x),S.catch(function(R){return R}).then(function(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Se;if(i.validatePromise===g){var O;i.validatePromise=null;var T=[],M=[];(O=R.forEach)===null||O===void 0||O.call(R,function(I){var K=I.rule.warningOnly,D=I.errors,z=D===void 0?Se:D;K?M.push.apply(M,Z(z)):T.push.apply(T,Z(z))}),i.errors=T,i.warnings=M,i.triggerMetaEvent(),i.reRender()}}),F.abrupt("return",S);case 13:case"end":return F.stop()}},b)})));return y||(i.validatePromise=g,i.dirty=!0,i.errors=Se,i.warnings=Se,i.triggerMetaEvent(),i.reRender()),g}),h(_(i),"isFieldValidating",function(){return!!i.validatePromise}),h(_(i),"isFieldTouched",function(){return i.touched}),h(_(i),"isFieldDirty",function(){if(i.dirty||i.props.initialValue!==void 0)return!0;var s=i.props.fieldContext,l=s.getInternalHooks(je),c=l.getInitialValue;return c(i.getNamePath())!==void 0}),h(_(i),"getErrors",function(){return i.errors}),h(_(i),"getWarnings",function(){return i.warnings}),h(_(i),"isListField",function(){return i.props.isListField}),h(_(i),"isList",function(){return i.props.isList}),h(_(i),"isPreserve",function(){return i.props.preserve}),h(_(i),"getMeta",function(){i.prevValidating=i.isFieldValidating();var s={touched:i.isFieldTouched(),validating:i.prevValidating,errors:i.errors,warnings:i.warnings,name:i.getNamePath(),validated:i.validatePromise===null};return s}),h(_(i),"getOnlyChild",function(s){if(typeof s=="function"){var l=i.getMeta();return k(k({},i.getOnlyChild(s(i.getControlled(),l,i.props.fieldContext))),{},{isFunction:!0})}var c=Wn(s);return c.length!==1||!f.isValidElement(c[0])?{child:c,isFunction:!1}:{child:c[0],isFunction:!1}}),h(_(i),"getValue",function(s){var l=i.props.fieldContext.getFieldsValue,c=i.getNamePath();return $e(s||l(!0),c)}),h(_(i),"getControlled",function(){var s=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},l=i.props,c=l.trigger,d=l.validateTrigger,v=l.getValueFromEvent,m=l.normalize,y=l.valuePropName,g=l.getValueProps,b=l.fieldContext,p=d!==void 0?d:b.validateTrigger,C=i.getNamePath(),w=b.getInternalHooks,x=b.getFieldsValue,E=w(je),P=E.dispatch,S=i.getValue(),N=g||function(T){return h({},y,T)},F=s[c],R=k(k({},s),N(S));R[c]=function(){i.touched=!0,i.dirty=!0,i.triggerMetaEvent();for(var T,M=arguments.length,I=new Array(M),K=0;K=0&&R<=O.length?(c.keys=[].concat(Z(c.keys.slice(0,R)),[c.id],Z(c.keys.slice(R))),w([].concat(Z(O.slice(0,R)),[F],Z(O.slice(R))))):(c.keys=[].concat(Z(c.keys),[c.id]),w([].concat(Z(O),[F]))),c.id+=1},remove:function(F){var R=E(),O=new Set(Array.isArray(F)?F:[F]);O.size<=0||(c.keys=c.keys.filter(function(T,M){return!O.has(M)}),w(R.filter(function(T,M){return!O.has(M)})))},move:function(F,R){if(F!==R){var O=E();F<0||F>=O.length||R<0||R>=O.length||(c.keys=Dr(c.keys,F,R),w(Dr(O,F,R)))}}},S=C||[];return Array.isArray(S)||(S=[]),r(S.map(function(N,F){var R=c.keys[F];return R===void 0&&(c.keys[F]=c.id,R=c.keys[F],c.id+=1),{name:F,key:R,isListField:!0}}),P,b)})))}function bs(e){var t=!1,n=e.length,r=[];return e.length?new Promise(function(i,o){e.forEach(function(a,u){a.catch(function(s){return t=!0,s}).then(function(s){n-=1,r[u]=s,!(n>0)&&(t&&o(r),i(r))})})}):Promise.resolve([])}var Pi="__@field_split__";function fn(e){return e.map(function(t){return"".concat(ge(t),":").concat(t)}).join(Pi)}var Qe=function(){function e(){Ke(this,e),h(this,"kvs",new Map)}return Ge(e,[{key:"set",value:function(n,r){this.kvs.set(fn(n),r)}},{key:"get",value:function(n){return this.kvs.get(fn(n))}},{key:"update",value:function(n,r){var i=this.get(n),o=r(i);o?this.set(n,o):this.delete(n)}},{key:"delete",value:function(n){this.kvs.delete(fn(n))}},{key:"map",value:function(n){return Z(this.kvs.entries()).map(function(r){var i=q(r,2),o=i[0],a=i[1],u=o.split(Pi);return n({key:u.map(function(s){var l=s.match(/^([^:]*):(.*)$/),c=q(l,3),d=c[1],v=c[2];return d==="number"?Number(v):v}),value:a})})}},{key:"toJSON",value:function(){var n={};return this.map(function(r){var i=r.key,o=r.value;return n[i.join(".")]=o,null}),n}}]),e}(),ws=["name"],Cs=Ge(function e(t){var n=this;Ke(this,e),h(this,"formHooked",!1),h(this,"forceRootUpdate",void 0),h(this,"subscribable",!0),h(this,"store",{}),h(this,"fieldEntities",[]),h(this,"initialValues",{}),h(this,"callbacks",{}),h(this,"validateMessages",null),h(this,"preserve",null),h(this,"lastValidatePromise",null),h(this,"getForm",function(){return{getFieldValue:n.getFieldValue,getFieldsValue:n.getFieldsValue,getFieldError:n.getFieldError,getFieldWarning:n.getFieldWarning,getFieldsError:n.getFieldsError,isFieldsTouched:n.isFieldsTouched,isFieldTouched:n.isFieldTouched,isFieldValidating:n.isFieldValidating,isFieldsValidating:n.isFieldsValidating,resetFields:n.resetFields,setFields:n.setFields,setFieldValue:n.setFieldValue,setFieldsValue:n.setFieldsValue,validateFields:n.validateFields,submit:n.submit,_init:!0,getInternalHooks:n.getInternalHooks}}),h(this,"getInternalHooks",function(r){return r===je?(n.formHooked=!0,{dispatch:n.dispatch,initEntityValue:n.initEntityValue,registerField:n.registerField,useSubscribe:n.useSubscribe,setInitialValues:n.setInitialValues,destroyForm:n.destroyForm,setCallbacks:n.setCallbacks,setValidateMessages:n.setValidateMessages,getFields:n.getFields,setPreserve:n.setPreserve,getInitialValue:n.getInitialValue,registerWatch:n.registerWatch}):(Ve(!1,"`getInternalHooks` is internal usage. Should not call directly."),null)}),h(this,"useSubscribe",function(r){n.subscribable=r}),h(this,"prevWithoutPreserves",null),h(this,"setInitialValues",function(r,i){if(n.initialValues=r||{},i){var o,a=vt(r,n.store);(o=n.prevWithoutPreserves)===null||o===void 0||o.map(function(u){var s=u.key;a=De(a,s,$e(r,s))}),n.prevWithoutPreserves=null,n.updateStore(a)}}),h(this,"destroyForm",function(){var r=new Qe;n.getFieldEntities(!0).forEach(function(i){n.isMergedPreserve(i.isPreserve())||r.set(i.getNamePath(),!0)}),n.prevWithoutPreserves=r}),h(this,"getInitialValue",function(r){var i=$e(n.initialValues,r);return r.length?vt(i):i}),h(this,"setCallbacks",function(r){n.callbacks=r}),h(this,"setValidateMessages",function(r){n.validateMessages=r}),h(this,"setPreserve",function(r){n.preserve=r}),h(this,"watchList",[]),h(this,"registerWatch",function(r){return n.watchList.push(r),function(){n.watchList=n.watchList.filter(function(i){return i!==r})}}),h(this,"notifyWatch",function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(n.watchList.length){var i=n.getFieldsValue(),o=n.getFieldsValue(!0);n.watchList.forEach(function(a){a(i,o,r)})}}),h(this,"timeoutId",null),h(this,"warningUnhooked",function(){}),h(this,"updateStore",function(r){n.store=r}),h(this,"getFieldEntities",function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;return r?n.fieldEntities.filter(function(i){return i.getNamePath().length}):n.fieldEntities}),h(this,"getFieldsMap",function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=new Qe;return n.getFieldEntities(r).forEach(function(o){var a=o.getNamePath();i.set(a,o)}),i}),h(this,"getFieldEntitiesForNamePathList",function(r){if(!r)return n.getFieldEntities(!0);var i=n.getFieldsMap(!0);return r.map(function(o){var a=ce(o);return i.get(a)||{INVALIDATE_NAME_PATH:ce(o)}})}),h(this,"getFieldsValue",function(r,i){n.warningUnhooked();var o,a,u;if(r===!0||Array.isArray(r)?(o=r,a=i):r&&ge(r)==="object"&&(u=r.strict,a=r.filter),o===!0&&!a)return n.store;var s=n.getFieldEntitiesForNamePathList(Array.isArray(o)?o:null),l=[];return s.forEach(function(c){var d,v,m="INVALIDATE_NAME_PATH"in c?c.INVALIDATE_NAME_PATH:c.getNamePath();if(u){var y,g;if((y=(g=c).isList)!==null&&y!==void 0&&y.call(g))return}else if(!o&&(d=(v=c).isListField)!==null&&d!==void 0&&d.call(v))return;if(!a)l.push(m);else{var b="getMeta"in c?c.getMeta():null;a(b)&&l.push(m)}}),Ir(n.store,l.map(ce))}),h(this,"getFieldValue",function(r){n.warningUnhooked();var i=ce(r);return $e(n.store,i)}),h(this,"getFieldsError",function(r){n.warningUnhooked();var i=n.getFieldEntitiesForNamePathList(r);return i.map(function(o,a){return o&&!("INVALIDATE_NAME_PATH"in o)?{name:o.getNamePath(),errors:o.getErrors(),warnings:o.getWarnings()}:{name:ce(r[a]),errors:[],warnings:[]}})}),h(this,"getFieldError",function(r){n.warningUnhooked();var i=ce(r),o=n.getFieldsError([i])[0];return o.errors}),h(this,"getFieldWarning",function(r){n.warningUnhooked();var i=ce(r),o=n.getFieldsError([i])[0];return o.warnings}),h(this,"isFieldsTouched",function(){n.warningUnhooked();for(var r=arguments.length,i=new Array(r),o=0;o0&&arguments[0]!==void 0?arguments[0]:{},i=new Qe,o=n.getFieldEntities(!0);o.forEach(function(s){var l=s.props.initialValue,c=s.getNamePath();if(l!==void 0){var d=i.get(c)||new Set;d.add({entity:s,value:l}),i.set(c,d)}});var a=function(l){l.forEach(function(c){var d=c.props.initialValue;if(d!==void 0){var v=c.getNamePath(),m=n.getInitialValue(v);if(m!==void 0)Ve(!1,"Form already set 'initialValues' with path '".concat(v.join("."),"'. Field can not overwrite it."));else{var y=i.get(v);if(y&&y.size>1)Ve(!1,"Multiple Field with path '".concat(v.join("."),"' set 'initialValue'. Can not decide which one to pick."));else if(y){var g=n.getFieldValue(v);(!r.skipExist||g===void 0)&&n.updateStore(De(n.store,v,Z(y)[0].value))}}}})},u;r.entities?u=r.entities:r.namePathList?(u=[],r.namePathList.forEach(function(s){var l=i.get(s);if(l){var c;(c=u).push.apply(c,Z(Z(l).map(function(d){return d.entity})))}})):u=o,a(u)}),h(this,"resetFields",function(r){n.warningUnhooked();var i=n.store;if(!r){n.updateStore(vt(n.initialValues)),n.resetWithFieldInitialValue(),n.notifyObservers(i,null,{type:"reset"}),n.notifyWatch();return}var o=r.map(ce);o.forEach(function(a){var u=n.getInitialValue(a);n.updateStore(De(n.store,a,u))}),n.resetWithFieldInitialValue({namePathList:o}),n.notifyObservers(i,o,{type:"reset"}),n.notifyWatch(o)}),h(this,"setFields",function(r){n.warningUnhooked();var i=n.store,o=[];r.forEach(function(a){var u=a.name,s=Ce(a,ws),l=ce(u);o.push(l),"value"in s&&n.updateStore(De(n.store,l,s.value)),n.notifyObservers(i,[l],{type:"setField",data:a})}),n.notifyWatch(o)}),h(this,"getFields",function(){var r=n.getFieldEntities(!0),i=r.map(function(o){var a=o.getNamePath(),u=o.getMeta(),s=k(k({},u),{},{name:a,value:n.getFieldValue(a)});return Object.defineProperty(s,"originRCField",{value:!0}),s});return i}),h(this,"initEntityValue",function(r){var i=r.props.initialValue;if(i!==void 0){var o=r.getNamePath(),a=$e(n.store,o);a===void 0&&n.updateStore(De(n.store,o,i))}}),h(this,"isMergedPreserve",function(r){var i=r!==void 0?r:n.preserve;return i??!0}),h(this,"registerField",function(r){n.fieldEntities.push(r);var i=r.getNamePath();if(n.notifyWatch([i]),r.props.initialValue!==void 0){var o=n.store;n.resetWithFieldInitialValue({entities:[r],skipExist:!0}),n.notifyObservers(o,[r.getNamePath()],{type:"valueUpdate",source:"internal"})}return function(a,u){var s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[];if(n.fieldEntities=n.fieldEntities.filter(function(d){return d!==r}),!n.isMergedPreserve(u)&&(!a||s.length>1)){var l=a?void 0:n.getInitialValue(i);if(i.length&&n.getFieldValue(i)!==l&&n.fieldEntities.every(function(d){return!xi(d.getNamePath(),i)})){var c=n.store;n.updateStore(De(c,i,l,!0)),n.notifyObservers(c,[i],{type:"remove"}),n.triggerDependenciesUpdate(c,i)}}n.notifyWatch([i])}}),h(this,"dispatch",function(r){switch(r.type){case"updateValue":{var i=r.namePath,o=r.value;n.updateValue(i,o);break}case"validateField":{var a=r.namePath,u=r.triggerName;n.validateFields([a],{triggerName:u});break}}}),h(this,"notifyObservers",function(r,i,o){if(n.subscribable){var a=k(k({},o),{},{store:n.getFieldsValue(!0)});n.getFieldEntities().forEach(function(u){var s=u.onStoreChange;s(r,i,a)})}else n.forceRootUpdate()}),h(this,"triggerDependenciesUpdate",function(r,i){var o=n.getDependencyChildrenFields(i);return o.length&&n.validateFields(o),n.notifyObservers(r,o,{type:"dependenciesUpdate",relatedFields:[i].concat(Z(o))}),o}),h(this,"updateValue",function(r,i){var o=ce(r),a=n.store;n.updateStore(De(n.store,o,i)),n.notifyObservers(a,[o],{type:"valueUpdate",source:"internal"}),n.notifyWatch([o]);var u=n.triggerDependenciesUpdate(a,o),s=n.callbacks.onValuesChange;if(s){var l=Ir(n.store,[o]);s(l,n.getFieldsValue())}n.triggerOnFieldsChange([o].concat(Z(u)))}),h(this,"setFieldsValue",function(r){n.warningUnhooked();var i=n.store;if(r){var o=vt(n.store,r);n.updateStore(o)}n.notifyObservers(i,null,{type:"valueUpdate",source:"external"}),n.notifyWatch()}),h(this,"setFieldValue",function(r,i){n.setFields([{name:r,value:i}])}),h(this,"getDependencyChildrenFields",function(r){var i=new Set,o=[],a=new Qe;n.getFieldEntities().forEach(function(s){var l=s.props.dependencies;(l||[]).forEach(function(c){var d=ce(c);a.update(d,function(){var v=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new Set;return v.add(s),v})})});var u=function s(l){var c=a.get(l)||new Set;c.forEach(function(d){if(!i.has(d)){i.add(d);var v=d.getNamePath();d.isFieldDirty()&&v.length&&(o.push(v),s(v))}})};return u(r),o}),h(this,"triggerOnFieldsChange",function(r,i){var o=n.callbacks.onFieldsChange;if(o){var a=n.getFields();if(i){var u=new Qe;i.forEach(function(l){var c=l.name,d=l.errors;u.set(c,d)}),a.forEach(function(l){l.errors=u.get(l.name)||l.errors})}var s=a.filter(function(l){var c=l.name;return et(r,c)});s.length&&o(s,a)}}),h(this,"validateFields",function(r,i){var o;n.warningUnhooked();var a,u;Array.isArray(r)||typeof r=="string"||typeof i=="string"?(a=r,u=i):u=r;var s=!!a,l=s?a.map(ce):[],c=[],d=String(Date.now()),v=new Set,m=(o=u)===null||o===void 0?void 0:o.recursive;n.getFieldEntities(!0).forEach(function(p){if(s||l.push(p.getNamePath()),!(!p.props.rules||!p.props.rules.length)){var C=p.getNamePath();if(v.add(C.join(d)),!s||et(l,C,m)){var w=p.validateRules(k({validateMessages:k(k({},Ei),n.validateMessages)},u));c.push(w.then(function(){return{name:C,errors:[],warnings:[]}}).catch(function(x){var E,P=[],S=[];return(E=x.forEach)===null||E===void 0||E.call(x,function(N){var F=N.rule.warningOnly,R=N.errors;F?S.push.apply(S,Z(R)):P.push.apply(P,Z(R))}),P.length?Promise.reject({name:C,errors:P,warnings:S}):{name:C,errors:P,warnings:S}}))}}});var y=bs(c);n.lastValidatePromise=y,y.catch(function(p){return p}).then(function(p){var C=p.map(function(w){var x=w.name;return x});n.notifyObservers(n.store,C,{type:"validateFinish"}),n.triggerOnFieldsChange(C,p)});var g=y.then(function(){return n.lastValidatePromise===y?Promise.resolve(n.getFieldsValue(l)):Promise.reject([])}).catch(function(p){var C=p.filter(function(w){return w&&w.errors.length});return Promise.reject({values:n.getFieldsValue(l),errorFields:C,outOfDate:n.lastValidatePromise!==y})});g.catch(function(p){return p});var b=l.filter(function(p){return v.has(p.join(d))});return n.triggerOnFieldsChange(b),g}),h(this,"submit",function(){n.warningUnhooked(),n.validateFields().then(function(r){var i=n.callbacks.onFinish;if(i)try{i(r)}catch(o){console.error(o)}}).catch(function(r){var i=n.callbacks.onFinishFailed;i&&i(r)})}),this.forceRootUpdate=t});function Xn(e){var t=f.useRef(),n=f.useState({}),r=q(n,2),i=r[1];if(!t.current)if(e)t.current=e;else{var o=function(){i({})},a=new Cs(o);t.current=a.getForm()}return[t.current]}var Dn=f.createContext({triggerFormChange:function(){},triggerFormFinish:function(){},registerForm:function(){},unregisterForm:function(){}}),Zn=function(t){var n=t.validateMessages,r=t.onFormChange,i=t.onFormFinish,o=t.children,a=f.useContext(Dn),u=f.useRef({});return f.createElement(Dn.Provider,{value:k(k({},a),{},{validateMessages:k(k({},a.validateMessages),n),triggerFormChange:function(l,c){r&&r(l,{changedFields:c,forms:u.current}),a.triggerFormChange(l,c)},triggerFormFinish:function(l,c){i&&i(l,{values:c,forms:u.current}),a.triggerFormFinish(l,c)},registerForm:function(l,c){l&&(u.current=k(k({},u.current),{},h({},l,c))),a.registerForm(l,c)},unregisterForm:function(l){var c=k({},u.current);delete c[l],u.current=c,a.unregisterForm(l)}})},o)},Es=["name","initialValues","fields","form","preserve","children","component","validateMessages","validateTrigger","onValuesChange","onFieldsChange","onFinish","onFinishFailed"],xs=function(t,n){var r=t.name,i=t.initialValues,o=t.fields,a=t.form,u=t.preserve,s=t.children,l=t.component,c=l===void 0?"form":l,d=t.validateMessages,v=t.validateTrigger,m=v===void 0?"onChange":v,y=t.onValuesChange,g=t.onFieldsChange,b=t.onFinish,p=t.onFinishFailed,C=Ce(t,Es),w=f.useContext(Dn),x=Xn(a),E=q(x,1),P=E[0],S=P.getInternalHooks(je),N=S.useSubscribe,F=S.setInitialValues,R=S.setCallbacks,O=S.setValidateMessages,T=S.setPreserve,M=S.destroyForm;f.useImperativeHandle(n,function(){return P}),f.useEffect(function(){return w.registerForm(r,P),function(){w.unregisterForm(r)}},[w,P,r]),O(k(k({},w.validateMessages),d)),R({onValuesChange:y,onFieldsChange:function(V){if(w.triggerFormChange(r,V),g){for(var Y=arguments.length,$=new Array(Y>1?Y-1:0),U=1;U0&&(i=S().map(function(D){return f.createElement(Mi,{prefixCls:O,key:D.value.toString(),disabled:"disabled"in D?D.disabled:d.disabled,value:D.value,checked:p.includes(D.value),onChange:D.onChange,className:"".concat(T,"-item"),style:D.style},D.label)}));var I={toggleOption:R,value:p,disabled:d.disabled,name:d.name,registerValue:F,cancelValue:N},K=ee(T,h({},"".concat(T,"-rtl"),y==="rtl"),s);return f.createElement("div",L({className:K,style:l},M,{ref:n}),f.createElement(Ti.Provider,{value:I},i))},Xs=f.forwardRef(Ys);const Zs=f.memo(Xs);var Qs=globalThis&&globalThis.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i"u"||e===null?"":String(e)}var nu=function(t){var n=t.inputElement,r=t.prefixCls,i=t.prefix,o=t.suffix,a=t.addonBefore,u=t.addonAfter,s=t.className,l=t.style,c=t.affixWrapperClassName,d=t.groupClassName,v=t.wrapperClassName,m=t.disabled,y=t.readOnly,g=t.focused,b=t.triggerFocus,p=t.allowClear,C=t.value,w=t.handleReset,x=t.hidden,E=f.useRef(null),P=function(A){var W;(W=E.current)!==null&&W!==void 0&&W.contains(A.target)&&(b==null||b())},S=function(){var A;if(!p)return null;var W=!m&&!y&&C,J="".concat(r,"-clear-icon"),j=ge(p)==="object"&&p!==null&&p!==void 0&&p.clearIcon?p.clearIcon:"✖";return G.createElement("span",{onClick:w,onMouseDown:function(Y){return Y.preventDefault()},className:ee(J,(A={},h(A,"".concat(J,"-hidden"),!W),h(A,"".concat(J,"-has-suffix"),!!o),A)),role:"button",tabIndex:-1},j)},N=f.cloneElement(n,{value:C,hidden:x});if(_i(t)){var F,R="".concat(r,"-affix-wrapper"),O=ee(R,(F={},h(F,"".concat(R,"-disabled"),m),h(F,"".concat(R,"-focused"),g),h(F,"".concat(R,"-readonly"),y),h(F,"".concat(R,"-input-with-clear-btn"),o&&p&&C),F),!$t(t)&&s,c),T=(o||p)&&G.createElement("span",{className:"".concat(r,"-suffix")},S(),o);N=G.createElement("span",{className:O,style:l,hidden:!$t(t)&&x,onClick:P,ref:E},i&&G.createElement("span",{className:"".concat(r,"-prefix")},i),f.cloneElement(n,{style:null,value:C,hidden:null}),T)}if($t(t)){var M="".concat(r,"-group"),I="".concat(M,"-addon"),K=ee("".concat(r,"-wrapper"),M,v),D=ee("".concat(r,"-group-wrapper"),s,d);return G.createElement("span",{className:D,style:l,hidden:x},G.createElement("span",{className:K},a&&G.createElement("span",{className:I},a),f.cloneElement(N,{style:null,hidden:null}),u&&G.createElement("span",{className:I},u)))}return N},ru=["autoComplete","onChange","onFocus","onBlur","onPressEnter","onKeyDown","prefixCls","disabled","htmlSize","className","maxLength","suffix","showCount","type","inputClassName"],iu=f.forwardRef(function(e,t){var n=e.autoComplete,r=e.onChange,i=e.onFocus,o=e.onBlur,a=e.onPressEnter,u=e.onKeyDown,s=e.prefixCls,l=s===void 0?"rc-input":s,c=e.disabled,d=e.htmlSize,v=e.className,m=e.maxLength,y=e.suffix,g=e.showCount,b=e.type,p=b===void 0?"text":b,C=e.inputClassName,w=Ce(e,ru),x=St(e.defaultValue,{value:e.value}),E=q(x,2),P=E[0],S=E[1],N=f.useState(!1),F=q(N,2),R=F[0],O=F[1],T=f.useRef(null),M=function(V){T.current&&tu(T.current,V)};f.useImperativeHandle(t,function(){return{focus:M,blur:function(){var V;(V=T.current)===null||V===void 0||V.blur()},setSelectionRange:function(V,Y,$){var U;(U=T.current)===null||U===void 0||U.setSelectionRange(V,Y,$)},select:function(){var V;(V=T.current)===null||V===void 0||V.select()},input:T.current}}),f.useEffect(function(){O(function(j){return j&&c?!1:j})},[c]);var I=function(V){e.value===void 0&&S(V.target.value),T.current&&Br(T.current,V,r)},K=function(V){a&&V.key==="Enter"&&a(V),u==null||u(V)},D=function(V){O(!0),i==null||i(V)},z=function(V){O(!1),o==null||o(V)},A=function(V){S(""),M(),T.current&&Br(T.current,V,r)},W=function(){var V=qt(e,["prefixCls","onPressEnter","addonBefore","addonAfter","prefix","suffix","allowClear","defaultValue","showCount","affixWrapperClassName","groupClassName","inputClassName","wrapperClassName","htmlSize"]);return G.createElement("input",L({autoComplete:n},V,{onChange:I,onFocus:D,onBlur:z,onKeyDown:K,className:ee(l,h({},"".concat(l,"-disabled"),c),C,!$t(e)&&!_i(e)&&v),ref:T,size:d,type:p}))},J=function(){var V=Number(m)>0;if(y||g){var Y=qr(P),$=Z(Y).length,U=ge(g)==="object"?g.formatter({value:Y,count:$,maxLength:m}):"".concat($).concat(V?" / ".concat(m):"");return G.createElement(G.Fragment,null,!!g&&G.createElement("span",{className:ee("".concat(l,"-show-count-suffix"),h({},"".concat(l,"-show-count-has-suffix"),!!y))},U),y)}return null};return G.createElement(nu,L({},w,{prefixCls:l,className:v,inputElement:W(),handleReset:A,value:qr(P),focused:R,triggerFocus:M,suffix:J(),disabled:c}))});function au(e,t){var n=f.useRef([]),r=function(){n.current.push(setTimeout(function(){var o,a,u,s;!((o=e.current)===null||o===void 0)&&o.input&&((a=e.current)===null||a===void 0?void 0:a.input.getAttribute("type"))==="password"&&(!((u=e.current)===null||u===void 0)&&u.input.hasAttribute("value"))&&((s=e.current)===null||s===void 0||s.input.removeAttribute("value"))}))};return f.useEffect(function(){return t&&r(),function(){return n.current.forEach(function(i){i&&clearTimeout(i)})}},[]),r}function ou(e){return!!(e.prefix||e.suffix||e.allowClear)}var su=globalThis&&globalThis.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i"u"||e===null?"":String(e)}function pn(e,t,n,r){if(n){var i=t;if(t.type==="click"){var o=e.cloneNode(!0);i=Object.create(t,{target:{value:o},currentTarget:{value:o}}),o.value="",n(i);return}if(r!==void 0){i=Object.create(t,{target:{value:e},currentTarget:{value:e}}),e.value=r,n(i);return}n(i)}}function lu(e,t){if(e){e.focus(t);var n=t||{},r=n.cursor;if(r){var i=e.value.length;switch(r){case"start":e.setSelectionRange(0,0);break;case"end":e.setSelectionRange(i,i);break;default:e.setSelectionRange(0,i);break}}}}var cu=f.forwardRef(function(e,t){var n=e.prefixCls,r=e.bordered,i=r===void 0?!0:r,o=e.status,a=e.size,u=e.disabled,s=e.onBlur,l=e.onFocus,c=e.suffix,d=e.allowClear,v=e.addonAfter,m=e.addonBefore,y=e.className,g=e.onChange,b=su(e,["prefixCls","bordered","status","size","disabled","onBlur","onFocus","suffix","allowClear","addonAfter","addonBefore","className","onChange"]),p=G.useContext(at),C=p.getPrefixCls,w=p.direction,x=p.input,E=C("input",n),P=f.useRef(null),S=Ki(E,w),N=S.compactSize,F=S.compactItemClassnames,R=G.useContext(Yr),O=N||a||R,T=G.useContext(Hn),M=u??T,I=f.useContext(rt),K=I.status,D=I.hasFeedback,z=I.feedbackIcon,A=Qn(K,o),W=ou(e)||!!D,J=f.useRef(W);f.useEffect(function(){W&&J.current,J.current=W},[W]);var j=au(P,!0),V=function(ae){j(),s==null||s(ae)},Y=function(ae){j(),l==null||l(ae)},$=function(ae){j(),g==null||g(ae)},U=(D||c)&&G.createElement(G.Fragment,null,c,D&&z),se;return ge(d)==="object"&&(d!=null&&d.clearIcon)?se=d:d&&(se={clearIcon:G.createElement(Xr,null)}),G.createElement(iu,L({ref:Ln(t,P),prefixCls:E,autoComplete:x==null?void 0:x.autoComplete},b,{disabled:M||void 0,onBlur:V,onFocus:Y,suffix:U,allowClear:se,className:ee(y,F),onChange:$,addonAfter:v&&G.createElement(ar,null,G.createElement(Lr,{override:!0,status:!0},v)),addonBefore:m&&G.createElement(ar,null,G.createElement(Lr,{override:!0,status:!0},m)),inputClassName:ee(h(h(h(h({},"".concat(E,"-sm"),O==="small"),"".concat(E,"-lg"),O==="large"),"".concat(E,"-rtl"),w==="rtl"),"".concat(E,"-borderless"),!i),!W&&tt(E,A)),affixWrapperClassName:ee(h(h(h(h({},"".concat(E,"-affix-wrapper-sm"),O==="small"),"".concat(E,"-affix-wrapper-lg"),O==="large"),"".concat(E,"-affix-wrapper-rtl"),w==="rtl"),"".concat(E,"-affix-wrapper-borderless"),!i),tt("".concat(E,"-affix-wrapper"),A,D)),wrapperClassName:ee(h({},"".concat(E,"-group-rtl"),w==="rtl")),groupClassName:ee(h(h(h({},"".concat(E,"-group-wrapper-sm"),O==="small"),"".concat(E,"-group-wrapper-lg"),O==="large"),"".concat(E,"-group-wrapper-rtl"),w==="rtl"),tt("".concat(E,"-group-wrapper"),A,D))}))});const Wu=cu;var fu=` + min-height:0 !important; + max-height:none !important; + height:0 !important; + visibility:hidden !important; + overflow:hidden !important; + position:absolute !important; + z-index:-1000 !important; + top:0 !important; + right:0 !important; + pointer-events: none !important; +`,du=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing","word-break"],hn={},Re;function vu(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,n=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&hn[n])return hn[n];var r=window.getComputedStyle(e),i=r.getPropertyValue("box-sizing")||r.getPropertyValue("-moz-box-sizing")||r.getPropertyValue("-webkit-box-sizing"),o=parseFloat(r.getPropertyValue("padding-bottom"))+parseFloat(r.getPropertyValue("padding-top")),a=parseFloat(r.getPropertyValue("border-bottom-width"))+parseFloat(r.getPropertyValue("border-top-width")),u=du.map(function(l){return"".concat(l,":").concat(r.getPropertyValue(l))}).join(";"),s={sizingStyle:u,paddingSize:o,borderSize:a,boxSizing:i};return t&&n&&(hn[n]=s),s}function pu(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;Re||(Re=document.createElement("textarea"),Re.setAttribute("tab-index","-1"),Re.setAttribute("aria-hidden","true"),document.body.appendChild(Re)),e.getAttribute("wrap")?Re.setAttribute("wrap",e.getAttribute("wrap")):Re.removeAttribute("wrap");var i=vu(e,t),o=i.paddingSize,a=i.borderSize,u=i.boxSizing,s=i.sizingStyle;Re.setAttribute("style","".concat(s,";").concat(fu)),Re.value=e.value||e.placeholder||"";var l=void 0,c=void 0,d,v=Re.scrollHeight;if(u==="border-box"?v+=a:u==="content-box"&&(v-=o),n!==null||r!==null){Re.value=" ";var m=Re.scrollHeight-o;n!==null&&(l=m*n,u==="border-box"&&(l=l+o+a),v=Math.max(l,v)),r!==null&&(c=m*r,u==="border-box"&&(c=c+o+a),d=v>c?"":"hidden",v=Math.min(c,v))}var y={height:v,overflowY:d,resize:"none"};return l&&(y.minHeight=l),c&&(y.maxHeight=c),y}var hu=["prefixCls","onPressEnter","defaultValue","value","autoSize","onResize","className","style","disabled","onChange","onInternalAutoSize"],gn=0,mn=1,yn=2,gu=f.forwardRef(function(e,t){var n=e.prefixCls,r=n===void 0?"rc-textarea":n;e.onPressEnter;var i=e.defaultValue,o=e.value,a=e.autoSize,u=e.onResize,s=e.className,l=e.style,c=e.disabled,d=e.onChange;e.onInternalAutoSize;var v=Ce(e,hu),m=St(i,{value:o,postState:function($){return $??""}}),y=q(m,2),g=y[0],b=y[1],p=function($){b($.target.value),d==null||d($)},C=f.useRef();f.useImperativeHandle(t,function(){return{textArea:C.current}});var w=f.useMemo(function(){return a&&ge(a)==="object"?[a.minRows,a.maxRows]:[]},[a]),x=q(w,2),E=x[0],P=x[1],S=!!a,N=function(){try{if(document.activeElement===C.current){var $=C.current,U=$.selectionStart,se=$.selectionEnd,fe=$.scrollTop;C.current.setSelectionRange(U,se),C.current.scrollTop=fe}}catch{}},F=f.useState(yn),R=q(F,2),O=R[0],T=R[1],M=f.useState(),I=q(M,2),K=I[0],D=I[1],z=function(){T(gn)};Be(function(){S&&z()},[o,E,P,S]),Be(function(){if(O===gn)T(mn);else if(O===mn){var Y=pu(C.current,!1,E,P);T(yn),D(Y)}else N()},[O]);var A=f.useRef(),W=function(){Ae.cancel(A.current)},J=function($){O===yn&&(u==null||u($),a&&(W(),A.current=Ae(function(){z()})))};f.useEffect(function(){return W},[]);var j=S?K:null,V=k(k({},l),j);return(O===gn||O===mn)&&(V.overflowY="hidden",V.overflowX="hidden"),f.createElement(Gt,{onResize:J,disabled:!(a||u)},f.createElement("textarea",L({},v,{ref:C,style:V,className:ee(r,s,h({},"".concat(r,"-disabled"),c)),disabled:c,value:g,onChange:p})))}),mu=function(e){Et(n,e);var t=Bt(n);function n(r){var i;Ke(this,n),i=t.call(this,r),i.resizableTextArea=void 0,i.focus=function(){i.resizableTextArea.textArea.focus()},i.saveTextArea=function(a){i.resizableTextArea=a},i.handleChange=function(a){var u=i.props.onChange;i.setValue(a.target.value),u&&u(a)},i.handleKeyDown=function(a){var u=i.props,s=u.onPressEnter,l=u.onKeyDown;a.keyCode===13&&s&&s(a),l&&l(a)};var o=typeof r.value>"u"||r.value===null?r.defaultValue:r.value;return i.state={value:o},i}return Ge(n,[{key:"setValue",value:function(i,o){"value"in this.props||this.setState({value:i},o)}},{key:"blur",value:function(){this.resizableTextArea.textArea.blur()}},{key:"render",value:function(){return f.createElement(gu,L({},this.props,{value:this.state.value,onKeyDown:this.handleKeyDown,onChange:this.handleChange,ref:this.saveTextArea}))}}],[{key:"getDerivedStateFromProps",value:function(i){return"value"in i?{value:i.value}:null}}]),n}(f.Component);function yu(e,t,n){return t=ir(t),ji(e,Ui()?Reflect.construct(t,n||[],ir(e).constructor):t.apply(e,n))}var bu=xt("text","input");function wu(e){return!!(e.addonBefore||e.addonAfter)}var Cu=function(e){Et(t,e);function t(){return Ke(this,t),yu(this,t,arguments)}return Ge(t,[{key:"renderClearIcon",value:function(r){var i=this.props,o=i.value,a=i.disabled,u=i.readOnly,s=i.handleReset,l=i.suffix,c=!a&&!u&&o,d="".concat(r,"-clear-icon");return f.createElement(Xr,{onClick:s,onMouseDown:function(m){return m.preventDefault()},className:ee(h(h({},"".concat(d,"-hidden"),!c),"".concat(d,"-has-suffix"),!!l),d),role:"button"})}},{key:"renderTextAreaWithClearIcon",value:function(r,i,o){var a=this.props,u=a.value,s=a.allowClear,l=a.className,c=a.focused,d=a.style,v=a.direction,m=a.bordered,y=a.hidden,g=a.status,b=o.status,p=o.hasFeedback;if(!s)return zt(i,{value:u});var C=ee("".concat(r,"-affix-wrapper"),"".concat(r,"-affix-wrapper-textarea-with-clear-btn"),tt("".concat(r,"-affix-wrapper"),Qn(b,g),p),h(h(h(h({},"".concat(r,"-affix-wrapper-focused"),c),"".concat(r,"-affix-wrapper-rtl"),v==="rtl"),"".concat(r,"-affix-wrapper-borderless"),!m),"".concat(l),!wu(this.props)&&l));return f.createElement("span",{className:C,style:d,hidden:y},zt(i,{style:null,value:u}),this.renderClearIcon(r))}},{key:"render",value:function(){var r=this;return f.createElement(rt.Consumer,null,function(i){var o=r.props,a=o.prefixCls,u=o.inputType,s=o.element;if(u===bu[0])return r.renderTextAreaWithClearIcon(a,s,i)})}}]),t}(f.Component);const Eu=Cu;var xu=globalThis&&globalThis.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);ir&&(i=t),i}var Su=f.forwardRef(function(e,t){var n=e.prefixCls,r=e.bordered,i=r===void 0?!0:r,o=e.showCount,a=o===void 0?!1:o,u=e.maxLength,s=e.className,l=e.style,c=e.size,d=e.disabled,v=e.onCompositionStart,m=e.onCompositionEnd,y=e.onChange,g=e.onFocus,b=e.onBlur,p=e.status,C=xu(e,["prefixCls","bordered","showCount","maxLength","className","style","size","disabled","onCompositionStart","onCompositionEnd","onChange","onFocus","onBlur","status"]),w=f.useContext(at),x=w.getPrefixCls,E=w.direction,P=f.useContext(Yr),S=f.useContext(Hn),N=d??S,F=f.useContext(rt),R=F.status,O=F.hasFeedback,T=F.isFormItemInput,M=F.feedbackIcon,I=Qn(R,p),K=f.useRef(null),D=f.useRef(null),z=f.useState(!1),A=q(z,2),W=A[0],J=A[1],j=f.useState(!1),V=q(j,2),Y=V[0],$=V[1],U=f.useRef(),se=f.useRef(0),fe=St(C.defaultValue,{value:C.value}),ae=q(fe,2),pe=ae[0],ke=ae[1],Ne=C.hidden,me=function(re,oe){C.value===void 0&&(ke(re),oe==null||oe())},ie=Number(u)>0,Ee=function(re){J(!0),U.current=pe,se.current=re.currentTarget.selectionStart,v==null||v(re)},Te=function(re){var oe;J(!1);var ue=re.currentTarget.value;if(ie){var ye=se.current>=u+1||se.current===((oe=U.current)===null||oe===void 0?void 0:oe.length);ue=Kr(ye,U.current,ue,u)}ue!==pe&&(me(ue),pn(re.currentTarget,re,y,ue)),m==null||m(re)},xe=function(re){var oe=re.target.value;if(!W&&ie){var ue=re.target.selectionStart>=u+1||re.target.selectionStart===oe.length||!re.target.selectionStart;oe=Kr(ue,pe,oe,u)}me(oe),pn(re.currentTarget,re,y,oe)},st=function(re){$(!1),b==null||b(re)},Ie=function(re){$(!0),g==null||g(re)};f.useEffect(function(){$(function(le){return!N&&le})},[N]);var Zt=function(re){var oe,ue,ye;me(""),(oe=K.current)===null||oe===void 0||oe.focus(),pn((ye=(ue=K.current)===null||ue===void 0?void 0:ue.resizableTextArea)===null||ye===void 0?void 0:ye.textArea,re,y)},he=x("input",n);f.useImperativeHandle(t,function(){var le;return{resizableTextArea:(le=K.current)===null||le===void 0?void 0:le.resizableTextArea,focus:function(oe){var ue,ye;lu((ye=(ue=K.current)===null||ue===void 0?void 0:ue.resizableTextArea)===null||ye===void 0?void 0:ye.textArea,oe)},blur:function(){var oe;return(oe=K.current)===null||oe===void 0?void 0:oe.blur()}}});var Qt=f.createElement(mu,L({},qt(C,["allowClear"]),{disabled:N,className:ee(h(h(h(h({},"".concat(he,"-borderless"),!i),s,s&&!a),"".concat(he,"-sm"),P==="small"||c==="small"),"".concat(he,"-lg"),P==="large"||c==="large"),tt(he,I)),style:a?{resize:l==null?void 0:l.resize}:l,prefixCls:he,onCompositionStart:Ee,onChange:xe,onBlur:st,onFocus:Ie,onCompositionEnd:Te,ref:K})),Le=uu(pe);!W&&ie&&(C.value===null||C.value===void 0)&&(Le=Ai(Le,u));var Ye=f.createElement(Eu,L({disabled:N,focused:Y},C,{prefixCls:he,direction:E,inputType:"text",value:Le,element:Qt,handleReset:Zt,ref:D,bordered:i,status:p,style:a?void 0:l}));if(a||O){var ut=Z(Le).length,He="";return ge(a)==="object"?He=a.formatter({value:Le,count:ut,maxLength:u}):He="".concat(ut).concat(ie?" / ".concat(u):""),f.createElement("div",{hidden:Ne,className:ee("".concat(he,"-textarea"),h(h(h({},"".concat(he,"-textarea-rtl"),E==="rtl"),"".concat(he,"-textarea-show-count"),a),"".concat(he,"-textarea-in-form-item"),T),tt("".concat(he,"-textarea"),I,O),s),style:l,"data-count":He},Ye,O&&f.createElement("span",{className:"".concat(he,"-textarea-suffix")},M))}return Ye});const ju=Su;export{As as A,$s as B,Hu as C,ju as D,Ou as E,rt as F,Yt as G,Tu as H,Ls as I,au as J,H as K,wt as L,Wu as M,_u as N,Ts as P,Gt as R,Lu as S,zu as T,Yn as W,pt as a,Du as b,_o as c,gi as d,Fs as e,Iu as f,tt as g,Qn as h,wo as i,Be as j,ku as k,qe as l,Ks as m,$u as n,Vu as o,Nu as p,Xn as q,Au as r,Mu as s,ot as t,St as u,Si as v,Fi as w,Sa as x,ur as y,Lr as z}; diff --git a/dist/assets/_setToString-038b76d7.js b/dist/assets/_setToString-038b76d7.js deleted file mode 100644 index 35c59fdfecb6d63579e79c60a2eebb34d1e9a744..0000000000000000000000000000000000000000 --- a/dist/assets/_setToString-038b76d7.js +++ /dev/null @@ -1,81 +0,0 @@ -import{r as S,D as tc,E as rc,g as Pt,c as Ce,R as xn,o as En,_ as F,F as nc,d as ac}from"./umi-2135699e.js";function ww(){const e=S.useContext(tc);return rc(e),e}var oc=S.createContext({});const sa=oc;function Y(e){"@babel/helpers - typeof";return Y=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Y(e)}function ic(e,t){if(Y(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(Y(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function bi(e){var t=ic(e,"string");return Y(t)=="symbol"?t:t+""}function z(e,t,r){return(t=bi(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ga(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),r.push.apply(r,n)}return r}function $(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r1)&&(e=1),e}function jt(e){return e<=1?"".concat(Number(e)*100,"%"):e}function pe(e){return e.length===1?"0"+e:String(e)}function dc(e,t,r){return{r:X(e,255)*255,g:X(t,255)*255,b:X(r,255)*255}}function Wa(e,t,r){e=X(e,255),t=X(t,255),r=X(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),o=0,i=0,s=(n+a)/2;if(n===a)i=0,o=0;else{var f=n-a;switch(i=s>.5?f/(2-n-a):f/(n+a),n){case e:o=(t-r)/f+(t1&&(r-=1),r<1/6?e+(t-e)*(6*r):r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function pc(e,t,r){var n,a,o;if(e=X(e,360),t=X(t,100),r=X(r,100),t===0)a=r,o=r,n=r;else{var i=r<.5?r*(1+t):r+t-r*t,s=2*r-i;n=zr(s,i,e+1/3),a=zr(s,i,e),o=zr(s,i,e-1/3)}return{r:n*255,g:a*255,b:o*255}}function Pn(e,t,r){e=X(e,255),t=X(t,255),r=X(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),o=0,i=n,s=n-a,f=n===0?0:s/n;if(n===a)o=0;else{switch(n){case e:o=(t-r)/s+(t>16,g:(e&65280)>>8,b:e&255}}var On={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function ze(e){var t={r:0,g:0,b:0},r=1,n=null,a=null,o=null,i=!1,s=!1;return typeof e=="string"&&(e=bc(e)),typeof e=="object"&&(Pe(e.r)&&Pe(e.g)&&Pe(e.b)?(t=dc(e.r,e.g,e.b),i=!0,s=String(e.r).substr(-1)==="%"?"prgb":"rgb"):Pe(e.h)&&Pe(e.s)&&Pe(e.v)?(n=jt(e.s),a=jt(e.v),t=hc(e.h,n,a),i=!0,s="hsv"):Pe(e.h)&&Pe(e.s)&&Pe(e.l)&&(n=jt(e.s),o=jt(e.l),t=pc(e.h,n,o),i=!0,s="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(r=e.a)),r=xi(r),{ok:i,format:e.format||s,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}var mc="[-\\+]?\\d+%?",gc="[-\\+]?\\d*\\.\\d+%?",Re="(?:".concat(gc,")|(?:").concat(mc,")"),Gr="[\\s|\\(]+(".concat(Re,")[,|\\s]+(").concat(Re,")[,|\\s]+(").concat(Re,")\\s*\\)?"),Wr="[\\s|\\(]+(".concat(Re,")[,|\\s]+(").concat(Re,")[,|\\s]+(").concat(Re,")[,|\\s]+(").concat(Re,")\\s*\\)?"),fe={CSS_UNIT:new RegExp(Re),rgb:new RegExp("rgb"+Gr),rgba:new RegExp("rgba"+Wr),hsl:new RegExp("hsl"+Gr),hsla:new RegExp("hsla"+Wr),hsv:new RegExp("hsv"+Gr),hsva:new RegExp("hsva"+Wr),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function bc(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;var t=!1;if(On[e])e=On[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r=fe.rgb.exec(e);return r?{r:r[1],g:r[2],b:r[3]}:(r=fe.rgba.exec(e),r?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=fe.hsl.exec(e),r?{h:r[1],s:r[2],l:r[3]}:(r=fe.hsla.exec(e),r?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=fe.hsv.exec(e),r?{h:r[1],s:r[2],v:r[3]}:(r=fe.hsva.exec(e),r?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=fe.hex8.exec(e),r?{r:ue(r[1]),g:ue(r[2]),b:ue(r[3]),a:Va(r[4]),format:t?"name":"hex8"}:(r=fe.hex6.exec(e),r?{r:ue(r[1]),g:ue(r[2]),b:ue(r[3]),format:t?"name":"hex"}:(r=fe.hex4.exec(e),r?{r:ue(r[1]+r[1]),g:ue(r[2]+r[2]),b:ue(r[3]+r[3]),a:Va(r[4]+r[4]),format:t?"name":"hex8"}:(r=fe.hex3.exec(e),r?{r:ue(r[1]+r[1]),g:ue(r[2]+r[2]),b:ue(r[3]+r[3]),format:t?"name":"hex"}:!1)))))))))}function Pe(e){return!!fe.CSS_UNIT.exec(String(e))}var Wt=function(){function e(t,r){t===void 0&&(t=""),r===void 0&&(r={});var n;if(t instanceof e)return t;typeof t=="number"&&(t=yc(t)),this.originalInput=t;var a=ze(t);this.originalInput=t,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=(n=r.format)!==null&&n!==void 0?n:a.format,this.gradientType=r.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=a.ok}return e.prototype.isDark=function(){return this.getBrightness()<128},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},e.prototype.getLuminance=function(){var t=this.toRgb(),r,n,a,o=t.r/255,i=t.g/255,s=t.b/255;return o<=.03928?r=o/12.92:r=Math.pow((o+.055)/1.055,2.4),i<=.03928?n=i/12.92:n=Math.pow((i+.055)/1.055,2.4),s<=.03928?a=s/12.92:a=Math.pow((s+.055)/1.055,2.4),.2126*r+.7152*n+.0722*a},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(t){return this.a=xi(t),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){var t=this.toHsl().s;return t===0},e.prototype.toHsv=function(){var t=Pn(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}},e.prototype.toHsvString=function(){var t=Pn(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.v*100);return this.a===1?"hsv(".concat(r,", ").concat(n,"%, ").concat(a,"%)"):"hsva(".concat(r,", ").concat(n,"%, ").concat(a,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var t=Wa(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}},e.prototype.toHslString=function(){var t=Wa(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.l*100);return this.a===1?"hsl(".concat(r,", ").concat(n,"%, ").concat(a,"%)"):"hsla(".concat(r,", ").concat(n,"%, ").concat(a,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(t){return t===void 0&&(t=!1),$n(this.r,this.g,this.b,t)},e.prototype.toHexString=function(t){return t===void 0&&(t=!1),"#"+this.toHex(t)},e.prototype.toHex8=function(t){return t===void 0&&(t=!1),vc(this.r,this.g,this.b,this.a,t)},e.prototype.toHex8String=function(t){return t===void 0&&(t=!1),"#"+this.toHex8(t)},e.prototype.toHexShortString=function(t){return t===void 0&&(t=!1),this.a===1?this.toHexString(t):this.toHex8String(t)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var t=Math.round(this.r),r=Math.round(this.g),n=Math.round(this.b);return this.a===1?"rgb(".concat(t,", ").concat(r,", ").concat(n,")"):"rgba(".concat(t,", ").concat(r,", ").concat(n,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var t=function(r){return"".concat(Math.round(X(r,255)*100),"%")};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var t=function(r){return Math.round(X(r,255)*100)};return this.a===1?"rgb(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%)"):"rgba(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var t="#"+$n(this.r,this.g,this.b,!1),r=0,n=Object.entries(On);r=0,o=!r&&a&&(t.startsWith("hex")||t==="name");return o?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(n=this.toRgbString()),t==="prgb"&&(n=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(n=this.toHexString()),t==="hex3"&&(n=this.toHexString(!0)),t==="hex4"&&(n=this.toHex8String(!0)),t==="hex8"&&(n=this.toHex8String()),t==="name"&&(n=this.toName()),t==="hsl"&&(n=this.toHslString()),t==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l+=t/100,r.l=Lt(r.l),new e(r)},e.prototype.brighten=function(t){t===void 0&&(t=10);var r=this.toRgb();return r.r=Math.max(0,Math.min(255,r.r-Math.round(255*-(t/100)))),r.g=Math.max(0,Math.min(255,r.g-Math.round(255*-(t/100)))),r.b=Math.max(0,Math.min(255,r.b-Math.round(255*-(t/100)))),new e(r)},e.prototype.darken=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l-=t/100,r.l=Lt(r.l),new e(r)},e.prototype.tint=function(t){return t===void 0&&(t=10),this.mix("white",t)},e.prototype.shade=function(t){return t===void 0&&(t=10),this.mix("black",t)},e.prototype.desaturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s-=t/100,r.s=Lt(r.s),new e(r)},e.prototype.saturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s+=t/100,r.s=Lt(r.s),new e(r)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var r=this.toHsl(),n=(r.h+t)%360;return r.h=n<0?360+n:n,new e(r)},e.prototype.mix=function(t,r){r===void 0&&(r=50);var n=this.toRgb(),a=new e(t).toRgb(),o=r/100,i={r:(a.r-n.r)*o+n.r,g:(a.g-n.g)*o+n.g,b:(a.b-n.b)*o+n.b,a:(a.a-n.a)*o+n.a};return new e(i)},e.prototype.analogous=function(t,r){t===void 0&&(t=6),r===void 0&&(r=30);var n=this.toHsl(),a=360/r,o=[this];for(n.h=(n.h-(a*t>>1)+720)%360;--t;)n.h=(n.h+a)%360,o.push(new e(n));return o},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){t===void 0&&(t=6);for(var r=this.toHsv(),n=r.h,a=r.s,o=r.v,i=[],s=1/t;t--;)i.push(new e({h:n,s:a,v:o})),o=(o+s)%1;return i},e.prototype.splitcomplement=function(){var t=this.toHsl(),r=t.h;return[this,new e({h:(r+72)%360,s:t.s,l:t.l}),new e({h:(r+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var r=this.toRgb(),n=new e(t).toRgb(),a=r.a+n.a*(1-r.a);return new e({r:(r.r*r.a+n.r*n.a*(1-r.a))/a,g:(r.g*r.a+n.g*n.a*(1-r.a))/a,b:(r.b*r.a+n.b*n.a*(1-r.a))/a,a})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var r=this.toHsl(),n=r.h,a=[this],o=360/t,i=1;i=60&&Math.round(e.h)<=240?n=r?Math.round(e.h)-kt*t:Math.round(e.h)+kt*t:n=r?Math.round(e.h)+kt*t:Math.round(e.h)-kt*t,n<0?n+=360:n>=360&&(n-=360),n}function Qa(e,t,r){if(e.h===0&&e.s===0)return e.s;var n;return r?n=e.s-Ka*t:t===Pi?n=e.s+Ka:n=e.s+wc*t,n>1&&(n=1),r&&t===_i&&n>.1&&(n=.1),n<.06&&(n=.06),Number(n.toFixed(2))}function Za(e,t,r){var n;return r?n=e.v+Sc*t:n=e.v-Cc*t,n>1&&(n=1),Number(n.toFixed(2))}function Ze(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=[],n=ze(e),a=_i;a>0;a-=1){var o=Ya(n),i=Dt(ze({h:Ja(o,a,!0),s:Qa(o,a,!0),v:Za(o,a,!0)}));r.push(i)}r.push(Dt(n));for(var s=1;s<=Pi;s+=1){var f=Ya(n),u=Dt(ze({h:Ja(f,s),s:Qa(f,s),v:Za(f,s)}));r.push(u)}return t.theme==="dark"?xc.map(function(d){var g=d.index,h=d.opacity,w=Dt(Ec(ze(t.backgroundColor||"#141414"),ze(r[g]),h*100));return w}):r}var Vt={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},ee={},Kt={};Object.keys(Vt).forEach(function(e){ee[e]=Ze(Vt[e]),ee[e].primary=ee[e][5],Kt[e]=Ze(Vt[e],{theme:"dark",backgroundColor:"#141414"}),Kt[e].primary=Kt[e][5]});var _c=ee.red,Pc=ee.volcano,$c=ee.gold,Oc=ee.orange,Ac=ee.yellow,Rc=ee.lime,Tc=ee.green,Mc=ee.cyan,Ic=ee.blue,Nc=ee.geekblue,Fc=ee.purple,Lc=ee.magenta,jc=ee.grey;const xw=Object.freeze(Object.defineProperty({__proto__:null,blue:Ic,cyan:Mc,geekblue:Nc,generate:Ze,gold:$c,green:Tc,grey:jc,lime:Rc,magenta:Lc,orange:Oc,presetDarkPalettes:Kt,presetPalettes:ee,presetPrimaryColors:Vt,purple:Fc,red:_c,volcano:Pc,yellow:Ac},Symbol.toStringTag,{value:"Module"}));var An={},kc=function(t){};function Dc(e,t){}function Uc(e,t){}function Bc(){An={}}function $i(e,t,r){!t&&!An[r]&&(e(!1,r),An[r]=!0)}function dr(e,t){$i(Dc,e,t)}function qc(e,t){$i(Uc,e,t)}dr.preMessage=kc;dr.resetWarned=Bc;dr.noteOnce=qc;function $t(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}function Hc(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}var Xa="data-rc-order",eo="data-rc-priority",zc="rc-util-key",Rn=new Map;function Oi(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=e.mark;return t?t.startsWith("data-")?t:"data-".concat(t):zc}function pr(e){if(e.attachTo)return e.attachTo;var t=document.querySelector("head");return t||document.body}function Gc(e){return e==="queue"?"prependQueue":e?"prepend":"append"}function ca(e){return Array.from((Rn.get(e)||e).children).filter(function(t){return t.tagName==="STYLE"})}function Ai(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!$t())return null;var r=t.csp,n=t.prepend,a=t.priority,o=a===void 0?0:a,i=Gc(n),s=i==="prependQueue",f=document.createElement("style");f.setAttribute(Xa,i),s&&o&&f.setAttribute(eo,"".concat(o)),r!=null&&r.nonce&&(f.nonce=r==null?void 0:r.nonce),f.innerHTML=e;var u=pr(t),d=u.firstChild;if(n){if(s){var g=(t.styles||ca(u)).filter(function(h){if(!["prepend","prependQueue"].includes(h.getAttribute(Xa)))return!1;var w=Number(h.getAttribute(eo)||0);return o>=w});if(g.length)return u.insertBefore(f,g[g.length-1].nextSibling),f}u.insertBefore(f,d)}else u.appendChild(f);return f}function Ri(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=pr(t);return(t.styles||ca(r)).find(function(n){return n.getAttribute(Oi(t))===e})}function Ew(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=Ri(e,t);if(r){var n=pr(t);n.removeChild(r)}}function Wc(e,t){var r=Rn.get(e);if(!r||!Hc(document,r)){var n=Ai("",t),a=n.parentNode;Rn.set(e,a),e.removeChild(n)}}function Ti(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=pr(r),a=ca(n),o=$($({},r),{},{styles:a});Wc(n,o);var i=Ri(t,o);if(i){var s,f;if((s=o.csp)!==null&&s!==void 0&&s.nonce&&i.nonce!==((f=o.csp)===null||f===void 0?void 0:f.nonce)){var u;i.nonce=(u=o.csp)===null||u===void 0?void 0:u.nonce}return i.innerHTML!==e&&(i.innerHTML=e),i}var d=Ai(e,o);return d.setAttribute(Oi(o),t),d}var Vc=typeof Ce=="object"&&Ce&&Ce.Object===Object&&Ce,Kc=Vc,Yc=Kc,Jc=typeof self=="object"&&self&&self.Object===Object&&self,Qc=Yc||Jc||Function("return this")(),la=Qc,Zc=la,Xc=Zc.Symbol,fa=Xc;function el(e,t){for(var r=-1,n=e==null?0:e.length,a=Array(n);++ra?0:a+t),r=r>a?a:r,r<0&&(r+=a),a=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(a);++n=n?e:Rl(e,t,r)}var Ml=Tl,Il="\\ud800-\\udfff",Nl="\\u0300-\\u036f",Fl="\\ufe20-\\ufe2f",Ll="\\u20d0-\\u20ff",jl=Nl+Fl+Ll,kl="\\ufe0e\\ufe0f",Dl="\\u200d",Ul=RegExp("["+Dl+Il+jl+kl+"]");function Bl(e){return Ul.test(e)}var Ni=Bl;function ql(e){return e.split("")}var Hl=ql,Fi="\\ud800-\\udfff",zl="\\u0300-\\u036f",Gl="\\ufe20-\\ufe2f",Wl="\\u20d0-\\u20ff",Vl=zl+Gl+Wl,Kl="\\ufe0e\\ufe0f",Yl="["+Fi+"]",Tn="["+Vl+"]",Mn="\\ud83c[\\udffb-\\udfff]",Jl="(?:"+Tn+"|"+Mn+")",Li="[^"+Fi+"]",ji="(?:\\ud83c[\\udde6-\\uddff]){2}",ki="[\\ud800-\\udbff][\\udc00-\\udfff]",Ql="\\u200d",Di=Jl+"?",Ui="["+Kl+"]?",Zl="(?:"+Ql+"(?:"+[Li,ji,ki].join("|")+")"+Ui+Di+")*",Xl=Ui+Di+Zl,ef="(?:"+[Li+Tn+"?",Tn,ji,ki,Yl].join("|")+")",tf=RegExp(Mn+"(?="+Mn+")|"+ef+Xl,"g");function rf(e){return e.match(tf)||[]}var nf=rf,af=Hl,of=Ni,sf=nf;function uf(e){return of(e)?sf(e):af(e)}var cf=uf,lf=Ml,ff=Ni,df=cf,pf=Ot;function hf(e){return function(t){t=pf(t);var r=ff(t)?df(t):void 0,n=r?r[0]:t.charAt(0),a=r?lf(r,1).join(""):t.slice(1);return n[e]()+a}}var vf=hf,yf=vf,mf=yf("toUpperCase"),gf=mf,bf=Ot,wf=gf;function Sf(e){return wf(bf(e).toLowerCase())}var Cf=Sf;function xf(e,t,r,n){var a=-1,o=e==null?0:e.length;for(n&&o&&(r=e[++a]);++a0&&arguments[0]!==void 0?arguments[0]:{};return Object.keys(e).reduce(function(t,r){var n=e[r];switch(r){case"class":t.className=n,delete t.class;break;default:delete t[r],t[Fd(r)]=n}return t},{})}function In(e,t,r){return r?xn.createElement(e.tag,$($({key:t},po(e.attrs)),r),(e.children||[]).map(function(n,a){return In(n,"".concat(t,"-").concat(e.tag,"-").concat(a))})):xn.createElement(e.tag,$({key:t},po(e.attrs)),(e.children||[]).map(function(n,a){return In(n,"".concat(t,"-").concat(e.tag,"-").concat(a))}))}function es(e){return Ze(e)[0]}function ts(e){return e?Array.isArray(e)?e:[e]:[]}var jd=` -.anticon { - display: inline-flex; - alignItems: center; - color: inherit; - font-style: normal; - line-height: 0; - text-align: center; - text-transform: none; - vertical-align: -0.125em; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.anticon > * { - line-height: 1; -} - -.anticon svg { - display: inline-block; -} - -.anticon::before { - display: none; -} - -.anticon .anticon-icon { - display: block; -} - -.anticon[tabindex] { - cursor: pointer; -} - -.anticon-spin::before, -.anticon-spin { - display: inline-block; - -webkit-animation: loadingCircle 1s infinite linear; - animation: loadingCircle 1s infinite linear; -} - -@-webkit-keyframes loadingCircle { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes loadingCircle { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -`,kd=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:jd,r=S.useContext(sa),n=r.csp;S.useEffect(function(){Ti(t,"@ant-design-icons",{prepend:!0,csp:n})},[])},Dd=["icon","className","onClick","style","primaryColor","secondaryColor"],ht={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};function Ud(e){var t=e.primaryColor,r=e.secondaryColor;ht.primaryColor=t,ht.secondaryColor=r||es(t),ht.calculated=!!r}function Bd(){return $({},ht)}var vr=function(t){var r=t.icon,n=t.className,a=t.onClick,o=t.style,i=t.primaryColor,s=t.secondaryColor,f=Qe(t,Dd),u=ht;if(i&&(u={primaryColor:i,secondaryColor:s||es(i)}),kd(),Ld(fo(r),"icon should be icon definiton, but got ".concat(r)),!fo(r))return null;var d=r;return d&&typeof d.icon=="function"&&(d=$($({},d),{},{icon:d.icon(u.primaryColor,u.secondaryColor)})),In(d.icon,"svg-".concat(d.name),$({className:n,onClick:a,style:o,"data-icon":d.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},f))};vr.displayName="IconReact";vr.getTwoToneColors=Bd;vr.setTwoToneColors=Ud;const va=vr;function rs(e){var t=ts(e),r=ne(t,2),n=r[0],a=r[1];return va.setTwoToneColors({primaryColor:n,secondaryColor:a})}function qd(){var e=va.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor}var Hd=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];rs("#1890ff");var yr=S.forwardRef(function(e,t){var r=e.className,n=e.icon,a=e.spin,o=e.rotate,i=e.tabIndex,s=e.onClick,f=e.twoToneColor,u=Qe(e,Hd),d=S.useContext(sa),g=d.prefixCls,h=g===void 0?"anticon":g,w=d.rootClassName,b=Oe(w,h,z(z({},"".concat(h,"-").concat(n.name),!!n.name),"".concat(h,"-spin"),!!a||n.name==="loading"),r),x=i;x===void 0&&s&&(x=-1);var C=o?{msTransform:"rotate(".concat(o,"deg)"),transform:"rotate(".concat(o,"deg)")}:void 0,m=ts(f),y=ne(m,2),c=y[0],l=y[1];return S.createElement("span",$($({role:"img","aria-label":n.name},u),{},{ref:t,tabIndex:x,onClick:s,className:b}),S.createElement(va,{icon:n,primaryColor:c,secondaryColor:l,style:C}))});yr.displayName="AntdIcon";yr.getTwoToneColor=qd;yr.setTwoToneColor=rs;const _e=yr;var zd={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"};const Gd=zd;var Wd=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:Gd}))},Vd=S.forwardRef(Wd);const Kd=Vd;var Yd={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};const Jd=Yd;var Qd=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:Jd}))},Zd=S.forwardRef(Qd);const Xd=Zd;var ep={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"};const tp=ep;var rp=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:tp}))},np=S.forwardRef(rp);const ap=np;var op={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"};const ip=op;var sp=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:ip}))},up=S.forwardRef(sp);const cp=up;var lp={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"};const fp=lp;var dp=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:fp}))},pp=S.forwardRef(dp);const hp=pp;var vp={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"};const yp=vp;var mp=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:yp}))},gp=S.forwardRef(mp);const bp=gp;var wp={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};const Sp=wp;var Cp=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:Sp}))},xp=S.forwardRef(Cp);const Ep=xp;var _p={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"};const Pp=_p;var $p=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:Pp}))},Op=S.forwardRef($p);const Ap=Op;var Rp={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z"}}]},name:"info-circle",theme:"outlined"};const Tp=Rp;var Mp=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:Tp}))},Ip=S.forwardRef(Mp);const Np=Ip;var Fp={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};const Lp=Fp;var jp=function(t,r){return S.createElement(_e,$($({},t),{},{ref:r,icon:Lp}))},kp=S.forwardRef(jp);const Dp=kp;function mr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ho(e,t){for(var r=0;r=19)return!0;var a=Vr.isMemo(t)?t.type.type:t.type;return!(typeof a=="function"&&!((r=a.prototype)!==null&&r!==void 0&&r.render)&&a.$$typeof!==Vr.ForwardRef||typeof t=="function"&&!((n=t.prototype)!==null&&n!==void 0&&n.render)&&t.$$typeof!==Vr.ForwardRef)};function Zp(e){return S.isValidElement(e)&&!zp(e)}function Rr(e){var t=ns();return function(){var r,n=rr(e);if(t){var a=rr(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return Up(this,r)}}function Pw(e,t){var r=Object.assign({},e);return Array.isArray(t)&&t.forEach(function(n){delete r[n]}),r}function Xp(e){if(Array.isArray(e))return _n(e)}function us(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function eh(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nr(e){return Xp(e)||us(e)||ua(e)||eh()}function th(e){return wi(e)||us(e)||ua(e)||Si()}function Ln(e,t){for(var r=e,n=0;n3&&arguments[3]!==void 0?arguments[3]:!1;return t.length&&n&&r===void 0&&!Ln(e,t.slice(0,-1))?e:cs(e,t,r,n)}function rh(e){return Y(e)==="object"&&e!==null&&Object.getPrototypeOf(e)===Object.prototype}function yo(e){return Array.isArray(e)?[]:{}}var nh=typeof Reflect>"u"?Object.keys:Reflect.ownKeys;function ah(){for(var e=arguments.length,t=new Array(e),r=0;r=0;--T){var R=this.tryEntries[T],U=R.completion;if(R.tryLoc==="root")return A("end");if(R.tryLoc<=this.prev){var W=n.call(R,"catchLoc"),V=n.call(R,"finallyLoc");if(W&&V){if(this.prev=0;--A){var T=this.tryEntries[A];if(T.tryLoc<=this.prev&&n.call(T,"finallyLoc")&&this.prev=0;--_){var A=this.tryEntries[_];if(A.finallyLoc===E)return this.complete(A.completion,A.afterLoc),L(A),C}},catch:function(E){for(var _=this.tryEntries.length-1;_>=0;--_){var A=this.tryEntries[_];if(A.tryLoc===E){var T=A.completion;if(T.type==="throw"){var R=T.arg;L(A)}return R}}throw Error("illegal catch attempt")},delegateYield:function(E,_,A){return this.delegate={iterator:q(E),resultName:_,nextLoc:A},this.method==="next"&&(this.arg=e),C}},t}function bo(e,t,r,n,a,o,i){try{var s=e[o](i),f=s.value}catch(u){return void r(u)}s.done?t(f):Promise.resolve(f).then(n,a)}function fs(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function i(f){bo(o,n,a,i,s,"next",f)}function s(f){bo(o,n,a,i,s,"throw",f)}i(void 0)})}}var At=$({},nc),mh=At.version,Yr=At.render,gh=At.unmountComponentAtNode,Tr;try{var bh=Number((mh||"").split(".")[0]);bh>=18&&(Tr=At.createRoot)}catch{}function wo(e){var t=At.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&Y(t)==="object"&&(t.usingClientEntryPoint=e)}var ar="__rc_react_root__";function wh(e,t){wo(!0);var r=t[ar]||Tr(t);wo(!1),r.render(e),t[ar]=r}function Sh(e,t){Yr==null||Yr(e,t)}function Ch(e,t){if(Tr){wh(e,t);return}Sh(e,t)}function xh(e){return jn.apply(this,arguments)}function jn(){return jn=fs(St().mark(function e(t){return St().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",Promise.resolve().then(function(){var a;(a=t[ar])===null||a===void 0||a.unmount(),delete t[ar]}));case 1:case"end":return n.stop()}},e)})),jn.apply(this,arguments)}function Eh(e){gh(e)}function _h(e){return kn.apply(this,arguments)}function kn(){return kn=fs(St().mark(function e(t){return St().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(Tr===void 0){n.next=2;break}return n.abrupt("return",xh(t));case 2:Eh(t);case 3:case"end":return n.stop()}},e)})),kn.apply(this,arguments)}var Ph=["children"],ds=S.createContext({});function Aw(e){var t=e.children,r=Qe(e,Ph);return S.createElement(ds.Provider,{value:r},t)}var $h=function(e){br(r,e);var t=Rr(r);function r(){return mr(this,r),t.apply(this,arguments)}return gr(r,[{key:"render",value:function(){return this.props.children}}]),r}(S.Component);function Dn(e){var t=S.useRef();t.current=e;var r=S.useCallback(function(){for(var n,a=arguments.length,o=new Array(a),i=0;i1&&arguments[1]!==void 0?arguments[1]:1;Po+=1;var n=Po;function a(o){if(o===0)Cs(n),t();else{var i=ws(function(){a(o-1)});wa.set(n,i)}}return a(r),n};Bn.cancel=function(e){var t=wa.get(e);return Cs(e),Ss(t)};const Ih=function(){var e=S.useRef(null);function t(){Bn.cancel(e.current)}function r(n){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;t();var o=Bn(function(){a<=1?n({isCanceled:function(){return o!==e.current}}):r(n,a-1)});e.current=o}return S.useEffect(function(){return function(){t()}},[]),[r,t]};var Nh=[de,Ve,Ke,ba],Fh=[de,ps],xs=!1,Lh=!0;function Es(e){return e===Ke||e===ba}const jh=function(e,t,r){var n=Un(So),a=ne(n,2),o=a[0],i=a[1],s=Ih(),f=ne(s,2),u=f[0],d=f[1];function g(){i(de,!0)}var h=t?Fh:Nh;return bs(function(){if(o!==So&&o!==ba){var w=h.indexOf(o),b=h[w+1],x=r(o);x===xs?i(b,!0):b&&u(function(C){function m(){C.isCanceled()||i(b,!0)}x===!0?m():Promise.resolve(x).then(m)})}},[e,o]),S.useEffect(function(){return function(){d()}},[]),[g,o]};function kh(e,t,r,n){var a=n.motionEnter,o=a===void 0?!0:a,i=n.motionAppear,s=i===void 0?!0:i,f=n.motionLeave,u=f===void 0?!0:f,d=n.motionDeadline,g=n.motionLeaveImmediately,h=n.onAppearPrepare,w=n.onEnterPrepare,b=n.onLeavePrepare,x=n.onAppearStart,C=n.onEnterStart,m=n.onLeaveStart,y=n.onAppearActive,c=n.onEnterActive,l=n.onLeaveActive,v=n.onAppearEnd,p=n.onEnterEnd,O=n.onLeaveEnd,I=n.onVisibleChanged,M=Un(),j=ne(M,2),D=j[0],B=j[1],L=Oh(Ae),G=ne(L,2),q=G[0],P=G[1],E=Un(null),_=ne(E,2),A=_[0],T=_[1],R=q(),U=S.useRef(!1),W=S.useRef(null);function V(){return r()}var ve=S.useRef(!1);function le(){P(Ae),T(null,!0)}var ye=Dn(function(oe){var te=q();if(te!==Ae){var me=V();if(!(oe&&!oe.deadline&&oe.target!==me)){var Nt=ve.current,Ft;te===Ut&&Nt?Ft=v==null?void 0:v(me,oe):te===Bt&&Nt?Ft=p==null?void 0:p(me,oe):te===qt&&Nt&&(Ft=O==null?void 0:O(me,oe)),Nt&&Ft!==!1&&le()}}}),Yu=Mh(ye),Ju=ne(Yu,1),Qu=Ju[0],Ha=function(te){switch(te){case Ut:return z(z(z({},de,h),Ve,x),Ke,y);case Bt:return z(z(z({},de,w),Ve,C),Ke,c);case qt:return z(z(z({},de,b),Ve,m),Ke,l);default:return{}}},ct=S.useMemo(function(){return Ha(R)},[R]),Zu=jh(R,!e,function(oe){if(oe===de){var te=ct[de];return te?te(V()):xs}if(Ne in ct){var me;T(((me=ct[Ne])===null||me===void 0?void 0:me.call(ct,V(),null))||null)}return Ne===Ke&&R!==Ae&&(Qu(V()),d>0&&(clearTimeout(W.current),W.current=setTimeout(function(){ye({deadline:!0})},d))),Ne===ps&&le(),Lh}),za=ne(Zu,2),Xu=za[0],Ne=za[1],ec=Es(Ne);ve.current=ec,bs(function(){B(t);var oe=U.current;U.current=!0;var te;!oe&&t&&s&&(te=Ut),oe&&t&&o&&(te=Bt),(oe&&!t&&u||!oe&&g&&!t&&u)&&(te=qt);var me=Ha(te);te&&(e||me[de])?(P(te),Xu()):P(Ae)},[t]),S.useEffect(function(){(R===Ut&&!s||R===Bt&&!o||R===qt&&!u)&&P(Ae)},[s,o,u]),S.useEffect(function(){return function(){U.current=!1,clearTimeout(W.current)}},[]);var qr=S.useRef(!1);S.useEffect(function(){D&&(qr.current=!0),D!==void 0&&R===Ae&&((qr.current||D)&&(I==null||I(D)),qr.current=!0)},[D,R]);var Hr=A;return ct[de]&&Ne===Ve&&(Hr=$({transition:"none"},Hr)),[R,Ne,Hr,D??t]}function Dh(e){var t=e;Y(e)==="object"&&(t=e.transitionSupport);function r(a,o){return!!(a.motionName&&t&&o!==!1)}var n=S.forwardRef(function(a,o){var i=a.visible,s=i===void 0?!0:i,f=a.removeOnLeave,u=f===void 0?!0:f,d=a.forceRender,g=a.children,h=a.motionName,w=a.leavedClassName,b=a.eventProps,x=S.useContext(ds),C=x.motion,m=r(a,C),y=S.useRef(),c=S.useRef();function l(){try{return y.current instanceof HTMLElement?y.current:Wp(c.current)}catch{return null}}var v=kh(m,s,l,a),p=ne(v,4),O=p[0],I=p[1],M=p[2],j=p[3],D=S.useRef(j);j&&(D.current=!0);var B=S.useCallback(function(A){y.current=A,ss(o,A)},[o]),L,G=$($({},b),{},{visible:s});if(!g)L=null;else if(O===Ae)j?L=g($({},G),B):!u&&D.current&&w?L=g($($({},G),{},{className:w}),B):d||!u&&!w?L=g($($({},G),{},{style:{display:"none"}}),B):L=null;else{var q;I===de?q="prepare":Es(I)?q="active":I===Ve&&(q="start");var P=_o(h,"".concat(O,"-").concat(q));L=g($($({},G),{},{className:Oe(_o(h,O),z(z({},P,P&&q),h,typeof h=="string")),style:M}),B)}if(S.isValidElement(L)&&Qp(L)){var E=L,_=E.ref;_||(L=S.cloneElement(L,{ref:B}))}return S.createElement($h,{ref:c},L)});return n.displayName="CSSMotion",n}const Uh=Dh(gs);var qn="add",Hn="keep",zn="remove",Jr="removed";function Bh(e){var t;return e&&Y(e)==="object"&&"key"in e?t=e:t={key:e},$($({},t),{},{key:String(t.key)})}function Gn(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return e.map(Bh)}function qh(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=[],n=0,a=t.length,o=Gn(e),i=Gn(t);o.forEach(function(u){for(var d=!1,g=n;g1});return f.forEach(function(u){r=r.filter(function(d){var g=d.key,h=d.status;return g!==u||h!==zn}),r.forEach(function(d){d.key===u&&(d.status=Hn)})}),r}var Hh=["component","children","onVisibleChanged","onAllRemoved"],zh=["status"],Gh=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];function Wh(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Uh,r=function(n){br(o,n);var a=Rr(o);function o(){var i;mr(this,o);for(var s=arguments.length,f=new Array(s),u=0;u=h&&(g.key=C[0].notice.key,g.updateMark=Oo(),g.userPassKey=d,C.shift()),C.push({notice:g,holderCallback:f})),{notices:C}})},n.remove=function(s){n.setState(function(f){var u=f.notices;return{notices:u.filter(function(d){var g=d.notice,h=g.key,w=g.userPassKey,b=w??h;return b!==s})}})},n.noticePropsMap={},n}return gr(r,[{key:"getTransitionName",value:function(){var a=this.props,o=a.prefixCls,i=a.animation,s=this.props.transitionName;return!s&&i&&(s="".concat(o,"-").concat(i)),s}},{key:"render",value:function(){var a=this,o=this.state.notices,i=this.props,s=i.prefixCls,f=i.className,u=i.closeIcon,d=i.style,g=[];return o.forEach(function(h,w){var b=h.notice,x=h.holderCallback,C=w===o.length-1?b.updateMark:void 0,m=b.key,y=b.userPassKey,c=$($($({prefixCls:s,closeIcon:u},b),b.props),{},{key:m,noticeKey:y||m,updateMark:C,onClose:function(v){var p;a.remove(v),(p=b.onClose)===null||p===void 0||p.call(b)},onClick:b.onClick,children:b.content});g.push(m),a.noticePropsMap[m]={props:c,holderCallback:x}}),S.createElement("div",{className:Oe(s,f),style:d},S.createElement(Vh,{keys:g,motionName:this.getTransitionName(),onVisibleChanged:function(w,b){var x=b.key;w||delete a.noticePropsMap[x]}},function(h){var w=h.key,b=h.className,x=h.style,C=h.visible,m=a.noticePropsMap[w],y=m.props,c=m.holderCallback;return c?S.createElement("div",{key:w,className:Oe(b,"".concat(s,"-hook-holder")),style:$({},x),ref:function(v){typeof w>"u"||(v?(a.hookRefs.set(w,v),c(v,y)):a.hookRefs.delete(w))}}):S.createElement(Sa,F({},y,{className:Oe(b,y==null?void 0:y.className),style:$($({},x),y==null?void 0:y.style),visible:C}))}))}}]),r}(S.Component);et.newInstance=void 0;et.defaultProps={prefixCls:"rc-notification",animation:"fade",style:{top:65,left:"50%"}};et.newInstance=function(t,r){var n=t||{},a=n.getContainer,o=Qe(n,Kh),i=document.createElement("div");if(a){var s=a();s.appendChild(i)}else document.body.appendChild(i);var f=!1;function u(d){f||(f=!0,r({notice:function(h){d.add(h)},removeNotice:function(h){d.remove(h)},component:d,destroy:function(){_h(i),i.parentNode&&i.parentNode.removeChild(i)},useNotification:function(){return Ca(d)}}))}Ch(S.createElement(et,F({},o,{ref:u})),i)};function Jh(e,t){var r=function(){var a,o,i=null,s={add:function(x,C){i==null||i.component.add(x,C)}},f=Ca(s),u=ne(f,2),d=u[0],g=u[1];function h(b){var x=b.prefixCls,C=a("message",x),m=a(),y=b.key||Ms(),c=new Promise(function(v){var p=function(){return typeof b.onClose=="function"&&b.onClose(),v(!0)};e(F(F({},b),{prefixCls:C,rootPrefixCls:m,getPopupContainer:o}),function(O){var I=O.prefixCls,M=O.instance;i=M,d(t(F(F({},b),{key:y,onClose:p}),I))})}),l=function(){i&&i.removeNotice(y)};return l.then=function(v,p){return c.then(v,p)},l.promise=c,l}var w=S.useRef({});return w.current.open=h,Fs.forEach(function(b){return js(w.current,b)}),[w.current,S.createElement(Ea,{key:"holder"},function(b){return a=b.getPrefixCls,o=b.getPopupContainer,g})]};return r}var ae,_s=3,Ps,Qh=1,$s="",Wn="move-up",Os=!1,As,Rs,Ts=!1;function Ms(){return Qh++}function Zh(e){e.top!==void 0&&(Ps=e.top,ae=null),e.duration!==void 0&&(_s=e.duration),e.prefixCls!==void 0&&($s=e.prefixCls),e.getContainer!==void 0&&(As=e.getContainer,ae=null),e.transitionName!==void 0&&(Wn=e.transitionName,ae=null,Os=!0),e.maxCount!==void 0&&(Rs=e.maxCount,ae=null),e.rtl!==void 0&&(Ts=e.rtl)}function Is(e,t){var r=e.prefixCls,n=e.getPopupContainer,a=Ys(),o=a.getPrefixCls,i=a.getRootPrefixCls,s=a.getIconPrefixCls,f=o("message",r||$s),u=i(e.rootPrefixCls,f),d=s();if(ae){t({prefixCls:f,rootPrefixCls:u,iconPrefixCls:d,instance:ae});return}var g={prefixCls:f,transitionName:Os?Wn:"".concat(u,"-").concat(Wn),style:{top:Ps},getContainer:As||n,maxCount:Rs};et.newInstance(g,function(h){if(ae){t({prefixCls:f,rootPrefixCls:u,iconPrefixCls:d,instance:ae});return}ae=h,t({prefixCls:f,rootPrefixCls:u,iconPrefixCls:d,instance:h})})}var Ns={info:Ap,success:Kd,error:ap,warning:bp,loading:Dp},Fs=Object.keys(Ns);function Ls(e,t,r){var n=e.duration!==void 0?e.duration:_s,a=Ns[e.type],o=Oe("".concat(t,"-custom-content"),z(z({},"".concat(t,"-").concat(e.type),e.type),"".concat(t,"-rtl"),Ts===!0));return{key:e.key,duration:n,style:e.style||{},className:e.className,content:S.createElement(Js,{iconPrefixCls:r},S.createElement("div",{className:o},e.icon||a&&S.createElement(a,null),S.createElement("span",null,e.content))),onClose:e.onClose,onClick:e.onClick}}function Xh(e){var t=e.key||Ms(),r=new Promise(function(a){var o=function(){return typeof e.onClose=="function"&&e.onClose(),a(!0)};Is(e,function(i){var s=i.prefixCls,f=i.iconPrefixCls,u=i.instance;u.notice(Ls(F(F({},e),{key:t,onClose:o}),s,f))})}),n=function(){var o;ae&&(ae.removeNotice(t),(o=e.onClose)===null||o===void 0||o.call(e))};return n.then=function(a,o){return r.then(a,o)},n.promise=r,n}function ev(e){return Object.prototype.toString.call(e)==="[object Object]"&&!!e.content}var Ct={open:Xh,config:Zh,destroy:function(t){if(ae)if(t){var r=ae,n=r.removeNotice;n(t)}else{var a=ae,o=a.destroy;o(),ae=null}}};function js(e,t){e[t]=function(r,n,a){return ev(r)?e.open(F(F({},r),{type:t})):(typeof n=="function"&&(a=n,n=void 0),e.open({content:r,duration:n,type:t,onClose:a}))}}Fs.forEach(function(e){return js(Ct,e)});Ct.warn=Ct.warning;Ct.useMessage=Jh(Is,Ls);const tv=Ct;function rv(e,t){var r=function(){var a,o=null,i={add:function(b,x){o==null||o.component.add(b,x)}},s=Ca(i),f=ne(s,2),u=f[0],d=f[1];function g(w){var b=w.prefixCls,x=a("notification",b);e(F(F({},w),{prefixCls:x}),function(C){var m=C.prefixCls,y=C.instance;o=y,u(t(w,m))})}var h=S.useRef({});return h.current.open=g,["success","info","warning","error"].forEach(function(w){h.current[w]=function(b){return h.current.open(F(F({},b),{type:w}))}}),[h.current,S.createElement(Ea,{key:"holder"},function(w){return a=w.getPrefixCls,d})]};return r}globalThis&&globalThis.__awaiter;var Fe={},ks=4.5,Ds=24,Us=24,Bs="",Vn="topRight",qs,Hs,zs=!1,Gs;function nv(e){var t=e.duration,r=e.placement,n=e.bottom,a=e.top,o=e.getContainer,i=e.closeIcon,s=e.prefixCls;s!==void 0&&(Bs=s),t!==void 0&&(ks=t),r!==void 0?Vn=r:e.rtl&&(Vn="topLeft"),n!==void 0&&(Us=n),a!==void 0&&(Ds=a),o!==void 0&&(qs=o),i!==void 0&&(Hs=i),e.rtl!==void 0&&(zs=e.rtl),e.maxCount!==void 0&&(Gs=e.maxCount)}function av(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ds,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Us,n;switch(e){case"top":n={left:"50%",transform:"translateX(-50%)",right:"auto",top:t,bottom:"auto"};break;case"topLeft":n={left:0,top:t,bottom:"auto"};break;case"topRight":n={right:0,top:t,bottom:"auto"};break;case"bottom":n={left:"50%",transform:"translateX(-50%)",right:"auto",top:"auto",bottom:r};break;case"bottomLeft":n={left:0,top:"auto",bottom:r};break;default:n={right:0,top:"auto",bottom:r};break}return n}function Ws(e,t){var r=e.placement,n=r===void 0?Vn:r,a=e.top,o=e.bottom,i=e.getContainer,s=i===void 0?qs:i,f=e.prefixCls,u=Ys(),d=u.getPrefixCls,g=u.getIconPrefixCls,h=d("notification",f||Bs),w=g(),b="".concat(h,"-").concat(n),x=Fe[b];if(x){Promise.resolve(x).then(function(m){t({prefixCls:"".concat(h,"-notice"),iconPrefixCls:w,instance:m})});return}var C=Oe("".concat(h,"-").concat(n),z({},"".concat(h,"-rtl"),zs===!0));Fe[b]=new Promise(function(m){et.newInstance({prefixCls:h,className:C,style:av(n,a,o),getContainer:s,maxCount:Gs},function(y){m(y),t({prefixCls:"".concat(h,"-notice"),iconPrefixCls:w,instance:y})})})}var ov={success:Xd,info:Np,error:cp,warning:Ep};function Vs(e,t,r){var n=e.duration,a=e.icon,o=e.type,i=e.description,s=e.message,f=e.btn,u=e.onClose,d=e.onClick,g=e.key,h=e.style,w=e.className,b=e.closeIcon,x=b===void 0?Hs:b,C=e.props,m=n===void 0?ks:n,y=null;a?y=S.createElement("span",{className:"".concat(t,"-icon")},e.icon):o&&(y=S.createElement(ov[o]||null,{className:"".concat(t,"-icon ").concat(t,"-icon-").concat(o)}));var c=typeof x>"u"?S.createElement("span",{className:"".concat(t,"-close-x")},S.createElement(hp,{className:"".concat(t,"-close-icon")})):x,l=!i&&y?S.createElement("span",{className:"".concat(t,"-message-single-line-auto-margin")}):null;return{content:S.createElement(Js,{iconPrefixCls:r},S.createElement("div",{className:y?"".concat(t,"-with-icon"):"",role:"alert"},y,S.createElement("div",{className:"".concat(t,"-message")},l,s),S.createElement("div",{className:"".concat(t,"-description")},i),f?S.createElement("span",{className:"".concat(t,"-btn")},f):null)),duration:m,closable:!0,closeIcon:c,onClose:u,onClick:d,key:g,style:h||{},className:Oe(w,z({},"".concat(t,"-").concat(o),!!o)),props:C}}function iv(e){Ws(e,function(t){var r=t.prefixCls,n=t.iconPrefixCls,a=t.instance;a.notice(Vs(e,r,n))})}var tt={open:iv,close:function(t){Object.keys(Fe).forEach(function(r){return Promise.resolve(Fe[r]).then(function(n){n.removeNotice(t)})})},config:nv,destroy:function(){Object.keys(Fe).forEach(function(t){Promise.resolve(Fe[t]).then(function(r){r.destroy()}),delete Fe[t]})}};["success","info","warning","error"].forEach(function(e){tt[e]=function(t){return tt.open(F(F({},t),{type:e}))}});tt.warn=tt.warning;tt.useNotification=rv(Ws,Vs);const sv=tt;var uv=function(t,r){return r||(t?"ant-".concat(t):"ant")},xa=S.createContext({getPrefixCls:uv}),Ea=xa.Consumer,cv="-ant-".concat(Date.now(),"-").concat(Math.random());function lv(e,t){var r={},n=function(d,g){var h=d.clone();return h=(g==null?void 0:g(h))||h,h.toRgbString()},a=function(d,g){var h=new Wt(d),w=Ze(h.toRgbString());r["".concat(g,"-color")]=n(h),r["".concat(g,"-color-disabled")]=w[1],r["".concat(g,"-color-hover")]=w[4],r["".concat(g,"-color-active")]=w[6],r["".concat(g,"-color-outline")]=h.clone().setAlpha(.2).toRgbString(),r["".concat(g,"-color-deprecated-bg")]=w[0],r["".concat(g,"-color-deprecated-border")]=w[2]};if(t.primaryColor){a(t.primaryColor,"primary");var o=new Wt(t.primaryColor),i=Ze(o.toRgbString());i.forEach(function(u,d){r["primary-".concat(d+1)]=u}),r["primary-color-deprecated-l-35"]=n(o,function(u){return u.lighten(35)}),r["primary-color-deprecated-l-20"]=n(o,function(u){return u.lighten(20)}),r["primary-color-deprecated-t-20"]=n(o,function(u){return u.tint(20)}),r["primary-color-deprecated-t-50"]=n(o,function(u){return u.tint(50)}),r["primary-color-deprecated-f-12"]=n(o,function(u){return u.setAlpha(u.getAlpha()*.12)});var s=new Wt(i[0]);r["primary-color-active-deprecated-f-30"]=n(s,function(u){return u.setAlpha(u.getAlpha()*.3)}),r["primary-color-active-deprecated-d-02"]=n(s,function(u){return u.darken(2)})}t.successColor&&a(t.successColor,"success"),t.warningColor&&a(t.warningColor,"warning"),t.errorColor&&a(t.errorColor,"error"),t.infoColor&&a(t.infoColor,"info");var f=Object.keys(r).map(function(u){return"--".concat(e,"-").concat(u,": ").concat(r[u],";")});return` - :root { - `.concat(f.join(` -`),` - } - `).trim()}function fv(e,t){var r=lv(e,t);$t()&&Ti(r,"".concat(cv,"-dynamic-theme"))}var Kn=S.createContext(!1),dv=function(t){var r=t.children,n=t.disabled,a=S.useContext(Kn);return S.createElement(Kn.Provider,{value:n??a},r)};const Rw=Kn;var Yn=S.createContext(void 0),pv=function(t){var r=t.children,n=t.size;return S.createElement(Yn.Consumer,null,function(a){return S.createElement(Yn.Provider,{value:n||a},r)})};const hv=Yn;var vv=["getTargetContainer","getPopupContainer","renderEmpty","pageHeader","input","pagination","form"],yv="ant",mv="anticon",or,Ks;function Jt(){return or||yv}function gv(){return Ks||mv}var bv=function(t){var r=t.prefixCls,n=t.iconPrefixCls,a=t.theme;r!==void 0&&(or=r),n!==void 0&&(Ks=n),a&&fv(Jt(),a)},Ys=function(){return{getPrefixCls:function(r,n){return n||(r?"".concat(Jt(),"-").concat(r):Jt())},getIconPrefixCls:gv,getRootPrefixCls:function(r,n){return r||or||(n&&n.includes("-")?n.replace(/^(.*)-[^-]*$/,"$1"):Jt())}}},wv=function(t){var r=t.children,n=t.csp,a=t.autoInsertSpaceInButton,o=t.form,i=t.locale,s=t.componentSize,f=t.direction,u=t.space,d=t.virtual,g=t.dropdownMatchSelectWidth,h=t.legacyLocale,w=t.parentContext,b=t.iconPrefixCls,x=t.componentDisabled,C=S.useCallback(function(p,O){var I=t.prefixCls;if(O)return O;var M=I||w.getPrefixCls("");return p?"".concat(M,"-").concat(p):M},[w.getPrefixCls,t.prefixCls]),m=F(F({},w),{csp:n,autoInsertSpaceInButton:a,locale:i||h,direction:f,space:u,virtual:d,dropdownMatchSelectWidth:g,getPrefixCls:C});vv.forEach(function(p){var O=t[p];O&&(m[p]=O)});var y=is(function(){return m},m,function(p,O){var I=Object.keys(p),M=Object.keys(O);return I.length!==M.length||I.some(function(j){return p[j]!==O[j]})}),c=S.useMemo(function(){return{prefixCls:b,csp:n}},[b,n]),l=r,v=S.useMemo(function(){var p,O,I,M;return ah(((p=Xe.Form)===null||p===void 0?void 0:p.defaultValidateMessages)||{},((I=(O=y.locale)===null||O===void 0?void 0:O.Form)===null||I===void 0?void 0:I.defaultValidateMessages)||{},((M=y.form)===null||M===void 0?void 0:M.validateMessages)||{},(o==null?void 0:o.validateMessages)||{})},[y,o==null?void 0:o.validateMessages]);return Object.keys(v).length>0&&(l=S.createElement(oh.Provider,{value:v},r)),i&&(l=S.createElement(hh,{locale:i,_ANT_MARK__:dh},l)),(b||n)&&(l=S.createElement(sa.Provider,{value:c},l)),s&&(l=S.createElement(pv,{size:s},l)),x!==void 0&&(l=S.createElement(dv,{disabled:x},l)),S.createElement(xa.Provider,{value:y},l)},Mr=function(t){return S.useEffect(function(){t.direction&&(tv.config({rtl:t.direction==="rtl"}),sv.config({rtl:t.direction==="rtl"}))},[t.direction]),S.createElement(yh,null,function(r,n,a){return S.createElement(Ea,null,function(o){return S.createElement(wv,F({parentContext:o,legacyLocale:a},t))})})};Mr.ConfigContext=xa;Mr.SizeContext=hv;Mr.config=bv;const Js=Mr;var Qs=S.isValidElement;function Tw(e){return e&&Qs(e)&&e.type===S.Fragment}function Sv(e,t,r){return Qs(e)?S.cloneElement(e,typeof r=="function"?r(e.props||{}):r):t}function Mw(e,t){return Sv(e,e,t)}var Iw=function(){for(var t=arguments.length,r=new Array(t),n=0;n-1}var kv=jv,Dv=Ir;function Uv(e,t){var r=this.__data__,n=Dv(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var Bv=Uv,qv=Ev,Hv=Mv,zv=Fv,Gv=kv,Wv=Bv;function at(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t-1&&e%1==0&&e-1&&e%1==0&&e<=Vy}var Yy=Ky,Io=function(){return Io=Object.assign||function(t){for(var r,n=1,a=arguments.length;n-1e3&&e<1e3||tu.call(/e/,t))return t;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof e=="number"){var n=e<0?-Do(-e):Do(e);if(n!==e){var a=String(n),o=Oa.call(t,a.length+1);return Te.call(a,r,"$&_")+"."+Te.call(Te.call(o,/([0-9]{3})/g,"$&_"),/_$/,"")}}return Te.call(t,r,"$&_")}var Zn=Zy,qo=Zn.custom,Ho=ou(qo)?qo:null,nu={__proto__:null,double:'"',single:"'"},um={__proto__:null,double:/(["\\])/g,single:/(['\\])/g},Lr=function e(t,r,n,a){var o=r||{};if($e(o,"quoteStyle")&&!$e(nu,o.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if($e(o,"maxStringLength")&&(typeof o.maxStringLength=="number"?o.maxStringLength<0&&o.maxStringLength!==1/0:o.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var i=$e(o,"customInspect")?o.customInspect:!0;if(typeof i!="boolean"&&i!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if($e(o,"indent")&&o.indent!==null&&o.indent!==" "&&!(parseInt(o.indent,10)===o.indent&&o.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if($e(o,"numericSeparator")&&typeof o.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var s=o.numericSeparator;if(typeof t>"u")return"undefined";if(t===null)return"null";if(typeof t=="boolean")return t?"true":"false";if(typeof t=="string")return su(t,o);if(typeof t=="number"){if(t===0)return 1/0/t>0?"0":"-0";var f=String(t);return s?Bo(t,f):f}if(typeof t=="bigint"){var u=String(t)+"n";return s?Bo(t,u):u}var d=typeof o.depth>"u"?5:o.depth;if(typeof n>"u"&&(n=0),n>=d&&d>0&&typeof t=="object")return Xn(t)?"[Array]":"[Object]";var g=Pm(o,n);if(typeof a>"u")a=[];else if(iu(a,t)>=0)return"[Circular]";function h(L,G,q){if(G&&(a=sm.call(a),a.push(G)),q){var P={depth:o.depth};return $e(o,"quoteStyle")&&(P.quoteStyle=o.quoteStyle),e(L,P,n+1,a)}return e(L,o,n+1,a)}if(typeof t=="function"&&!zo(t)){var w=mm(t),b=zt(t,h);return"[Function"+(w?": "+w:" (anonymous)")+"]"+(b.length>0?" { "+we.call(b,", ")+" }":"")}if(ou(t)){var x=rt?Te.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):Qn.call(t);return typeof t=="object"&&!rt?ft(x):x}if(xm(t)){for(var C="<"+jo.call(String(t.nodeName)),m=t.attributes||[],y=0;y",C}if(Xn(t)){if(t.length===0)return"[]";var c=zt(t,h);return g&&!_m(c)?"["+ea(c,g)+"]":"[ "+we.call(c,", ")+" ]"}if(fm(t)){var l=zt(t,h);return!("cause"in Error.prototype)&&"cause"in t&&!ru.call(t,"cause")?"{ ["+String(t)+"] "+we.call(ko.call("[cause]: "+h(t.cause),l),", ")+" }":l.length===0?"["+String(t)+"]":"{ ["+String(t)+"] "+we.call(l,", ")+" }"}if(typeof t=="object"&&i){if(Ho&&typeof t[Ho]=="function"&&Zn)return Zn(t,{depth:d-n});if(i!=="symbol"&&typeof t.inspect=="function")return t.inspect()}if(gm(t)){var v=[];return No&&No.call(t,function(L,G){v.push(h(G,t,!0)+" => "+h(L,t))}),Go("Map",ir.call(t),v,g)}if(Sm(t)){var p=[];return Fo&&Fo.call(t,function(L){p.push(h(L,t))}),Go("Set",sr.call(t),p,g)}if(bm(t))return tn("WeakMap");if(Cm(t))return tn("WeakSet");if(wm(t))return tn("WeakRef");if(pm(t))return ft(h(Number(t)));if(vm(t))return ft(h(Jn.call(t)));if(hm(t))return ft(rm.call(t));if(dm(t))return ft(h(String(t)));if(typeof window<"u"&&t===window)return"{ [object Window] }";if(typeof globalThis<"u"&&t===globalThis||typeof Ce<"u"&&t===Ce)return"{ [object globalThis] }";if(!lm(t)&&!zo(t)){var O=zt(t,h),I=Uo?Uo(t)===Object.prototype:t instanceof Object||t.constructor===Object,M=t instanceof Object?"":"null prototype",j=!I&&mt&&Object(t)===t&&mt in t?Oa.call(Ie(t),8,-1):M?"Object":"",D=I||typeof t.constructor!="function"?"":t.constructor.name?t.constructor.name+" ":"",B=D+(j||M?"["+we.call(ko.call([],j||[],M||[]),": ")+"] ":"");return O.length===0?B+"{}":g?B+"{"+ea(O,g)+"}":B+"{ "+we.call(O,", ")+" }"}return String(t)};function au(e,t,r){var n=r.quoteStyle||t,a=nu[n];return a+e+a}function cm(e){return Te.call(String(e),/"/g,""")}function Be(e){return!mt||!(typeof e=="object"&&(mt in e||typeof e[mt]<"u"))}function Xn(e){return Ie(e)==="[object Array]"&&Be(e)}function lm(e){return Ie(e)==="[object Date]"&&Be(e)}function zo(e){return Ie(e)==="[object RegExp]"&&Be(e)}function fm(e){return Ie(e)==="[object Error]"&&Be(e)}function dm(e){return Ie(e)==="[object String]"&&Be(e)}function pm(e){return Ie(e)==="[object Number]"&&Be(e)}function hm(e){return Ie(e)==="[object Boolean]"&&Be(e)}function ou(e){if(rt)return e&&typeof e=="object"&&e instanceof Symbol;if(typeof e=="symbol")return!0;if(!e||typeof e!="object"||!Qn)return!1;try{return Qn.call(e),!0}catch{}return!1}function vm(e){if(!e||typeof e!="object"||!Jn)return!1;try{return Jn.call(e),!0}catch{}return!1}var ym=Object.prototype.hasOwnProperty||function(e){return e in this};function $e(e,t){return ym.call(e,t)}function Ie(e){return nm.call(e)}function mm(e){if(e.name)return e.name;var t=om.call(am.call(e),/^function\s*([\w$]+)/);return t?t[1]:null}function iu(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;rt.maxStringLength){var r=e.length-t.maxStringLength,n="... "+r+" more character"+(r>1?"s":"");return su(Oa.call(e,0,t.maxStringLength),t)+n}var a=um[t.quoteStyle||"single"];a.lastIndex=0;var o=Te.call(Te.call(e,a,"\\$1"),/[\x00-\x1f]/g,Em);return au(o,"single",t)}function Em(e){var t=e.charCodeAt(0),r={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return r?"\\"+r:"\\x"+(t<16?"0":"")+im.call(t.toString(16))}function ft(e){return"Object("+e+")"}function tn(e){return e+" { ? }"}function Go(e,t,r,n){var a=n?ea(r,n):we.call(r,", ");return e+" ("+t+") {"+a+"}"}function _m(e){for(var t=0;t=0)return!1;return!0}function Pm(e,t){var r;if(e.indent===" ")r=" ";else if(typeof e.indent=="number"&&e.indent>0)r=we.call(Array(e.indent+1)," ");else return null;return{base:r,prev:we.call(Array(t+1),r)}}function ea(e,t){if(e.length===0)return"";var r=` -`+t.prev+t.base;return r+we.call(e,","+r)+` -`+t.prev}function zt(e,t){var r=Xn(e),n=[];if(r){n.length=e.length;for(var a=0;a"u"||!Q?N:Q(Uint8Array),De={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?N:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?N:ArrayBuffer,"%ArrayIteratorPrototype%":qe&&Q?Q([][Symbol.iterator]()):N,"%AsyncFromSyncIteratorPrototype%":N,"%AsyncFunction%":We,"%AsyncGenerator%":We,"%AsyncGeneratorFunction%":We,"%AsyncIteratorPrototype%":We,"%Atomics%":typeof Atomics>"u"?N:Atomics,"%BigInt%":typeof BigInt>"u"?N:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?N:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?N:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?N:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":hg,"%eval%":eval,"%EvalError%":vg,"%Float16Array%":typeof Float16Array>"u"?N:Float16Array,"%Float32Array%":typeof Float32Array>"u"?N:Float32Array,"%Float64Array%":typeof Float64Array>"u"?N:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?N:FinalizationRegistry,"%Function%":hu,"%GeneratorFunction%":We,"%Int8Array%":typeof Int8Array>"u"?N:Int8Array,"%Int16Array%":typeof Int16Array>"u"?N:Int16Array,"%Int32Array%":typeof Int32Array>"u"?N:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":qe&&Q?Q(Q([][Symbol.iterator]())):N,"%JSON%":typeof JSON=="object"?JSON:N,"%Map%":typeof Map>"u"?N:Map,"%MapIteratorPrototype%":typeof Map>"u"||!qe||!Q?N:Q(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":pg,"%Object.getOwnPropertyDescriptor%":xt,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?N:Promise,"%Proxy%":typeof Proxy>"u"?N:Proxy,"%RangeError%":yg,"%ReferenceError%":mg,"%Reflect%":typeof Reflect>"u"?N:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?N:Set,"%SetIteratorPrototype%":typeof Set>"u"||!qe||!Q?N:Q(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?N:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":qe&&Q?Q(""[Symbol.iterator]()):N,"%Symbol%":qe?Symbol:N,"%SyntaxError%":nt,"%ThrowTypeError%":$g,"%TypedArray%":Rg,"%TypeError%":Je,"%Uint8Array%":typeof Uint8Array>"u"?N:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?N:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?N:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?N:Uint32Array,"%URIError%":gg,"%WeakMap%":typeof WeakMap>"u"?N:WeakMap,"%WeakRef%":typeof WeakRef>"u"?N:WeakRef,"%WeakSet%":typeof WeakSet>"u"?N:WeakSet,"%Function.prototype.call%":Rt,"%Function.prototype.apply%":vu,"%Object.defineProperty%":Pg,"%Object.getPrototypeOf%":Og,"%Math.abs%":bg,"%Math.floor%":wg,"%Math.max%":Sg,"%Math.min%":Cg,"%Math.pow%":xg,"%Math.round%":Eg,"%Math.sign%":_g,"%Reflect.getPrototypeOf%":Ag};if(Q)try{null.error}catch(e){var Tg=Q(Q(e));De["%Error.prototype%"]=Tg}var Mg=function e(t){var r;if(t==="%AsyncFunction%")r=hn("async function () {}");else if(t==="%GeneratorFunction%")r=hn("function* () {}");else if(t==="%AsyncGeneratorFunction%")r=hn("async function* () {}");else if(t==="%AsyncGenerator%"){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if(t==="%AsyncIteratorPrototype%"){var a=e("%AsyncGenerator%");a&&Q&&(r=Q(a.prototype))}return De[t]=r,r},ni={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},Tt=kr(),ur=dg(),Ig=Tt.call(Rt,Array.prototype.concat),Ng=Tt.call(vu,Array.prototype.splice),ai=Tt.call(Rt,String.prototype.replace),cr=Tt.call(Rt,String.prototype.slice),Fg=Tt.call(Rt,RegExp.prototype.exec),Lg=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,jg=/\\(\\)?/g,kg=function(t){var r=cr(t,0,1),n=cr(t,-1);if(r==="%"&&n!=="%")throw new nt("invalid intrinsic syntax, expected closing `%`");if(n==="%"&&r!=="%")throw new nt("invalid intrinsic syntax, expected opening `%`");var a=[];return ai(t,Lg,function(o,i,s,f){a[a.length]=s?ai(f,jg,"$1"):i||o}),a},Dg=function(t,r){var n=t,a;if(ur(ni,n)&&(a=ni[n],n="%"+a[0]+"%"),ur(De,n)){var o=De[n];if(o===We&&(o=Mg(n)),typeof o>"u"&&!r)throw new Je("intrinsic "+t+" exists, but is not available. Please file an issue!");return{alias:a,name:n,value:o}}throw new nt("intrinsic "+t+" does not exist!")},Ra=function(t,r){if(typeof t!="string"||t.length===0)throw new Je("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof r!="boolean")throw new Je('"allowMissing" argument must be a boolean');if(Fg(/^%?[^%]*%?$/,t)===null)throw new nt("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=kg(t),a=n.length>0?n[0]:"",o=Dg("%"+a+"%",r),i=o.name,s=o.value,f=!1,u=o.alias;u&&(a=u[0],Ng(n,Ig([0,1],u)));for(var d=1,g=!0;d=n.length){var x=xt(s,h);g=!!x,g&&"get"in x&&!("originalValue"in x.get)?s=x.get:s=s[h]}else g=ur(s,h),s=s[h];g&&!f&&(De[i]=s)}}return s},yu=Ra,mu=pu,Ug=mu([yu("%String.prototype.indexOf%")]),gu=function(t,r){var n=yu(t,!!r);return typeof n=="function"&&Ug(t,".prototype.")>-1?mu([n]):n},Bg=Ra,Mt=gu,qg=Lr,Hg=st,oi=Bg("%Map%",!0),zg=Mt("Map.prototype.get",!0),Gg=Mt("Map.prototype.set",!0),Wg=Mt("Map.prototype.has",!0),Vg=Mt("Map.prototype.delete",!0),Kg=Mt("Map.prototype.size",!0),bu=!!oi&&function(){var t,r={assert:function(n){if(!r.has(n))throw new Hg("Side channel does not contain "+qg(n))},delete:function(n){if(t){var a=Vg(t,n);return Kg(t)===0&&(t=void 0),a}return!1},get:function(n){if(t)return zg(t,n)},has:function(n){return t?Wg(t,n):!1},set:function(n,a){t||(t=new oi),Gg(t,n,a)}};return r},Yg=Ra,Dr=gu,Jg=Lr,Gt=bu,Qg=st,He=Yg("%WeakMap%",!0),Zg=Dr("WeakMap.prototype.get",!0),Xg=Dr("WeakMap.prototype.set",!0),e1=Dr("WeakMap.prototype.has",!0),t1=Dr("WeakMap.prototype.delete",!0),r1=He?function(){var t,r,n={assert:function(a){if(!n.has(a))throw new Qg("Side channel does not contain "+Jg(a))},delete:function(a){if(He&&a&&(typeof a=="object"||typeof a=="function")){if(t)return t1(t,a)}else if(Gt&&r)return r.delete(a);return!1},get:function(a){return He&&a&&(typeof a=="object"||typeof a=="function")&&t?Zg(t,a):r&&r.get(a)},has:function(a){return He&&a&&(typeof a=="object"||typeof a=="function")&&t?e1(t,a):!!r&&r.has(a)},set:function(a,o){He&&a&&(typeof a=="object"||typeof a=="function")?(t||(t=new He),Xg(t,a,o)):Gt&&(r||(r=Gt()),r.set(a,o))}};return n}:Gt,n1=st,a1=Lr,o1=Im,i1=bu,s1=r1,u1=s1||i1||o1,wu=function(){var t,r={assert:function(n){if(!r.has(n))throw new n1("Side channel does not contain "+a1(n))},delete:function(n){return!!t&&t.delete(n)},get:function(n){return t&&t.get(n)},has:function(n){return!!t&&t.has(n)},set:function(n,a){t||(t=u1()),t.set(n,a)}};return r},c1=String.prototype.replace,l1=/%20/g,yn={RFC1738:"RFC1738",RFC3986:"RFC3986"},Ta={default:yn.RFC3986,formatters:{RFC1738:function(e){return c1.call(e,l1,"+")},RFC3986:function(e){return String(e)}},RFC1738:yn.RFC1738,RFC3986:yn.RFC3986},f1=Ta,d1=wu,mn=Object.prototype.hasOwnProperty,Le=Array.isArray,Ur=d1(),Ye=function(t,r){return Ur.set(t,r),t},je=function(t){return Ur.has(t)},dt=function(t){return Ur.get(t)},ta=function(t,r){Ur.set(t,r)},ge=function(){for(var e=[],t=0;t<256;++t)e[e.length]="%"+((t<16?"0":"")+t.toString(16)).toUpperCase();return e}(),p1=function(t){for(;t.length>1;){var r=t.pop(),n=r.obj[r.prop];if(Le(n)){for(var a=[],o=0;on.arrayLimit)return Ye(gt(t.concat(r),n),a);t[a]=r}else if(t&&typeof t=="object")if(je(t)){var o=dt(t)+1;t[o]=r,ta(t,o)}else(n&&(n.plainObjects||n.allowPrototypes)||!mn.call(Object.prototype,r))&&(t[r]=!0);else return[t,r];return t}if(!t||typeof t!="object"){if(je(r)){for(var i=Object.keys(r),s=n&&n.plainObjects?{__proto__:null,0:t}:{0:t},f=0;fn.arrayLimit?Ye(gt(d,n),d.length-1):d}var g=t;return Le(t)&&!Le(r)&&(g=gt(t,n)),Le(t)&&Le(r)?(r.forEach(function(h,w){if(mn.call(t,w)){var b=t[w];b&&typeof b=="object"&&h&&typeof h=="object"?t[w]=e(b,h,n):t[t.length]=h}else t[w]=h}),t):Object.keys(r).reduce(function(h,w){var b=r[w];if(mn.call(h,w)?h[w]=e(h[w],b,n):h[w]=b,je(r)&&!je(h)&&Ye(h,dt(r)),je(h)){var x=parseInt(w,10);String(x)===w&&x>=0&&x>dt(h)&&ta(h,x)}return h},g)},v1=function(t,r){return Object.keys(r).reduce(function(n,a){return n[a]=r[a],n},t)},y1=function(e,t,r){var n=e.replace(/\+/g," ");if(r==="iso-8859-1")return n.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(n)}catch{return n}},gn=1024,m1=function(t,r,n,a,o){if(t.length===0)return t;var i=t;if(typeof t=="symbol"?i=Symbol.prototype.toString.call(t):typeof t!="string"&&(i=String(t)),n==="iso-8859-1")return escape(i).replace(/%u[0-9a-f]{4}/gi,function(w){return"%26%23"+parseInt(w.slice(2),16)+"%3B"});for(var s="",f=0;f=gn?i.slice(f,f+gn):i,d=[],g=0;g=48&&h<=57||h>=65&&h<=90||h>=97&&h<=122||o===f1.RFC1738&&(h===40||h===41)){d[d.length]=u.charAt(g);continue}if(h<128){d[d.length]=ge[h];continue}if(h<2048){d[d.length]=ge[192|h>>6]+ge[128|h&63];continue}if(h<55296||h>=57344){d[d.length]=ge[224|h>>12]+ge[128|h>>6&63]+ge[128|h&63];continue}g+=1,h=65536+((h&1023)<<10|u.charCodeAt(g)&1023),d[d.length]=ge[240|h>>18]+ge[128|h>>12&63]+ge[128|h>>6&63]+ge[128|h&63]}s+=d.join("")}return s},g1=function(t){for(var r=[{obj:{o:t},prop:"o"}],n=[],a=0;an?Ye(gt(i,{plainObjects:a}),i.length-1):i},C1=function(t,r){if(Le(t)){for(var n=[],a=0;a"u"&&(v=0)}if(typeof d=="function"?c=d(r,c):c instanceof Date?c=w(c):n==="comma"&&be(c)&&(c=Xt.maybeMap(c,function(T){return T instanceof Date?w(T):T})),c===null){if(i)return u&&!C?u(r,K.encoder,m,"key",b):r;c=""}if(P1(c)||Xt.isBuffer(c)){if(u){var I=C?r:u(r,K.encoder,m,"key",b);return[x(I)+"="+x(u(c,K.encoder,m,"value",b))]}return[x(r)+"="+x(String(c))]}var M=[];if(typeof c>"u")return M;var j;if(n==="comma"&&be(c))C&&u&&(c=Xt.maybeMap(c,u)),j=[{value:c.length>0?c.join(",")||null:void 0}];else if(be(d))j=d;else{var D=Object.keys(c);j=g?D.sort(g):D}var B=f?String(r).replace(/\./g,"%2E"):String(r),L=a&&be(c)&&c.length===1?B+"[]":B;if(o&&be(c)&&c.length===0)return L+"[]";for(var G=0;G"u"?t.encodeDotInKeys===!0?!0:K.allowDots:!!t.allowDots;return{addQueryPrefix:typeof t.addQueryPrefix=="boolean"?t.addQueryPrefix:K.addQueryPrefix,allowDots:s,allowEmptyArrays:typeof t.allowEmptyArrays=="boolean"?!!t.allowEmptyArrays:K.allowEmptyArrays,arrayFormat:i,charset:r,charsetSentinel:typeof t.charsetSentinel=="boolean"?t.charsetSentinel:K.charsetSentinel,commaRoundTrip:!!t.commaRoundTrip,delimiter:typeof t.delimiter>"u"?K.delimiter:t.delimiter,encode:typeof t.encode=="boolean"?t.encode:K.encode,encodeDotInKeys:typeof t.encodeDotInKeys=="boolean"?t.encodeDotInKeys:K.encodeDotInKeys,encoder:typeof t.encoder=="function"?t.encoder:K.encoder,encodeValuesOnly:typeof t.encodeValuesOnly=="boolean"?t.encodeValuesOnly:K.encodeValuesOnly,filter:o,format:n,formatter:a,serializeDate:typeof t.serializeDate=="function"?t.serializeDate:K.serializeDate,skipNulls:typeof t.skipNulls=="boolean"?t.skipNulls:K.skipNulls,sort:typeof t.sort=="function"?t.sort:null,strictNullHandling:typeof t.strictNullHandling=="boolean"?t.strictNullHandling:K.strictNullHandling}},A1=function(e,t){var r=e,n=O1(t),a,o;typeof n.filter=="function"?(o=n.filter,r=o("",r)):be(n.filter)&&(o=n.filter,a=o);var i=[];if(typeof r!="object"||r===null)return"";var s=xu[n.arrayFormat],f=s==="comma"&&n.commaRoundTrip;a||(a=Object.keys(r)),n.sort&&a.sort(n.sort);for(var u=Cu(),d=0;d0?b+w:""},xe=Su,er=Object.prototype.hasOwnProperty,wn=Array.isArray,H={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:xe.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1,throwOnLimitExceeded:!1},R1=function(e){return e.replace(/&#(\d+);/g,function(t,r){return String.fromCharCode(parseInt(r,10))})},_u=function(e,t,r){if(e&&typeof e=="string"&&t.comma&&e.indexOf(",")>-1)return e.split(",");if(t.throwOnLimitExceeded&&r>=t.arrayLimit)throw new RangeError("Array limit exceeded. Only "+t.arrayLimit+" element"+(t.arrayLimit===1?"":"s")+" allowed in an array.");return e},T1="utf8=%26%2310003%3B",M1="utf8=%E2%9C%93",I1=function(t,r){var n={__proto__:null},a=r.ignoreQueryPrefix?t.replace(/^\?/,""):t;a=a.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var o=r.parameterLimit===1/0?void 0:r.parameterLimit,i=a.split(r.delimiter,r.throwOnLimitExceeded?o+1:o);if(r.throwOnLimitExceeded&&i.length>o)throw new RangeError("Parameter limit exceeded. Only "+o+" parameter"+(o===1?"":"s")+" allowed.");var s=-1,f,u=r.charset;if(r.charsetSentinel)for(f=0;f-1&&(b=wn(b)?[b]:b),r.comma&&wn(b)&&b.length>r.arrayLimit){if(r.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+r.arrayLimit+" element"+(r.arrayLimit===1?"":"s")+" allowed in an array.");b=xe.combine([],b,r.arrayLimit,r.plainObjects)}if(w!==null){var x=er.call(n,w);x&&r.duplicates==="combine"?n[w]=xe.combine(n[w],b,r.arrayLimit,r.plainObjects):(!x||r.duplicates==="last")&&(n[w]=b)}}return n},N1=function(e,t,r,n){var a=0;if(e.length>0&&e[e.length-1]==="[]"){var o=e.slice(0,-1).join("");a=Array.isArray(t)&&t[o]?t[o].length:0}for(var i=n?t:_u(t,r,a),s=e.length-1;s>=0;--s){var f,u=e[s];if(u==="[]"&&r.parseArrays)xe.isOverflow(i)?f=i:f=r.allowEmptyArrays&&(i===""||r.strictNullHandling&&i===null)?[]:xe.combine([],i,r.arrayLimit,r.plainObjects);else{f=r.plainObjects?{__proto__:null}:{};var d=u.charAt(0)==="["&&u.charAt(u.length-1)==="]"?u.slice(1,-1):u,g=r.decodeDotInKeys?d.replace(/%2E/g,"."):d,h=parseInt(g,10),w=!isNaN(h)&&u!==g&&String(h)===g&&h>=0&&r.parseArrays;if(!r.parseArrays&&g==="")f={0:i};else if(w&&h"u"?H.charset:t.charset,n=typeof t.duplicates>"u"?H.duplicates:t.duplicates;if(n!=="combine"&&n!=="first"&&n!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var a=typeof t.allowDots>"u"?t.decodeDotInKeys===!0?!0:H.allowDots:!!t.allowDots;return{allowDots:a,allowEmptyArrays:typeof t.allowEmptyArrays=="boolean"?!!t.allowEmptyArrays:H.allowEmptyArrays,allowPrototypes:typeof t.allowPrototypes=="boolean"?t.allowPrototypes:H.allowPrototypes,allowSparse:typeof t.allowSparse=="boolean"?t.allowSparse:H.allowSparse,arrayLimit:typeof t.arrayLimit=="number"?t.arrayLimit:H.arrayLimit,charset:r,charsetSentinel:typeof t.charsetSentinel=="boolean"?t.charsetSentinel:H.charsetSentinel,comma:typeof t.comma=="boolean"?t.comma:H.comma,decodeDotInKeys:typeof t.decodeDotInKeys=="boolean"?t.decodeDotInKeys:H.decodeDotInKeys,decoder:typeof t.decoder=="function"?t.decoder:H.decoder,delimiter:typeof t.delimiter=="string"||xe.isRegExp(t.delimiter)?t.delimiter:H.delimiter,depth:typeof t.depth=="number"||t.depth===!1?+t.depth:H.depth,duplicates:n,ignoreQueryPrefix:t.ignoreQueryPrefix===!0,interpretNumericEntities:typeof t.interpretNumericEntities=="boolean"?t.interpretNumericEntities:H.interpretNumericEntities,parameterLimit:typeof t.parameterLimit=="number"?t.parameterLimit:H.parameterLimit,parseArrays:t.parseArrays!==!1,plainObjects:typeof t.plainObjects=="boolean"?t.plainObjects:H.plainObjects,strictDepth:typeof t.strictDepth=="boolean"?!!t.strictDepth:H.strictDepth,strictNullHandling:typeof t.strictNullHandling=="boolean"?t.strictNullHandling:H.strictNullHandling,throwOnLimitExceeded:typeof t.throwOnLimitExceeded=="boolean"?t.throwOnLimitExceeded:!1}},k1=function(e,t){var r=j1(t);if(e===""||e===null||typeof e>"u")return r.plainObjects?{__proto__:null}:{};for(var n=typeof e=="string"?I1(e,r):e,a=r.plainObjects?{__proto__:null}:{},o=Object.keys(n),i=0;i-1};function ut(e){if(typeof e!="string"&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(e)||e==="")throw new TypeError('Invalid character in header field name: "'+e+'"');return e.toLowerCase()}function Ia(e){return typeof e!="string"&&(e=String(e)),e}function Na(e){var t={next:function(){var r=e.shift();return{done:r===void 0,value:r}}};return re.iterable&&(t[Symbol.iterator]=function(){return t}),t}function J(e){this.map={},e instanceof J?e.forEach(function(t,r){this.append(r,t)},this):Array.isArray(e)?e.forEach(function(t){if(t.length!=2)throw new TypeError("Headers constructor: expected name/value pair to be length 2, found"+t.length);this.append(t[0],t[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}J.prototype.append=function(e,t){e=ut(e),t=Ia(t);var r=this.map[e];this.map[e]=r?r+", "+t:t};J.prototype.delete=function(e){delete this.map[ut(e)]};J.prototype.get=function(e){return e=ut(e),this.has(e)?this.map[e]:null};J.prototype.has=function(e){return this.map.hasOwnProperty(ut(e))};J.prototype.set=function(e,t){this.map[ut(e)]=Ia(t)};J.prototype.forEach=function(e,t){for(var r in this.map)this.map.hasOwnProperty(r)&&e.call(t,this.map[r],r,this)};J.prototype.keys=function(){var e=[];return this.forEach(function(t,r){e.push(r)}),Na(e)};J.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),Na(e)};J.prototype.entries=function(){var e=[];return this.forEach(function(t,r){e.push([r,t])}),Na(e)};re.iterable&&(J.prototype[Symbol.iterator]=J.prototype.entries);function Sn(e){if(!e._noBody){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}}function Pu(e){return new Promise(function(t,r){e.onload=function(){t(e.result)},e.onerror=function(){r(e.error)}})}function W1(e){var t=new FileReader,r=Pu(t);return t.readAsArrayBuffer(e),r}function V1(e){var t=new FileReader,r=Pu(t),n=/charset=([A-Za-z0-9_-]+)/.exec(e.type),a=n?n[1]:"utf-8";return t.readAsText(e,a),r}function K1(e){for(var t=new Uint8Array(e),r=new Array(t.length),n=0;n-1?t:e}function Ue(e,t){if(!(this instanceof Ue))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');t=t||{};var r=t.body;if(e instanceof Ue){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new J(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,!r&&e._bodyInit!=null&&(r=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"same-origin",(t.headers||!this.headers)&&(this.headers=new J(t.headers)),this.method=J1(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal||function(){if("AbortController"in Z){var o=new AbortController;return o.signal}}(),this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&r)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(r),(this.method==="GET"||this.method==="HEAD")&&(t.cache==="no-store"||t.cache==="no-cache")){var n=/([?&])_=[^&]*/;if(n.test(this.url))this.url=this.url.replace(n,"$1_="+new Date().getTime());else{var a=/\?/;this.url+=(a.test(this.url)?"&":"?")+"_="+new Date().getTime()}}}Ue.prototype.clone=function(){return new Ue(this,{body:this._bodyInit})};function Q1(e){var t=new FormData;return e.trim().split("&").forEach(function(r){if(r){var n=r.split("="),a=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(a),decodeURIComponent(o))}}),t}function Z1(e){var t=new J,r=e.replace(/\r?\n[\t ]+/g," ");return r.split("\r").map(function(n){return n.indexOf(` -`)===0?n.substr(1,n.length):n}).forEach(function(n){var a=n.split(":"),o=a.shift().trim();if(o){var i=a.join(":").trim();try{t.append(o,i)}catch(s){console.warn("Response "+s.message)}}}),t}$u.call(Ue.prototype);function Ee(e,t){if(!(this instanceof Ee))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');if(t||(t={}),this.type="default",this.status=t.status===void 0?200:t.status,this.status<200||this.status>599)throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText===void 0?"":""+t.statusText,this.headers=new J(t.headers),this.url=t.url||"",this._initBody(e)}$u.call(Ee.prototype);Ee.prototype.clone=function(){return new Ee(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new J(this.headers),url:this.url})};Ee.error=function(){var e=new Ee(null,{status:200,statusText:""});return e.ok=!1,e.status=0,e.type="error",e};var X1=[301,302,303,307,308];Ee.redirect=function(e,t){if(X1.indexOf(t)===-1)throw new RangeError("Invalid status code");return new Ee(null,{status:t,headers:{location:e}})};var ke=Z.DOMException;try{new ke}catch{ke=function(t,r){this.message=t,this.name=r;var n=Error(t);this.stack=n.stack},ke.prototype=Object.create(Error.prototype),ke.prototype.constructor=ke}function Ou(e,t){return new Promise(function(r,n){var a=new Ue(e,t);if(a.signal&&a.signal.aborted)return n(new ke("Aborted","AbortError"));var o=new XMLHttpRequest;function i(){o.abort()}o.onload=function(){var u={statusText:o.statusText,headers:Z1(o.getAllResponseHeaders()||"")};a.url.indexOf("file://")===0&&(o.status<200||o.status>599)?u.status=200:u.status=o.status,u.url="responseURL"in o?o.responseURL:u.headers.get("X-Request-URL");var d="response"in o?o.response:o.responseText;setTimeout(function(){r(new Ee(d,u))},0)},o.onerror=function(){setTimeout(function(){n(new TypeError("Network request failed"))},0)},o.ontimeout=function(){setTimeout(function(){n(new TypeError("Network request timed out"))},0)},o.onabort=function(){setTimeout(function(){n(new ke("Aborted","AbortError"))},0)};function s(u){try{return u===""&&Z.location.href?Z.location.href:u}catch{return u}}if(o.open(a.method,s(a.url),!0),a.credentials==="include"?o.withCredentials=!0:a.credentials==="omit"&&(o.withCredentials=!1),"responseType"in o&&(re.blob?o.responseType="blob":re.arrayBuffer&&(o.responseType="arraybuffer")),t&&typeof t.headers=="object"&&!(t.headers instanceof J||Z.Headers&&t.headers instanceof Z.Headers)){var f=[];Object.getOwnPropertyNames(t.headers).forEach(function(u){f.push(ut(u)),o.setRequestHeader(u,Ia(t.headers[u]))}),a.headers.forEach(function(u,d){f.indexOf(d)===-1&&o.setRequestHeader(d,u)})}else a.headers.forEach(function(u,d){o.setRequestHeader(d,u)});a.signal&&(a.signal.addEventListener("abort",i),o.onreadystatechange=function(){o.readyState===4&&a.signal.removeEventListener("abort",i)}),o.send(typeof a._bodyInit>"u"?null:a._bodyInit)})}Ou.polyfill=!0;Z.fetch||(Z.fetch=Ou,Z.Headers=J,Z.Request=Ue,Z.Response=Ee);self.fetch.bind(self);function ui(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),r.push.apply(r,n)}return r}function ie(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function tr(e,t,r){return Ru()?tr=Reflect.construct:tr=function(a,o,i){var s=[null];s.push.apply(s,o);var f=Function.bind.apply(a,s),u=new f;return i&&_t(u,i.prototype),u},tr.apply(null,arguments)}function tb(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function lr(e){var t=typeof Map=="function"?new Map:void 0;return lr=function(n){if(n===null||!tb(n))return n;if(typeof n!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(n))return t.get(n);t.set(n,a)}function a(){return tr(n,arguments,Et(this).constructor)}return a.prototype=Object.create(n.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),_t(a,n)},lr(e)}function rb(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function nb(e,t){if(t&&(typeof t=="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return rb(e)}function Tu(e){var t=Ru();return function(){var n=Et(e),a;if(t){var o=Et(this).constructor;a=Reflect.construct(n,arguments,o)}else a=n.apply(this,arguments);return nb(this,a)}}function Se(e){return ab(e)||ob(e)||ib(e)||sb()}function ab(e){if(Array.isArray(e))return ra(e)}function ob(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ib(e,t){if(e){if(typeof e=="string")return ra(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return ra(e,t)}}function ra(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1&&arguments[1]!==void 0?arguments[1]:{global:!1,core:!1,defaultInstance:!1},a=!1,o=!1,i=!1;if(typeof n=="number"?(process&&process.env,a=!0,o=!1):Me(n)==="object"&&n&&(o=n.global||!1,a=n.core||!1,i=n.defaultInstance||!1),o){e.globalMiddlewares.splice(e.globalMiddlewares.length-e.defaultGlobalMiddlewaresLength,0,r);return}if(a){e.coreMiddlewares.splice(e.coreMiddlewares.length-e.defaultCoreMiddlewaresLength,0,r);return}if(i){this.defaultMiddlewares.push(r);return}this.middlewares.push(r)}},{key:"execute",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,n=ub([].concat(Se(this.middlewares),Se(this.defaultMiddlewares),Se(e.globalMiddlewares),Se(e.coreMiddlewares)));return n(r)}}]),e}();he.globalMiddlewares=[];he.defaultGlobalMiddlewaresLength=0;he.coreMiddlewares=[];he.defaultCoreMiddlewaresLength=0;var cb=function(){function e(t){It(this,e),this.cache=new Map,this.timer={},this.extendOptions(t)}return Fa(e,[{key:"extendOptions",value:function(r){this.maxCache=r.maxCache||0}},{key:"get",value:function(r){return this.cache.get(JSON.stringify(r))}},{key:"set",value:function(r,n){var a=this,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:6e4;if(this.maxCache>0&&this.cache.size>=this.maxCache){var i=Se(this.cache.keys())[0];this.cache.delete(i),this.timer[i]&&clearTimeout(this.timer[i])}var s=JSON.stringify(r);this.cache.set(s,n),o>0&&(this.timer[s]=setTimeout(function(){a.cache.delete(s),delete a.timer[s]},o))}},{key:"delete",value:function(r){var n=JSON.stringify(r);return delete this.timer[n],this.cache.delete(n)}},{key:"clear",value:function(){return this.timer={},this.cache.clear()}}]),e}(),Mu=function(e){Au(r,e);var t=Tu(r);function r(n,a){var o,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"RequestError";return It(this,r),o=t.call(this,n),o.name="RequestError",o.request=a,o.type=i,o}return r}(lr(Error)),pt=function(e){Au(r,e);var t=Tu(r);function r(n,a,o,i){var s,f=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"ResponseError";return It(this,r),s=t.call(this,a||n.statusText),s.name="ResponseError",s.data=o,s.response=n,s.request=i,s.type=f,s}return r}(lr(Error));function lb(e){return new Promise(function(t,r){var n=new FileReader;n.onload=function(){t(n.result)},n.onerror=r,n.readAsText(e,"GBK")})}function li(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;try{return JSON.parse(e)}catch{if(t)throw new pt(r,"JSON.parse fail",e,n,"ParseError")}return e}function fb(e,t,r){return new Promise(function(n,a){setTimeout(function(){a(new Mu(t||"timeout of ".concat(e,"ms exceeded"),r,"Timeout"))},e)})}function fi(e){return new Promise(function(t,r){e.cancelToken&&e.cancelToken.promise.then(function(n){r(n)})})}var db=Object.prototype.toString;function Iu(){var e;return typeof process<"u"&&db.call(process)==="[object process]"&&(e="NODE"),typeof XMLHttpRequest<"u"&&(e="BROWSER"),e}function na(e){return Me(e)==="object"&&Object.prototype.toString.call(e)==="[object Array]"}function Nu(e){return typeof URLSearchParams<"u"&&e instanceof URLSearchParams}function pb(e){return Me(e)==="object"&&Object.prototype.toString.call(e)==="[object Date]"}function di(e){return e!==null&&Me(e)==="object"}function pi(e,t){if(e)if(Me(e)!=="object"&&(e=[e]),na(e))for(var r=0;r1&&arguments[1]!==void 0?arguments[1]:{},n=r.prefix,a=r.suffix;return n&&(t="".concat(n).concat(t)),a&&(t="".concat(t).concat(a)),{url:t,options:r}};function vb(e,t){var r=t.method,n=r===void 0?"get":r;return n.toLowerCase()==="get"}function yb(e,t){if(!e)return t();var r=e.req;r=r===void 0?{}:r;var n=r.options,a=n===void 0?{}:n,o=r.url,i=o===void 0?"":o,s=e.cache,f=e.responseInterceptors,u=a.timeout,d=u===void 0?0:u,g=a.timeoutMessage,h=a.__umiRequestCoreType__,w=h===void 0?"normal":h,b=a.useCache,x=b===void 0?!1:b,C=a.method,m=C===void 0?"get":C,y=a.params,c=a.ttl,l=a.validateCache,v=l===void 0?vb:l;if(w!=="normal")return process&&process.env,t();var p=fetch;if(!p)throw new Error("Global fetch not exist!");var O=Iu()==="BROWSER",I=v(i,a)&&x&&O;if(I){var M=s.get({url:i,params:y,method:m});if(M)return M=M.clone(),M.useCache=!0,e.res=M,t()}var j;return d>0?j=Promise.race([fi(a),p(i,a),fb(d,g,e.req)]):j=Promise.race([fi(a),p(i,a)]),f.forEach(function(D){j=j.then(function(B){var L=typeof B.clone=="function"?B.clone():B;return D(L,a)})}),j.then(function(D){if(I&&D.status===200){var B=D.clone();B.useCache=!0,s.set({url:i,params:y,method:m},B,c)}return e.res=D,t()})}function mb(e,t){var r;return t().then(function(){if(e){var n=e.res,a=n===void 0?{}:n,o=e.req,i=o===void 0?{}:o,s=i||{},f=s.options;f=f===void 0?{}:f;var u=f.responseType,d=u===void 0?"json":u,g=f.charset,h=g===void 0?"utf8":g;f.getResponse;var w=f.throwErrIfParseFail,b=w===void 0?!1:w,x=f.parseResponse,C=x===void 0?!0:x;if(C&&!(!a||!a.clone)){if(r=Iu()==="BROWSER"?a.clone():a,r.useCache=a.useCache||!1,h==="gbk")try{return a.blob().then(lb).then(function(m){return li(m,!1,r,i)})}catch(m){throw new pt(r,m.message,null,i,"ParseError")}else if(d==="json")return a.text().then(function(m){return li(m,b,r,i)});try{return a[d]()}catch{throw new pt(r,"responseType not support",null,i,"ParseError")}}}}).then(function(n){if(e){e.res;var a=e.req,o=a===void 0?{}:a,i=o||{},s=i.options;s=s===void 0?{}:s;var f=s.getResponse,u=f===void 0?!1:f;if(r){if(r.status>=200&&r.status<300){if(u){e.res={data:n,response:r};return}e.res=n;return}throw new pt(r,"http error",n,o,"HttpError")}}}).catch(function(n){if(n instanceof Mu||n instanceof pt)throw n;var a=e.req,o=e.res;throw n.request=n.request||a,n.response=n.response||o,n.type=n.type||n.name,n.data=n.data||void 0,n})}function gb(e,t){if(!e)return t();var r=e.req;r=r===void 0?{}:r;var n=r.options,a=n===void 0?{}:n,o=a.method,i=o===void 0?"get":o;if(["post","put","patch","delete"].indexOf(i.toLowerCase())===-1)return t();var s=a.requestType,f=s===void 0?"json":s,u=a.data;if(u){var d=Object.prototype.toString.call(u);d==="[object Object]"||d==="[object Array]"?f==="json"?(a.headers=ie({Accept:"application/json","Content-Type":"application/json;charset=UTF-8"},a.headers),a.body=JSON.stringify(u)):f==="form"&&(a.headers=ie({Accept:"application/json","Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},a.headers),a.body=aa(u)):(a.headers=ie({Accept:"application/json"},a.headers),a.body=u)}return e.req.options=a,t()}function bb(e,t){var r,n;if(e)if(t)r=t(e);else if(Nu(e))r=e.toString();else if(na(e))n=[],pi(e,function(o){o===null||typeof o>"u"?n.push(o):n.push(di(o)?JSON.stringify(o):o)}),r=aa(n);else{n={},pi(e,function(o,i){var s=o;o===null||typeof o>"u"?n[i]=o:pb(o)?s=o.toISOString():na(o)?s=o:di(o)&&(s=JSON.stringify(o)),n[i]=s});var a=aa(n);r=a}return r}function wb(e,t){if(!e)return t();var r=e.req;r=r===void 0?{}:r;var n=r.options,a=n===void 0?{}:n,o=a.paramsSerializer,i=a.params,s=e.req;s=s===void 0?{}:s;var f=s.url,u=f===void 0?"":f;a.method=a.method?a.method.toUpperCase():"GET",a.credentials=a.credentials||"same-origin";var d=bb(i,o);if(e.req.originUrl=u,d){var g=u.indexOf("?")!==-1?"&":"?";e.req.url="".concat(u).concat(g).concat(d)}return e.req.options=a,t()}var Lu=[gb,wb,mb],ju=[yb];he.globalMiddlewares=Lu;he.defaultGlobalMiddlewaresLength=Lu.length;he.coreMiddlewares=ju;he.defaultCoreMiddlewaresLength=ju.length;var wt=function(){function e(t){It(this,e),this.onion=new he([]),this.fetchIndex=0,this.mapCache=new cb(t),this.initOptions=t,this.instanceRequestInterceptors=[],this.instanceResponseInterceptors=[]}return Fa(e,[{key:"use",value:function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{global:!1,core:!1};return this.onion.use(r,n),this}},{key:"extendOptions",value:function(r){this.initOptions=Fu(this.initOptions,r),this.mapCache.extendOptions(r)}},{key:"dealRequestInterceptors",value:function(r){var n=function(i,s){return i.then(function(){var f=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return r.req.url=f.url||r.req.url,r.req.options=f.options||r.req.options,s(r.req.url,r.req.options)})},a=[].concat(Se(e.requestInterceptors),Se(this.instanceRequestInterceptors));return a.reduce(n,Promise.resolve()).then(function(){var o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return r.req.url=o.url||r.req.url,r.req.options=o.options||r.req.options,Promise.resolve()})}},{key:"request",value:function(r,n){var a=this,o=this.onion,i={req:{url:r,options:ie(ie({},n),{},{url:r})},res:null,cache:this.mapCache,responseInterceptors:[].concat(Se(e.responseInterceptors),Se(this.instanceResponseInterceptors))};if(typeof r!="string")throw new Error("url MUST be a string");return new Promise(function(s,f){a.dealRequestInterceptors(i).then(function(){return o.execute(i)}).then(function(){s(i.res)}).catch(function(u){var d=i.req.options.errorHandler;if(d)try{var g=d(u);s(g)}catch(h){f(h)}else f(u)})})}}],[{key:"requestUse",value:function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{global:!0};if(typeof r!="function")throw new TypeError("Interceptor must be function!");n.global?e.requestInterceptors.push(r):this.instanceRequestInterceptors.push(r)}},{key:"responseUse",value:function(r){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{global:!0};if(typeof r!="function")throw new TypeError("Interceptor must be function!");n.global?e.responseInterceptors.push(r):this.instanceResponseInterceptors.push(r)}}]),e}();wt.requestInterceptors=[hb];wt.responseInterceptors=[];function Br(e){this.message=e}Br.prototype.toString=function(){return this.message?"Cancel: ".concat(this.message):"Cancel"};Br.prototype.__CANCEL__=!0;function fr(e){if(typeof e!="function")throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(a){t=a});var r=this;e(function(a){r.reason||(r.reason=new Br(a),t(r.reason))})}fr.prototype.throwIfRequested=function(){if(this.reason)throw this.reason};fr.source=function(){var t,r=new fr(function(a){t=a});return{token:r,cancel:t}};function Sb(e){return!!(e&&e.__CANCEL__)}var La=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=new wt(t),n=function(i){var s=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},f=Fu(r.initOptions,s);return r.request(i,f)};n.use=r.use.bind(r),n.fetchIndex=r.fetchIndex,n.interceptors={request:{use:wt.requestUse.bind(r)},response:{use:wt.responseUse.bind(r)}};var a=["get","post","delete","put","patch","head","options","rpc"];return a.forEach(function(o){n[o]=function(i,s){return n(i,ie(ie({},s),{},{method:o}))}}),n.Cancel=Br,n.CancelToken=fr,n.isCancel=Sb,n.extendOptions=r.extendOptions.bind(r),n.middlewares={instance:r.onion.middlewares,defaultInstance:r.onion.defaultMiddlewares,global:he.globalMiddlewares,core:he.coreMiddlewares},n},Cb=function(t){return La(t)};La({parseResponse:!1});La({});var ku={exports:{}};(function(e,t){(function(r){e.exports=r()})(function(r){var n=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function a(m,y){var c=m[0],l=m[1],v=m[2],p=m[3];c+=(l&v|~l&p)+y[0]-680876936|0,c=(c<<7|c>>>25)+l|0,p+=(c&l|~c&v)+y[1]-389564586|0,p=(p<<12|p>>>20)+c|0,v+=(p&c|~p&l)+y[2]+606105819|0,v=(v<<17|v>>>15)+p|0,l+=(v&p|~v&c)+y[3]-1044525330|0,l=(l<<22|l>>>10)+v|0,c+=(l&v|~l&p)+y[4]-176418897|0,c=(c<<7|c>>>25)+l|0,p+=(c&l|~c&v)+y[5]+1200080426|0,p=(p<<12|p>>>20)+c|0,v+=(p&c|~p&l)+y[6]-1473231341|0,v=(v<<17|v>>>15)+p|0,l+=(v&p|~v&c)+y[7]-45705983|0,l=(l<<22|l>>>10)+v|0,c+=(l&v|~l&p)+y[8]+1770035416|0,c=(c<<7|c>>>25)+l|0,p+=(c&l|~c&v)+y[9]-1958414417|0,p=(p<<12|p>>>20)+c|0,v+=(p&c|~p&l)+y[10]-42063|0,v=(v<<17|v>>>15)+p|0,l+=(v&p|~v&c)+y[11]-1990404162|0,l=(l<<22|l>>>10)+v|0,c+=(l&v|~l&p)+y[12]+1804603682|0,c=(c<<7|c>>>25)+l|0,p+=(c&l|~c&v)+y[13]-40341101|0,p=(p<<12|p>>>20)+c|0,v+=(p&c|~p&l)+y[14]-1502002290|0,v=(v<<17|v>>>15)+p|0,l+=(v&p|~v&c)+y[15]+1236535329|0,l=(l<<22|l>>>10)+v|0,c+=(l&p|v&~p)+y[1]-165796510|0,c=(c<<5|c>>>27)+l|0,p+=(c&v|l&~v)+y[6]-1069501632|0,p=(p<<9|p>>>23)+c|0,v+=(p&l|c&~l)+y[11]+643717713|0,v=(v<<14|v>>>18)+p|0,l+=(v&c|p&~c)+y[0]-373897302|0,l=(l<<20|l>>>12)+v|0,c+=(l&p|v&~p)+y[5]-701558691|0,c=(c<<5|c>>>27)+l|0,p+=(c&v|l&~v)+y[10]+38016083|0,p=(p<<9|p>>>23)+c|0,v+=(p&l|c&~l)+y[15]-660478335|0,v=(v<<14|v>>>18)+p|0,l+=(v&c|p&~c)+y[4]-405537848|0,l=(l<<20|l>>>12)+v|0,c+=(l&p|v&~p)+y[9]+568446438|0,c=(c<<5|c>>>27)+l|0,p+=(c&v|l&~v)+y[14]-1019803690|0,p=(p<<9|p>>>23)+c|0,v+=(p&l|c&~l)+y[3]-187363961|0,v=(v<<14|v>>>18)+p|0,l+=(v&c|p&~c)+y[8]+1163531501|0,l=(l<<20|l>>>12)+v|0,c+=(l&p|v&~p)+y[13]-1444681467|0,c=(c<<5|c>>>27)+l|0,p+=(c&v|l&~v)+y[2]-51403784|0,p=(p<<9|p>>>23)+c|0,v+=(p&l|c&~l)+y[7]+1735328473|0,v=(v<<14|v>>>18)+p|0,l+=(v&c|p&~c)+y[12]-1926607734|0,l=(l<<20|l>>>12)+v|0,c+=(l^v^p)+y[5]-378558|0,c=(c<<4|c>>>28)+l|0,p+=(c^l^v)+y[8]-2022574463|0,p=(p<<11|p>>>21)+c|0,v+=(p^c^l)+y[11]+1839030562|0,v=(v<<16|v>>>16)+p|0,l+=(v^p^c)+y[14]-35309556|0,l=(l<<23|l>>>9)+v|0,c+=(l^v^p)+y[1]-1530992060|0,c=(c<<4|c>>>28)+l|0,p+=(c^l^v)+y[4]+1272893353|0,p=(p<<11|p>>>21)+c|0,v+=(p^c^l)+y[7]-155497632|0,v=(v<<16|v>>>16)+p|0,l+=(v^p^c)+y[10]-1094730640|0,l=(l<<23|l>>>9)+v|0,c+=(l^v^p)+y[13]+681279174|0,c=(c<<4|c>>>28)+l|0,p+=(c^l^v)+y[0]-358537222|0,p=(p<<11|p>>>21)+c|0,v+=(p^c^l)+y[3]-722521979|0,v=(v<<16|v>>>16)+p|0,l+=(v^p^c)+y[6]+76029189|0,l=(l<<23|l>>>9)+v|0,c+=(l^v^p)+y[9]-640364487|0,c=(c<<4|c>>>28)+l|0,p+=(c^l^v)+y[12]-421815835|0,p=(p<<11|p>>>21)+c|0,v+=(p^c^l)+y[15]+530742520|0,v=(v<<16|v>>>16)+p|0,l+=(v^p^c)+y[2]-995338651|0,l=(l<<23|l>>>9)+v|0,c+=(v^(l|~p))+y[0]-198630844|0,c=(c<<6|c>>>26)+l|0,p+=(l^(c|~v))+y[7]+1126891415|0,p=(p<<10|p>>>22)+c|0,v+=(c^(p|~l))+y[14]-1416354905|0,v=(v<<15|v>>>17)+p|0,l+=(p^(v|~c))+y[5]-57434055|0,l=(l<<21|l>>>11)+v|0,c+=(v^(l|~p))+y[12]+1700485571|0,c=(c<<6|c>>>26)+l|0,p+=(l^(c|~v))+y[3]-1894986606|0,p=(p<<10|p>>>22)+c|0,v+=(c^(p|~l))+y[10]-1051523|0,v=(v<<15|v>>>17)+p|0,l+=(p^(v|~c))+y[1]-2054922799|0,l=(l<<21|l>>>11)+v|0,c+=(v^(l|~p))+y[8]+1873313359|0,c=(c<<6|c>>>26)+l|0,p+=(l^(c|~v))+y[15]-30611744|0,p=(p<<10|p>>>22)+c|0,v+=(c^(p|~l))+y[6]-1560198380|0,v=(v<<15|v>>>17)+p|0,l+=(p^(v|~c))+y[13]+1309151649|0,l=(l<<21|l>>>11)+v|0,c+=(v^(l|~p))+y[4]-145523070|0,c=(c<<6|c>>>26)+l|0,p+=(l^(c|~v))+y[11]-1120210379|0,p=(p<<10|p>>>22)+c|0,v+=(c^(p|~l))+y[2]+718787259|0,v=(v<<15|v>>>17)+p|0,l+=(p^(v|~c))+y[9]-343485551|0,l=(l<<21|l>>>11)+v|0,m[0]=c+m[0]|0,m[1]=l+m[1]|0,m[2]=v+m[2]|0,m[3]=p+m[3]|0}function o(m){var y=[],c;for(c=0;c<64;c+=4)y[c>>2]=m.charCodeAt(c)+(m.charCodeAt(c+1)<<8)+(m.charCodeAt(c+2)<<16)+(m.charCodeAt(c+3)<<24);return y}function i(m){var y=[],c;for(c=0;c<64;c+=4)y[c>>2]=m[c]+(m[c+1]<<8)+(m[c+2]<<16)+(m[c+3]<<24);return y}function s(m){var y=m.length,c=[1732584193,-271733879,-1732584194,271733878],l,v,p,O,I,M;for(l=64;l<=y;l+=64)a(c,o(m.substring(l-64,l)));for(m=m.substring(l-64),v=m.length,p=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],l=0;l>2]|=m.charCodeAt(l)<<(l%4<<3);if(p[l>>2]|=128<<(l%4<<3),l>55)for(a(c,p),l=0;l<16;l+=1)p[l]=0;return O=y*8,O=O.toString(16).match(/(.*?)(.{0,8})$/),I=parseInt(O[2],16),M=parseInt(O[1],16)||0,p[14]=I,p[15]=M,a(c,p),c}function f(m){var y=m.length,c=[1732584193,-271733879,-1732584194,271733878],l,v,p,O,I,M;for(l=64;l<=y;l+=64)a(c,i(m.subarray(l-64,l)));for(m=l-64>2]|=m[l]<<(l%4<<3);if(p[l>>2]|=128<<(l%4<<3),l>55)for(a(c,p),l=0;l<16;l+=1)p[l]=0;return O=y*8,O=O.toString(16).match(/(.*?)(.{0,8})$/),I=parseInt(O[2],16),M=parseInt(O[1],16)||0,p[14]=I,p[15]=M,a(c,p),c}function u(m){var y="",c;for(c=0;c<4;c+=1)y+=n[m>>c*8+4&15]+n[m>>c*8&15];return y}function d(m){var y;for(y=0;yp?new ArrayBuffer(0):(O=p-v,I=new ArrayBuffer(O),M=new Uint8Array(I),j=new Uint8Array(this,v,O),M.set(j),I)}}();function g(m){return/[\u0080-\uFFFF]/.test(m)&&(m=unescape(encodeURIComponent(m))),m}function h(m,y){var c=m.length,l=new ArrayBuffer(c),v=new Uint8Array(l),p;for(p=0;p>2]|=y.charCodeAt(l)<<(l%4<<3);return this._finish(v,c),p=d(this._hash),m&&(p=x(p)),this.reset(),p},C.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},C.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},C.prototype.setState=function(m){return this._buff=m.buff,this._length=m.length,this._hash=m.hash,this},C.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},C.prototype._finish=function(m,y){var c=y,l,v,p;if(m[c>>2]|=128<<(c%4<<3),c>55)for(a(this._hash,m),c=0;c<16;c+=1)m[c]=0;l=this._length*8,l=l.toString(16).match(/(.*?)(.{0,8})$/),v=parseInt(l[2],16),p=parseInt(l[1],16)||0,m[14]=v,m[15]=p,a(this._hash,m)},C.hash=function(m,y){return C.hashBinary(g(m),y)},C.hashBinary=function(m,y){var c=s(m),l=d(c);return y?x(l):l},C.ArrayBuffer=function(){this.reset()},C.ArrayBuffer.prototype.append=function(m){var y=b(this._buff.buffer,m,!0),c=y.length,l;for(this._length+=m.byteLength,l=64;l<=c;l+=64)a(this._hash,i(y.subarray(l-64,l)));return this._buff=l-64>2]|=y[v]<<(v%4<<3);return this._finish(l,c),p=d(this._hash),m&&(p=x(p)),this.reset(),p},C.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},C.ArrayBuffer.prototype.getState=function(){var m=C.prototype.getState.call(this);return m.buff=w(m.buff),m},C.ArrayBuffer.prototype.setState=function(m){return m.buff=h(m.buff,!0),C.prototype.setState.call(this,m)},C.ArrayBuffer.prototype.destroy=C.prototype.destroy,C.ArrayBuffer.prototype._finish=C.prototype._finish,C.ArrayBuffer.hash=function(m,y){var c=f(new Uint8Array(m)),l=d(c);return y?x(l):l},C})})(ku);var xb=ku.exports;const Du=Pt(xb),Eb="8d5f0981493d3112328fdd21346f23a3",_b=({method:e,data:t,requestHeader:r})=>{(e==="GET"||!t)&&(t={});let n={};n.body=JSON.stringify(t),["stmp","type","sess","orn","lang","size","ver","code","seq"].sort().map(i=>n[i]=r[i]);const o=q1.stringify(n)+Eb;return Du.hash(decodeURIComponent(o))},Pb="1.0.0",$b="torchTrain",{userAgent:vi,platform:Ob}=navigator,Ab=()=>"654a591de5d3a4b0",Rb=()=>({size:0,dst:"",type:1,ver:512,lang:"zh_CN",seq:0,code:0,stmp:new Date().getTime(),sign:"",ext:"CN",desc:"",sess:Ab(),orn:`${vi.split(" ")[1]}$${Ob}$${vi.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)?"ios":"android"}$${Pb}$${$b}`}),Tb=(e,t)=>{const r=Rb();return r.sign=_b({method:e,data:t,requestHeader:r}),r},Uu={development:"",test:"",production:""},ja=Cb({prefix:Uu.production,timeout:6e4});ja.interceptors.request.use((e,t)=>(t.headers=Object.assign(t.headers,Tb(t.method,t.data||{})),{url:e,options:t}));ja.interceptors.response.use(async e=>{const{status:t}=e;if(t!==200)return e;const r=await e.clone().json();if((r==null?void 0:r.code)===0)return r.data;throw new Error(r==null?void 0:r.message)});const kw=Uu.production==null,Bu=ja;var ka={exports:{}};const Mb=(e,t,r,n)=>{if(r==="length"||r==="prototype"||r==="arguments"||r==="caller")return;const a=Object.getOwnPropertyDescriptor(e,r),o=Object.getOwnPropertyDescriptor(t,r);!Ib(a,o)&&n||Object.defineProperty(e,r,o)},Ib=function(e,t){return e===void 0||e.configurable||e.writable===t.writable&&e.enumerable===t.enumerable&&e.configurable===t.configurable&&(e.writable||e.value===t.value)},Nb=(e,t)=>{const r=Object.getPrototypeOf(t);r!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,r)},Fb=(e,t)=>`/* Wrapped ${e}*/ -${t}`,Lb=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),jb=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),kb=(e,t,r)=>{const n=r===""?"":`with ${r.trim()}() `,a=Fb.bind(null,n,t.toString());Object.defineProperty(a,"name",jb),Object.defineProperty(e,"toString",{...Lb,value:a})},Db=(e,t,{ignoreNonConfigurable:r=!1}={})=>{const{name:n}=e;for(const a of Reflect.ownKeys(t))Mb(e,t,a,r);return Nb(e,t),kb(e,t,n),e};var Ub=Db,oa={exports:{}},Bb=()=>{const e={};return e.promise=new Promise((t,r)=>{e.resolve=t,e.reject=r}),e};(function(e,t){var r=Ce&&Ce.__awaiter||function(i,s,f,u){return new(f||(f=Promise))(function(d,g){function h(x){try{b(u.next(x))}catch(C){g(C)}}function w(x){try{b(u.throw(x))}catch(C){g(C)}}function b(x){x.done?d(x.value):new f(function(C){C(x.value)}).then(h,w)}b((u=u.apply(i,s||[])).next())})},n=Ce&&Ce.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(t,"__esModule",{value:!0});const a=n(Bb);function o(i,s="maxAge"){let f,u,d;const g=()=>r(this,void 0,void 0,function*(){if(f!==void 0)return;const b=x=>r(this,void 0,void 0,function*(){d=a.default();const C=x[1][s]-Date.now();if(C<=0){i.delete(x[0]),d.resolve();return}return f=x[0],u=setTimeout(()=>{i.delete(x[0]),d&&d.resolve()},C),typeof u.unref=="function"&&u.unref(),d.promise});try{for(const x of i)yield b(x)}catch{}f=void 0}),h=()=>{f=void 0,u!==void 0&&(clearTimeout(u),u=void 0),d!==void 0&&(d.reject(void 0),d=void 0)},w=i.set.bind(i);return i.set=(b,x)=>{i.has(b)&&i.delete(b);const C=w(b,x);return f&&f===b&&h(),g(),C},g(),i}t.default=o,e.exports=o,e.exports.default=o})(oa,oa.exports);var qb=oa.exports,Da={exports:{}};const qu=async e=>{try{return{isFulfilled:!0,isRejected:!1,value:await e}}catch(t){return{isFulfilled:!1,isRejected:!0,reason:t}}};Da.exports=qu;Da.exports.default=qu;var Hb=Da.exports,Ua={exports:{}},Ba={exports:{}};const Hu=(e,...t)=>new Promise(r=>{r(e(...t))});Ba.exports=Hu;Ba.exports.default=Hu;var zb=Ba.exports;const Gb=zb,zu=e=>{if(!((Number.isInteger(e)||e===1/0)&&e>0))return Promise.reject(new TypeError("Expected `concurrency` to be a number from 1 and up"));const t=[];let r=0;const n=()=>{r--,t.length>0&&t.shift()()},a=(s,f,...u)=>{r++;const d=Gb(s,...u);f(d),d.then(n,n)},o=(s,f,...u)=>{rnew Promise(u=>o(s,u,...f));return Object.defineProperties(i,{activeCount:{get:()=>r},pendingCount:{get:()=>t.length},clearQueue:{value:()=>{t.length=0}}}),i};Ua.exports=zu;Ua.exports.default=zu;var Wb=Ua.exports;const Cn=Hb,Vb=Wb;var Kb=async(e,t={})=>{const{concurrency:r=1/0}=t,n=Vb(r);return Promise.all(e.map(a=>a&&typeof a.then=="function"?Cn(a):Cn(typeof a=="function"?n(()=>a()):Promise.resolve(a))))};const Yb=Ub,Jb=qb,Qb=Kb,ia=new WeakMap,Zb=(e,{cachePromiseRejection:t=!1,...r}={})=>{const{maxAge:n,cacheKey:a}=r,o=r.cache||new Map;if(Number.isSafeInteger(n))Jb(o);else if(typeof n<"u")throw new TypeError("maxAge is not a safe integer.");const i=async function(...s){const f=a?a(s):s[0],u=o.get(f);if(u)return u.data;const d=e.apply(this,s);o.set(f,{data:d,maxAge:2**31-1});const[{reason:g}]=await Qb([d]);return!t&&g?o.delete(f):n&&o.set(f,{data:d,maxAge:Date.now()+n}),d};return Yb(i,e),ia.set(i,o),i};ka.exports=Zb;ka.exports.clear=e=>{if(!ia.has(e))throw new Error("Can't clear a function that was not memoized!");const t=ia.get(e);if(typeof t.clear!="function")throw new TypeError("The cache Map can't be cleared!");t.clear()};var Xb=ka.exports;const e2=Pt(Xb);async function t2(e){return Du.ArrayBuffer.hash(await e.arrayBuffer())}async function r2(e){if(!e)return null;const t=await t2(e),r={"image/jpeg":"jpg","image/gif":"gif","image/png":"png","image/x-ms-bmp":"bmp","image/tiff":"tif","application/json":"json"}[e.type];return`${t}.${r}`}async function Dw(e){const t=await Bu.get("/api/file/token",{params:{filename:await r2(e)}});console.log("[getUploadParams] response:",t);const r=n=>(n==null?void 0:n.replace(/^https?:\/\/[^/]+/,""))||n;return{key:t.key,token:t.token,url:r(t.url),uploadUrl:r(t.uploadUrl)}}async function Uw(e,t){console.log("[uploadFile] file:",e==null?void 0:e.name,e==null?void 0:e.size,e==null?void 0:e.type),console.log("[uploadFile] params:",t);const r=new FormData;r.append("file",e);const a=`${t.uploadUrl.replace(/^https?:\/\/[^/]+/,"")}?key=${encodeURIComponent(t.key)}`;console.log("[uploadFile] making fetch to:",a);const o=await fetch(a,{method:"POST",body:r});if(console.log("[uploadFile] response status:",o.status,o.statusText),!o.ok)throw new Error(`Upload failed: ${o.statusText}`);const i=await o.json();return i.data||i}function Bw(e,t=""){return e.lastModifiedDate=new Date,e.name=t,e}function qw(e,t=""){const r=e.split(","),n=r[0].match(/:(.*?);/);if(!n)return null;const a=n[1],o=atob(r[1]);let i=o.length;const s=new Uint8Array(i);for(;i--;)s[i]=o.charCodeAt(i);return new File([s],t,{type:a})}const Hw=e2(()=>Bu.get("/api/file/config")),zw=e=>{if(!e)return e;try{const t=new URL(e,window.location.origin);if(t.pathname.startsWith("/uploads/"))return t.pathname}catch{}return e},Gw=(e,{width:t,height:r})=>{const n=new URL(e);if(n.host==="r.findpiano.cn"&&t||r){const a={[`imageMogr2/format/webp/thumbnail/${t?t*window.devicePixelRatio:""}x${r?r*window.devicePixelRatio:""}`]:"",...Object.fromEntries(n.search.replace("?","").split("&").filter(o=>!o.startsWith("imageMogr2")).map(o=>o.split("=")))};return n.origin+n.pathname+`?${Object.entries(a).map(o=>o.filter(Boolean).join("=")).join("&")}`}return e};function n2(e){return e}var a2=n2,o2=hr,i2=ha,s2=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u2=/^\w*$/;function c2(e,t){if(o2(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||i2(e)?!0:u2.test(e)||!s2.test(e)||t!=null&&e in Object(t)}var l2=c2,Gu=Ty,f2="Expected a function";function qa(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(f2);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],o=r.cache;if(o.has(a))return o.get(a);var i=e.apply(this,n);return r.cache=o.set(a,i)||o,i};return r.cache=new(qa.Cache||Gu),r}qa.Cache=Gu;var d2=qa,p2=d2,h2=500;function v2(e){var t=p2(e,function(n){return r.size===h2&&r.clear(),n}),r=t.cache;return t}var y2=v2,m2=y2,g2=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,b2=/\\(\\)?/g,w2=m2(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(g2,function(r,n,a,o){t.push(a?o.replace(b2,"$1"):n||r)}),t}),S2=w2,C2=hr,x2=l2,E2=S2,_2=Ot;function P2(e,t){return C2(e)?e:x2(e,t)?[e]:E2(_2(e))}var Wu=P2,$2=ha,O2=1/0;function A2(e){if(typeof e=="string"||$2(e))return e;var t=e+"";return t=="0"&&1/e==-O2?"-0":t}var Vu=A2,R2=Wu,T2=Vu;function M2(e,t){t=R2(t,e);for(var r=0,n=t.length;e!=null&&r0){if(++t>=fw)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var vw=hw,yw=lw,mw=vw,gw=mw(yw),Jw=gw;export{Io as $,_e as A,fg as B,xa as C,Nm as D,uc as E,sv as F,kw as G,Hw as H,hp as I,Dw as J,Uw as K,Dp as L,Bw as M,Qs as N,Y as O,Ea as P,qw as Q,jw as R,Zy as S,gr as T,mr as U,br as V,rr as W,Up as X,Nn as Y,Qe as Z,nr as _,ne as a,Xd as a$,Lw as a0,Jp as a1,$t as a2,qc as a3,is as a4,dr as a5,Rr as a6,Dn as a7,_w as a8,hv as a9,t0 as aA,_a as aB,l0 as aC,th as aD,Ow as aE,Nw as aF,ua as aG,Js as aH,Np as aI,fs as aJ,St as aK,Ln as aL,Kr as aM,a2 as aN,Zs as aO,Ww as aP,Vw as aQ,l2 as aR,Vu as aS,tl as aT,Kw as aU,Y2 as aV,Yw as aW,Jw as aX,ns as aY,Sv as aZ,Ap as a_,Rw as aa,yh as ab,mo as ac,ap as ad,Iw as ae,Xe as af,ih as ag,Wp as ah,Kd as ai,bp as aj,Qp as ak,ss as al,Vv as am,M0 as an,Ty as ao,la as ap,fa as aq,Xs as ar,Fw as as,hr as at,da as au,Yy as av,pa as aw,Kc as ax,qy as ay,Wy as az,z as b,cp as b0,Ep as b1,Vh as b2,oh as b3,dv as b4,pv as b5,Un as b6,$w as b7,_h as b8,Ch as b9,cc as bA,Vr as bB,Dc as bC,Vt as bD,Hc as bE,ah as bF,Tw as bG,Ti as bH,Ew as bI,ha as bJ,zp as bK,Wu as bL,Ys as ba,Fn as bb,Du as bc,Wt as bd,Sw as be,jt as bf,Cw as bg,Ei as bh,Va as bi,pc as bj,hc as bk,ze as bl,Pe as bm,On as bn,yc as bo,ue as bp,$n as bq,Wa as br,Pn as bs,dc as bt,vc as bu,bc as bv,Aw as bw,et as bx,xw as by,Nd as bz,Oe as c,Uh as d,Mw as e,$ as f,Qm as g,Jm as h,st as i,cu as j,Ra as k,kr as l,tv as m,zw as n,Pw as o,e2 as p,du as q,Bu as r,km as s,Gw as t,ww as u,og as v,Bn as w,pu as x,dg as y,gu as z}; diff --git a/dist/assets/_setToString-64803aa4.js b/dist/assets/_setToString-64803aa4.js new file mode 100644 index 0000000000000000000000000000000000000000..75e82b0987bbfa42a78f74969ab6c1aff6f4e73e --- /dev/null +++ b/dist/assets/_setToString-64803aa4.js @@ -0,0 +1,75 @@ +import{r as u,g as Sn,c as Fe,R as Lt,o as jt,_ as R,F as mo}from"./umi-6680b95f.js";var go=u.createContext({});const ur=go;function H(e){"@babel/helpers - typeof";return H=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},H(e)}function yo(e,t){if(H(e)!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(H(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function En(e){var t=yo(e,"string");return H(t)=="symbol"?t:t+""}function L(e,t,r){return(t=En(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Mr(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),r.push.apply(r,n)}return r}function b(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r1)&&(e=1),e}function He(e){return e<=1?"".concat(Number(e)*100,"%"):e}function ae(e){return e.length===1?"0"+e:String(e)}function wo(e,t,r){return{r:U(e,255)*255,g:U(t,255)*255,b:U(r,255)*255}}function Or(e,t,r){e=U(e,255),t=U(t,255),r=U(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),o=0,i=0,c=(n+a)/2;if(n===a)i=0,o=0;else{var l=n-a;switch(i=c>.5?l/(2-n-a):l/(n+a),n){case e:o=(t-r)/l+(t1&&(r-=1),r<1/6?e+(t-e)*(6*r):r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function $o(e,t,r){var n,a,o;if(e=U(e,360),t=U(t,100),r=U(r,100),t===0)a=r,o=r,n=r;else{var i=r<.5?r*(1+t):r+t-r*t,c=2*r-i;n=Tt(c,i,e+1/3),a=Tt(c,i,e),o=Tt(c,i,e-1/3)}return{r:n*255,g:a*255,b:o*255}}function Dt(e,t,r){e=U(e,255),t=U(t,255),r=U(r,255);var n=Math.max(e,t,r),a=Math.min(e,t,r),o=0,i=n,c=n-a,l=n===0?0:c/n;if(n===a)o=0;else{switch(n){case e:o=(t-r)/c+(t>16,g:(e&65280)>>8,b:e&255}}var zt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function me(e){var t={r:0,g:0,b:0},r=1,n=null,a=null,o=null,i=!1,c=!1;return typeof e=="string"&&(e=Mo(e)),typeof e=="object"&&(le(e.r)&&le(e.g)&&le(e.b)?(t=wo(e.r,e.g,e.b),i=!0,c=String(e.r).substr(-1)==="%"?"prgb":"rgb"):le(e.h)&&le(e.s)&&le(e.v)?(n=He(e.s),a=He(e.v),t=_o(e.h,n,a),i=!0,c="hsv"):le(e.h)&&le(e.s)&&le(e.l)&&(n=He(e.s),o=He(e.l),t=$o(e.h,n,o),i=!0,c="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(r=e.a)),r=Pn(r),{ok:i,format:e.format||c,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}var Ro="[-\\+]?\\d+%?",Ao="[-\\+]?\\d*\\.\\d+%?",ve="(?:".concat(Ao,")|(?:").concat(Ro,")"),Rt="[\\s|\\(]+(".concat(ve,")[,|\\s]+(").concat(ve,")[,|\\s]+(").concat(ve,")\\s*\\)?"),At="[\\s|\\(]+(".concat(ve,")[,|\\s]+(").concat(ve,")[,|\\s]+(").concat(ve,")[,|\\s]+(").concat(ve,")\\s*\\)?"),re={CSS_UNIT:new RegExp(ve),rgb:new RegExp("rgb"+Rt),rgba:new RegExp("rgba"+At),hsl:new RegExp("hsl"+Rt),hsla:new RegExp("hsla"+At),hsv:new RegExp("hsv"+Rt),hsva:new RegExp("hsva"+At),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function Mo(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;var t=!1;if(zt[e])e=zt[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r=re.rgb.exec(e);return r?{r:r[1],g:r[2],b:r[3]}:(r=re.rgba.exec(e),r?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=re.hsl.exec(e),r?{h:r[1],s:r[2],l:r[3]}:(r=re.hsla.exec(e),r?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=re.hsv.exec(e),r?{h:r[1],s:r[2],v:r[3]}:(r=re.hsva.exec(e),r?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=re.hex8.exec(e),r?{r:Z(r[1]),g:Z(r[2]),b:Z(r[3]),a:kr(r[4]),format:t?"name":"hex8"}:(r=re.hex6.exec(e),r?{r:Z(r[1]),g:Z(r[2]),b:Z(r[3]),format:t?"name":"hex"}:(r=re.hex4.exec(e),r?{r:Z(r[1]+r[1]),g:Z(r[2]+r[2]),b:Z(r[3]+r[3]),a:kr(r[4]+r[4]),format:t?"name":"hex8"}:(r=re.hex3.exec(e),r?{r:Z(r[1]+r[1]),g:Z(r[2]+r[2]),b:Z(r[3]+r[3]),format:t?"name":"hex"}:!1)))))))))}function le(e){return!!re.CSS_UNIT.exec(String(e))}var Be=function(){function e(t,r){t===void 0&&(t=""),r===void 0&&(r={});var n;if(t instanceof e)return t;typeof t=="number"&&(t=To(t)),this.originalInput=t;var a=me(t);this.originalInput=t,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=(n=r.format)!==null&&n!==void 0?n:a.format,this.gradientType=r.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=a.ok}return e.prototype.isDark=function(){return this.getBrightness()<128},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},e.prototype.getLuminance=function(){var t=this.toRgb(),r,n,a,o=t.r/255,i=t.g/255,c=t.b/255;return o<=.03928?r=o/12.92:r=Math.pow((o+.055)/1.055,2.4),i<=.03928?n=i/12.92:n=Math.pow((i+.055)/1.055,2.4),c<=.03928?a=c/12.92:a=Math.pow((c+.055)/1.055,2.4),.2126*r+.7152*n+.0722*a},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(t){return this.a=Pn(t),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){var t=this.toHsl().s;return t===0},e.prototype.toHsv=function(){var t=Dt(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}},e.prototype.toHsvString=function(){var t=Dt(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.v*100);return this.a===1?"hsv(".concat(r,", ").concat(n,"%, ").concat(a,"%)"):"hsva(".concat(r,", ").concat(n,"%, ").concat(a,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var t=Or(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}},e.prototype.toHslString=function(){var t=Or(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),a=Math.round(t.l*100);return this.a===1?"hsl(".concat(r,", ").concat(n,"%, ").concat(a,"%)"):"hsla(".concat(r,", ").concat(n,"%, ").concat(a,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(t){return t===void 0&&(t=!1),Ht(this.r,this.g,this.b,t)},e.prototype.toHexString=function(t){return t===void 0&&(t=!1),"#"+this.toHex(t)},e.prototype.toHex8=function(t){return t===void 0&&(t=!1),Po(this.r,this.g,this.b,this.a,t)},e.prototype.toHex8String=function(t){return t===void 0&&(t=!1),"#"+this.toHex8(t)},e.prototype.toHexShortString=function(t){return t===void 0&&(t=!1),this.a===1?this.toHexString(t):this.toHex8String(t)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var t=Math.round(this.r),r=Math.round(this.g),n=Math.round(this.b);return this.a===1?"rgb(".concat(t,", ").concat(r,", ").concat(n,")"):"rgba(".concat(t,", ").concat(r,", ").concat(n,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var t=function(r){return"".concat(Math.round(U(r,255)*100),"%")};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var t=function(r){return Math.round(U(r,255)*100)};return this.a===1?"rgb(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%)"):"rgba(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var t="#"+Ht(this.r,this.g,this.b,!1),r=0,n=Object.entries(zt);r=0,o=!r&&a&&(t.startsWith("hex")||t==="name");return o?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(n=this.toRgbString()),t==="prgb"&&(n=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(n=this.toHexString()),t==="hex3"&&(n=this.toHexString(!0)),t==="hex4"&&(n=this.toHex8String(!0)),t==="hex8"&&(n=this.toHex8String()),t==="name"&&(n=this.toName()),t==="hsl"&&(n=this.toHslString()),t==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l+=t/100,r.l=De(r.l),new e(r)},e.prototype.brighten=function(t){t===void 0&&(t=10);var r=this.toRgb();return r.r=Math.max(0,Math.min(255,r.r-Math.round(255*-(t/100)))),r.g=Math.max(0,Math.min(255,r.g-Math.round(255*-(t/100)))),r.b=Math.max(0,Math.min(255,r.b-Math.round(255*-(t/100)))),new e(r)},e.prototype.darken=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l-=t/100,r.l=De(r.l),new e(r)},e.prototype.tint=function(t){return t===void 0&&(t=10),this.mix("white",t)},e.prototype.shade=function(t){return t===void 0&&(t=10),this.mix("black",t)},e.prototype.desaturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s-=t/100,r.s=De(r.s),new e(r)},e.prototype.saturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s+=t/100,r.s=De(r.s),new e(r)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var r=this.toHsl(),n=(r.h+t)%360;return r.h=n<0?360+n:n,new e(r)},e.prototype.mix=function(t,r){r===void 0&&(r=50);var n=this.toRgb(),a=new e(t).toRgb(),o=r/100,i={r:(a.r-n.r)*o+n.r,g:(a.g-n.g)*o+n.g,b:(a.b-n.b)*o+n.b,a:(a.a-n.a)*o+n.a};return new e(i)},e.prototype.analogous=function(t,r){t===void 0&&(t=6),r===void 0&&(r=30);var n=this.toHsl(),a=360/r,o=[this];for(n.h=(n.h-(a*t>>1)+720)%360;--t;)n.h=(n.h+a)%360,o.push(new e(n));return o},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){t===void 0&&(t=6);for(var r=this.toHsv(),n=r.h,a=r.s,o=r.v,i=[],c=1/t;t--;)i.push(new e({h:n,s:a,v:o})),o=(o+c)%1;return i},e.prototype.splitcomplement=function(){var t=this.toHsl(),r=t.h;return[this,new e({h:(r+72)%360,s:t.s,l:t.l}),new e({h:(r+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var r=this.toRgb(),n=new e(t).toRgb(),a=r.a+n.a*(1-r.a);return new e({r:(r.r*r.a+n.r*n.a*(1-r.a))/a,g:(r.g*r.a+n.g*n.a*(1-r.a))/a,b:(r.b*r.a+n.b*n.a*(1-r.a))/a,a})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var r=this.toHsl(),n=r.h,a=[this],o=360/t,i=1;i=60&&Math.round(e.h)<=240?n=r?Math.round(e.h)-ze*t:Math.round(e.h)+ze*t:n=r?Math.round(e.h)+ze*t:Math.round(e.h)-ze*t,n<0?n+=360:n>=360&&(n-=360),n}function jr(e,t,r){if(e.h===0&&e.s===0)return e.s;var n;return r?n=e.s-Nr*t:t===An?n=e.s+Nr:n=e.s+Oo*t,n>1&&(n=1),r&&t===Rn&&n>.1&&(n=.1),n<.06&&(n=.06),Number(n.toFixed(2))}function Fr(e,t,r){var n;return r?n=e.v+ko*t:n=e.v-No*t,n>1&&(n=1),Number(n.toFixed(2))}function xe(e){for(var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=[],n=me(e),a=Rn;a>0;a-=1){var o=Ir(n),i=Ue(me({h:Lr(o,a,!0),s:jr(o,a,!0),v:Fr(o,a,!0)}));r.push(i)}r.push(Ue(n));for(var c=1;c<=An;c+=1){var l=Ir(n),s=Ue(me({h:Lr(l,c),s:jr(l,c),v:Fr(l,c)}));r.push(s)}return t.theme==="dark"?Io.map(function(f){var v=f.index,h=f.opacity,m=Ue(Lo(me(t.backgroundColor||"#141414"),me(r[v]),h*100));return m}):r}var Ye={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},V={},qe={};Object.keys(Ye).forEach(function(e){V[e]=xe(Ye[e]),V[e].primary=V[e][5],qe[e]=xe(Ye[e],{theme:"dark",backgroundColor:"#141414"}),qe[e].primary=qe[e][5]});var jo=V.red,Fo=V.volcano,Do=V.gold,Ho=V.orange,zo=V.yellow,Uo=V.lime,Vo=V.green,Go=V.cyan,Ko=V.blue,Wo=V.geekblue,Bo=V.purple,Yo=V.magenta,qo=V.grey;const Ph=Object.freeze(Object.defineProperty({__proto__:null,blue:Ko,cyan:Go,geekblue:Wo,generate:xe,gold:Do,green:Vo,grey:qo,lime:Uo,magenta:Yo,orange:Ho,presetDarkPalettes:qe,presetPalettes:V,presetPrimaryColors:Ye,purple:Bo,red:jo,volcano:Fo,yellow:zo},Symbol.toStringTag,{value:"Module"}));var Ut={},Zo=function(t){};function Qo(e,t){}function Jo(e,t){}function Xo(){Ut={}}function Mn(e,t,r){!t&&!Ut[r]&&(e(!1,r),Ut[r]=!0)}function rt(e,t){Mn(Qo,e,t)}function ei(e,t){Mn(Jo,e,t)}rt.preMessage=Zo;rt.resetWarned=Xo;rt.noteOnce=ei;function ke(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}function ti(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var r=t;r;){if(r===e)return!0;r=r.parentNode}return!1}var Dr="data-rc-order",Hr="data-rc-priority",ri="rc-util-key",Vt=new Map;function On(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=e.mark;return t?t.startsWith("data-")?t:"data-".concat(t):ri}function nt(e){if(e.attachTo)return e.attachTo;var t=document.querySelector("head");return t||document.body}function ni(e){return e==="queue"?"prependQueue":e?"prepend":"append"}function fr(e){return Array.from((Vt.get(e)||e).children).filter(function(t){return t.tagName==="STYLE"})}function kn(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!ke())return null;var r=t.csp,n=t.prepend,a=t.priority,o=a===void 0?0:a,i=ni(n),c=i==="prependQueue",l=document.createElement("style");l.setAttribute(Dr,i),c&&o&&l.setAttribute(Hr,"".concat(o)),r!=null&&r.nonce&&(l.nonce=r==null?void 0:r.nonce),l.innerHTML=e;var s=nt(t),f=s.firstChild;if(n){if(c){var v=(t.styles||fr(s)).filter(function(h){if(!["prepend","prependQueue"].includes(h.getAttribute(Dr)))return!1;var m=Number(h.getAttribute(Hr)||0);return o>=m});if(v.length)return s.insertBefore(l,v[v.length-1].nextSibling),l}s.insertBefore(l,f)}else s.appendChild(l);return l}function Nn(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=nt(t);return(t.styles||fr(r)).find(function(n){return n.getAttribute(On(t))===e})}function Th(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=Nn(e,t);if(r){var n=nt(t);n.removeChild(r)}}function ai(e,t){var r=Vt.get(e);if(!r||!ti(document,r)){var n=kn("",t),a=n.parentNode;Vt.set(e,a),e.removeChild(n)}}function In(e,t){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=nt(r),a=fr(n),o=b(b({},r),{},{styles:a});ai(n,o);var i=Nn(t,o);if(i){var c,l;if((c=o.csp)!==null&&c!==void 0&&c.nonce&&i.nonce!==((l=o.csp)===null||l===void 0?void 0:l.nonce)){var s;i.nonce=(s=o.csp)===null||s===void 0?void 0:s.nonce}return i.innerHTML!==e&&(i.innerHTML=e),i}var f=kn(e,o);return f.setAttribute(On(o),t),f}var oi=typeof Fe=="object"&&Fe&&Fe.Object===Object&&Fe,ii=oi,ci=ii,si=typeof self=="object"&&self&&self.Object===Object&&self,ui=ci||si||Function("return this")(),dr=ui,li=dr,fi=li.Symbol,vr=fi;function di(e,t){for(var r=-1,n=e==null?0:e.length,a=Array(n);++ra?0:a+t),r=r>a?a:r,r<0&&(r+=a),a=t>r?0:r-t>>>0,t>>>=0;for(var o=Array(a);++n=n?e:Ui(e,t,r)}var Gi=Vi,Ki="\\ud800-\\udfff",Wi="\\u0300-\\u036f",Bi="\\ufe20-\\ufe2f",Yi="\\u20d0-\\u20ff",qi=Wi+Bi+Yi,Zi="\\ufe0e\\ufe0f",Qi="\\u200d",Ji=RegExp("["+Qi+Ki+qi+Zi+"]");function Xi(e){return Ji.test(e)}var Fn=Xi;function ec(e){return e.split("")}var tc=ec,Dn="\\ud800-\\udfff",rc="\\u0300-\\u036f",nc="\\ufe20-\\ufe2f",ac="\\u20d0-\\u20ff",oc=rc+nc+ac,ic="\\ufe0e\\ufe0f",cc="["+Dn+"]",Gt="["+oc+"]",Kt="\\ud83c[\\udffb-\\udfff]",sc="(?:"+Gt+"|"+Kt+")",Hn="[^"+Dn+"]",zn="(?:\\ud83c[\\udde6-\\uddff]){2}",Un="[\\ud800-\\udbff][\\udc00-\\udfff]",uc="\\u200d",Vn=sc+"?",Gn="["+ic+"]?",lc="(?:"+uc+"(?:"+[Hn,zn,Un].join("|")+")"+Gn+Vn+")*",fc=Gn+Vn+lc,dc="(?:"+[Hn+Gt+"?",Gt,zn,Un,cc].join("|")+")",vc=RegExp(Kt+"(?="+Kt+")|"+dc+fc,"g");function hc(e){return e.match(vc)||[]}var pc=hc,mc=tc,gc=Fn,yc=pc;function bc(e){return gc(e)?yc(e):mc(e)}var Cc=bc,xc=Gi,Sc=Fn,Ec=Cc,wc=Ne;function $c(e){return function(t){t=wc(t);var r=Sc(t)?Ec(t):void 0,n=r?r[0]:t.charAt(0),a=r?xc(r,1).join(""):t.slice(1);return n[e]()+a}}var _c=$c,Pc=_c,Tc=Pc("toUpperCase"),Rc=Tc,Ac=Ne,Mc=Rc;function Oc(e){return Mc(Ac(e).toLowerCase())}var kc=Oc;function Nc(e,t,r,n){var a=-1,o=e==null?0:e.length;for(n&&o&&(r=e[++a]);++a0&&arguments[0]!==void 0?arguments[0]:{};return Object.keys(e).reduce(function(t,r){var n=e[r];switch(r){case"class":t.className=n,delete t.class;break;default:delete t[r],t[Ws(r)]=n}return t},{})}function Wt(e,t,r){return r?Lt.createElement(e.tag,b(b({key:t},Jr(e.attrs)),r),(e.children||[]).map(function(n,a){return Wt(n,"".concat(t,"-").concat(e.tag,"-").concat(a))})):Lt.createElement(e.tag,b({key:t},Jr(e.attrs)),(e.children||[]).map(function(n,a){return Wt(n,"".concat(t,"-").concat(e.tag,"-").concat(a))}))}function aa(e){return xe(e)[0]}function oa(e){return e?Array.isArray(e)?e:[e]:[]}var Ys=` +.anticon { + display: inline-flex; + alignItems: center; + color: inherit; + font-style: normal; + line-height: 0; + text-align: center; + text-transform: none; + vertical-align: -0.125em; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon > * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`,qs=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Ys,r=u.useContext(ur),n=r.csp;u.useEffect(function(){In(t,"@ant-design-icons",{prepend:!0,csp:n})},[])},Zs=["icon","className","onClick","style","primaryColor","secondaryColor"],Ae={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};function Qs(e){var t=e.primaryColor,r=e.secondaryColor;Ae.primaryColor=t,Ae.secondaryColor=r||aa(t),Ae.calculated=!!r}function Js(){return b({},Ae)}var ot=function(t){var r=t.icon,n=t.className,a=t.onClick,o=t.style,i=t.primaryColor,c=t.secondaryColor,l=Ce(t,Zs),s=Ae;if(i&&(s={primaryColor:i,secondaryColor:c||aa(i)}),qs(),Bs(Qr(r),"icon should be icon definiton, but got ".concat(r)),!Qr(r))return null;var f=r;return f&&typeof f.icon=="function"&&(f=b(b({},f),{},{icon:f.icon(s.primaryColor,s.secondaryColor)})),Wt(f.icon,"svg-".concat(f.name),b({className:n,onClick:a,style:o,"data-icon":f.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},l))};ot.displayName="IconReact";ot.getTwoToneColors=Js;ot.setTwoToneColors=Qs;const gr=ot;function ia(e){var t=oa(e),r=K(t,2),n=r[0],a=r[1];return gr.setTwoToneColors({primaryColor:n,secondaryColor:a})}function Xs(){var e=gr.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor}var eu=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];ia("#1890ff");var it=u.forwardRef(function(e,t){var r=e.className,n=e.icon,a=e.spin,o=e.rotate,i=e.tabIndex,c=e.onClick,l=e.twoToneColor,s=Ce(e,eu),f=u.useContext(ur),v=f.prefixCls,h=v===void 0?"anticon":v,m=f.rootClassName,g=fe(m,h,L(L({},"".concat(h,"-").concat(n.name),!!n.name),"".concat(h,"-spin"),!!a||n.name==="loading"),r),S=i;S===void 0&&c&&(S=-1);var E=o?{msTransform:"rotate(".concat(o,"deg)"),transform:"rotate(".concat(o,"deg)")}:void 0,$=oa(l),w=K($,2),M=w[0],A=w[1];return u.createElement("span",b(b({role:"img","aria-label":n.name},s),{},{ref:t,tabIndex:S,onClick:c,className:g}),u.createElement(gr,{icon:n,primaryColor:M,secondaryColor:A,style:E}))});it.displayName="AntdIcon";it.getTwoToneColor=Xs;it.setTwoToneColor=ia;const se=it;var tu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"};const ru=tu;var nu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:ru}))},au=u.forwardRef(nu);const ou=au;var iu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};const cu=iu;var su=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:cu}))},uu=u.forwardRef(su);const lu=uu;var fu={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"};const du=fu;var vu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:du}))},hu=u.forwardRef(vu);const pu=hu;var mu={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"};const gu=mu;var yu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:gu}))},bu=u.forwardRef(yu);const Cu=bu;var xu={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"};const Su=xu;var Eu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:Su}))},wu=u.forwardRef(Eu);const $u=wu;var _u={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"};const Pu=_u;var Tu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:Pu}))},Ru=u.forwardRef(Tu);const Au=Ru;var Mu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};const Ou=Mu;var ku=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:Ou}))},Nu=u.forwardRef(ku);const Iu=Nu;var Lu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"};const ju=Lu;var Fu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:ju}))},Du=u.forwardRef(Fu);const Hu=Du;var zu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z"}}]},name:"info-circle",theme:"outlined"};const Uu=zu;var Vu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:Uu}))},Gu=u.forwardRef(Vu);const Ku=Gu;var Wu={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};const Bu=Wu;var Yu=function(t,r){return u.createElement(se,b(b({},t),{},{ref:r,icon:Bu}))},qu=u.forwardRef(Yu);const Zu=qu;function ct(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Xr(e,t){for(var r=0;r=19)return!0;var a=Mt.isMemo(t)?t.type.type:t.type;return!(typeof a=="function"&&!((r=a.prototype)!==null&&r!==void 0&&r.render)&&a.$$typeof!==Mt.ForwardRef||typeof t=="function"&&!((n=t.prototype)!==null&&n!==void 0&&n.render)&&t.$$typeof!==Mt.ForwardRef)};function ul(e){return u.isValidElement(e)&&!tl(e)}function Ct(e){var t=ca();return function(){var r,n=Je(e);if(t){var a=Je(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return Qu(this,r)}}function Ah(e,t){var r=Object.assign({},e);return Array.isArray(t)&&t.forEach(function(n){delete r[n]}),r}function ll(e){if(Array.isArray(e))return Ft(e)}function da(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function fl(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Xe(e){return ll(e)||da(e)||lr(e)||fl()}function dl(e){return wn(e)||da(e)||lr(e)||$n()}function qt(e,t){for(var r=e,n=0;n3&&arguments[3]!==void 0?arguments[3]:!1;return t.length&&n&&r===void 0&&!qt(e,t.slice(0,-1))?e:va(e,t,r,n)}function vl(e){return H(e)==="object"&&e!==null&&Object.getPrototypeOf(e)===Object.prototype}function tn(e){return Array.isArray(e)?[]:{}}var hl=typeof Reflect>"u"?Object.keys:Reflect.ownKeys;function pl(){for(var e=arguments.length,t=new Array(e),r=0;r=0;--_){var C=this.tryEntries[_],N=C.completion;if(C.tryLoc==="root")return x("end");if(C.tryLoc<=this.prev){var F=n.call(C,"catchLoc"),D=n.call(C,"finallyLoc");if(F&&D){if(this.prev=0;--x){var _=this.tryEntries[x];if(_.tryLoc<=this.prev&&n.call(_,"finallyLoc")&&this.prev<_.finallyLoc){var C=_;break}}C&&(d==="break"||d==="continue")&&C.tryLoc<=p&&p<=C.finallyLoc&&(C=null);var N=C?C.completion:{};return N.type=d,N.arg=p,C?(this.method="next",this.next=C.finallyLoc,E):this.complete(N)},complete:function(d,p){if(d.type==="throw")throw d.arg;return d.type==="break"||d.type==="continue"?this.next=d.arg:d.type==="return"?(this.rval=this.arg=d.arg,this.method="return",this.next="end"):d.type==="normal"&&p&&(this.next=p),E},finish:function(d){for(var p=this.tryEntries.length-1;p>=0;--p){var x=this.tryEntries[p];if(x.finallyLoc===d)return this.complete(x.completion,x.afterLoc),z(x),E}},catch:function(d){for(var p=this.tryEntries.length-1;p>=0;--p){var x=this.tryEntries[p];if(x.tryLoc===d){var _=x.completion;if(_.type==="throw"){var C=_.arg;z(x)}return C}}throw Error("illegal catch attempt")},delegateYield:function(d,p,x){return this.delegate={iterator:Q(d),resultName:p,nextLoc:x},this.method==="next"&&(this.arg=e),E}},t}function an(e,t,r,n,a,o,i){try{var c=e[o](i),l=c.value}catch(s){return void r(s)}c.done?t(l):Promise.resolve(l).then(n,a)}function pa(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var o=e.apply(t,r);function i(l){an(o,n,a,i,c,"next",l)}function c(l){an(o,n,a,i,c,"throw",l)}i(void 0)})}}var Ie=b({},mo),Tl=Ie.version,kt=Ie.render,Rl=Ie.unmountComponentAtNode,xt;try{var Al=Number((Tl||"").split(".")[0]);Al>=18&&(xt=Ie.createRoot)}catch{}function on(e){var t=Ie.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&H(t)==="object"&&(t.usingClientEntryPoint=e)}var et="__rc_react_root__";function Ml(e,t){on(!0);var r=t[et]||xt(t);on(!1),r.render(e),t[et]=r}function Ol(e,t){kt==null||kt(e,t)}function kl(e,t){if(xt){Ml(e,t);return}Ol(e,t)}function Nl(e){return Zt.apply(this,arguments)}function Zt(){return Zt=pa(Me().mark(function e(t){return Me().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",Promise.resolve().then(function(){var a;(a=t[et])===null||a===void 0||a.unmount(),delete t[et]}));case 1:case"end":return n.stop()}},e)})),Zt.apply(this,arguments)}function Il(e){Rl(e)}function Ll(e){return Qt.apply(this,arguments)}function Qt(){return Qt=pa(Me().mark(function e(t){return Me().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(xt===void 0){n.next=2;break}return n.abrupt("return",Nl(t));case 2:Il(t);case 3:case"end":return n.stop()}},e)})),Qt.apply(this,arguments)}var jl=["children"],ma=u.createContext({});function kh(e){var t=e.children,r=Ce(e,jl);return u.createElement(ma.Provider,{value:r},t)}var Fl=function(e){ut(r,e);var t=Ct(r);function r(){return ct(this,r),t.apply(this,arguments)}return st(r,[{key:"render",value:function(){return this.props.children}}]),r}(u.Component);function Jt(e){var t=u.useRef();t.current=e;var r=u.useCallback(function(){for(var n,a=arguments.length,o=new Array(a),i=0;i1&&arguments[1]!==void 0?arguments[1]:1;dn+=1;var n=dn;function a(o){if(o===0)_a(n),t();else{var i=wa(function(){a(o-1)});Sr.set(n,i)}}return a(r),n};er.cancel=function(e){var t=Sr.get(e);return _a(e),$a(t)};const Gl=function(){var e=u.useRef(null);function t(){er.cancel(e.current)}function r(n){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:2;t();var o=er(function(){a<=1?n({isCanceled:function(){return o!==e.current}}):r(n,a-1)});e.current=o}return u.useEffect(function(){return function(){t()}},[]),[r,t]};var Kl=[ne,ye,be,xr],Wl=[ne,ga],Pa=!1,Bl=!0;function Ta(e){return e===be||e===xr}const Yl=function(e,t,r){var n=Xt(cn),a=K(n,2),o=a[0],i=a[1],c=Gl(),l=K(c,2),s=l[0],f=l[1];function v(){i(ne,!0)}var h=t?Wl:Kl;return Ea(function(){if(o!==cn&&o!==xr){var m=h.indexOf(o),g=h[m+1],S=r(o);S===Pa?i(g,!0):g&&s(function(E){function $(){E.isCanceled()||i(g,!0)}S===!0?$():Promise.resolve(S).then($)})}},[e,o]),u.useEffect(function(){return function(){f()}},[]),[v,o]};function ql(e,t,r,n){var a=n.motionEnter,o=a===void 0?!0:a,i=n.motionAppear,c=i===void 0?!0:i,l=n.motionLeave,s=l===void 0?!0:l,f=n.motionDeadline,v=n.motionLeaveImmediately,h=n.onAppearPrepare,m=n.onEnterPrepare,g=n.onLeavePrepare,S=n.onAppearStart,E=n.onEnterStart,$=n.onLeaveStart,w=n.onAppearActive,M=n.onEnterActive,A=n.onLeaveActive,k=n.onAppearEnd,P=n.onEnterEnd,T=n.onLeaveEnd,I=n.onVisibleChanged,j=Xt(),X=K(j,2),B=X[0],ue=X[1],z=Dl(de),ee=K(z,2),Q=ee[0],y=ee[1],d=Xt(null),p=K(d,2),x=p[0],_=p[1],C=Q(),N=u.useRef(!1),F=u.useRef(null);function D(){return r()}var oe=u.useRef(!1);function te(){y(de),_(null,!0)}var ie=Jt(function(Y){var G=Q();if(G!==de){var ce=D();if(!(Y&&!Y.deadline&&Y.target!==ce)){var Le=oe.current,je;G===Ve&&Le?je=k==null?void 0:k(ce,Y):G===Ge&&Le?je=P==null?void 0:P(ce,Y):G===Ke&&Le&&(je=T==null?void 0:T(ce,Y)),Le&&je!==!1&&te()}}}),uo=Vl(ie),lo=K(uo,1),fo=lo[0],Rr=function(G){switch(G){case Ve:return L(L(L({},ne,h),ye,S),be,w);case Ge:return L(L(L({},ne,m),ye,E),be,M);case Ke:return L(L(L({},ne,g),ye,$),be,A);default:return{}}},Te=u.useMemo(function(){return Rr(C)},[C]),vo=Yl(C,!e,function(Y){if(Y===ne){var G=Te[ne];return G?G(D()):Pa}if(he in Te){var ce;_(((ce=Te[he])===null||ce===void 0?void 0:ce.call(Te,D(),null))||null)}return he===be&&C!==de&&(fo(D()),f>0&&(clearTimeout(F.current),F.current=setTimeout(function(){ie({deadline:!0})},f))),he===ga&&te(),Bl}),Ar=K(vo,2),ho=Ar[0],he=Ar[1],po=Ta(he);oe.current=po,Ea(function(){ue(t);var Y=N.current;N.current=!0;var G;!Y&&t&&c&&(G=Ve),Y&&t&&o&&(G=Ge),(Y&&!t&&s||!Y&&v&&!t&&s)&&(G=Ke);var ce=Rr(G);G&&(e||ce[ne])?(y(G),ho()):y(de)},[t]),u.useEffect(function(){(C===Ve&&!c||C===Ge&&!o||C===Ke&&!s)&&y(de)},[c,o,s]),u.useEffect(function(){return function(){N.current=!1,clearTimeout(F.current)}},[]);var _t=u.useRef(!1);u.useEffect(function(){B&&(_t.current=!0),B!==void 0&&C===de&&((_t.current||B)&&(I==null||I(B)),_t.current=!0)},[B,C]);var Pt=x;return Te[ne]&&he===ye&&(Pt=b({transition:"none"},Pt)),[C,he,Pt,B??t]}function Zl(e){var t=e;H(e)==="object"&&(t=e.transitionSupport);function r(a,o){return!!(a.motionName&&t&&o!==!1)}var n=u.forwardRef(function(a,o){var i=a.visible,c=i===void 0?!0:i,l=a.removeOnLeave,s=l===void 0?!0:l,f=a.forceRender,v=a.children,h=a.motionName,m=a.leavedClassName,g=a.eventProps,S=u.useContext(ma),E=S.motion,$=r(a,E),w=u.useRef(),M=u.useRef();function A(){try{return w.current instanceof HTMLElement?w.current:nl(M.current)}catch{return null}}var k=ql($,c,A,a),P=K(k,4),T=P[0],I=P[1],j=P[2],X=P[3],B=u.useRef(X);X&&(B.current=!0);var ue=u.useCallback(function(x){w.current=x,fa(o,x)},[o]),z,ee=b(b({},g),{},{visible:c});if(!v)z=null;else if(T===de)X?z=v(b({},ee),ue):!s&&B.current&&m?z=v(b(b({},ee),{},{className:m}),ue):f||!s&&!m?z=v(b(b({},ee),{},{style:{display:"none"}}),ue):z=null;else{var Q;I===ne?Q="prepare":Ta(I)?Q="active":I===ye&&(Q="start");var y=fn(h,"".concat(T,"-").concat(Q));z=v(b(b({},ee),{},{className:fe(fn(h,T),L(L({},y,y&&Q),h,typeof h=="string")),style:j}),ue)}if(u.isValidElement(z)&&sl(z)){var d=z,p=d.ref;p||(z=u.cloneElement(z,{ref:ue}))}return u.createElement(Fl,{ref:M},z)});return n.displayName="CSSMotion",n}const Ql=Zl(Sa);var tr="add",rr="keep",nr="remove",Nt="removed";function Jl(e){var t;return e&&H(e)==="object"&&"key"in e?t=e:t={key:e},b(b({},t),{},{key:String(t.key)})}function ar(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return e.map(Jl)}function Xl(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=[],n=0,a=t.length,o=ar(e),i=ar(t);o.forEach(function(s){for(var f=!1,v=n;v1});return l.forEach(function(s){r=r.filter(function(f){var v=f.key,h=f.status;return v!==s||h!==nr}),r.forEach(function(f){f.key===s&&(f.status=rr)})}),r}var ef=["component","children","onVisibleChanged","onAllRemoved"],tf=["status"],rf=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"];function nf(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ql,r=function(n){ut(o,n);var a=Ct(o);function o(){var i;ct(this,o);for(var c=arguments.length,l=new Array(c),s=0;s=h&&(v.key=E[0].notice.key,v.updateMark=hn(),v.userPassKey=f,E.shift()),E.push({notice:v,holderCallback:l})),{notices:E}})},n.remove=function(c){n.setState(function(l){var s=l.notices;return{notices:s.filter(function(f){var v=f.notice,h=v.key,m=v.userPassKey,g=m??h;return g!==c})}})},n.noticePropsMap={},n}return st(r,[{key:"getTransitionName",value:function(){var a=this.props,o=a.prefixCls,i=a.animation,c=this.props.transitionName;return!c&&i&&(c="".concat(o,"-").concat(i)),c}},{key:"render",value:function(){var a=this,o=this.state.notices,i=this.props,c=i.prefixCls,l=i.className,s=i.closeIcon,f=i.style,v=[];return o.forEach(function(h,m){var g=h.notice,S=h.holderCallback,E=m===o.length-1?g.updateMark:void 0,$=g.key,w=g.userPassKey,M=b(b(b({prefixCls:c,closeIcon:s},g),g.props),{},{key:$,noticeKey:w||$,updateMark:E,onClose:function(k){var P;a.remove(k),(P=g.onClose)===null||P===void 0||P.call(g)},onClick:g.onClick,children:g.content});v.push($),a.noticePropsMap[$]={props:M,holderCallback:S}}),u.createElement("div",{className:fe(c,l),style:f},u.createElement(af,{keys:v,motionName:this.getTransitionName(),onVisibleChanged:function(m,g){var S=g.key;m||delete a.noticePropsMap[S]}},function(h){var m=h.key,g=h.className,S=h.style,E=h.visible,$=a.noticePropsMap[m],w=$.props,M=$.holderCallback;return M?u.createElement("div",{key:m,className:fe(g,"".concat(c,"-hook-holder")),style:b({},S),ref:function(k){typeof m>"u"||(k?(a.hookRefs.set(m,k),M(k,w)):a.hookRefs.delete(m))}}):u.createElement(Er,R({},w,{className:fe(g,w==null?void 0:w.className),style:b(b({},S),w==null?void 0:w.style),visible:E}))}))}}]),r}(u.Component);Ee.newInstance=void 0;Ee.defaultProps={prefixCls:"rc-notification",animation:"fade",style:{top:65,left:"50%"}};Ee.newInstance=function(t,r){var n=t||{},a=n.getContainer,o=Ce(n,of),i=document.createElement("div");if(a){var c=a();c.appendChild(i)}else document.body.appendChild(i);var l=!1;function s(f){l||(l=!0,r({notice:function(h){f.add(h)},removeNotice:function(h){f.remove(h)},component:f,destroy:function(){Ll(i),i.parentNode&&i.parentNode.removeChild(i)},useNotification:function(){return wr(f)}}))}kl(u.createElement(Ee,R({},o,{ref:s})),i)};function sf(e,t){var r=function(){var a,o,i=null,c={add:function(S,E){i==null||i.component.add(S,E)}},l=wr(c),s=K(l,2),f=s[0],v=s[1];function h(g){var S=g.prefixCls,E=a("message",S),$=a(),w=g.key||La(),M=new Promise(function(k){var P=function(){return typeof g.onClose=="function"&&g.onClose(),k(!0)};e(R(R({},g),{prefixCls:E,rootPrefixCls:$,getPopupContainer:o}),function(T){var I=T.prefixCls,j=T.instance;i=j,f(t(R(R({},g),{key:w,onClose:P}),I))})}),A=function(){i&&i.removeNotice(w)};return A.then=function(k,P){return M.then(k,P)},A.promise=M,A}var m=u.useRef({});return m.current.open=h,Da.forEach(function(g){return za(m.current,g)}),[m.current,u.createElement(_r,{key:"holder"},function(g){return a=g.getPrefixCls,o=g.getPopupContainer,v})]};return r}var W,Ra=3,Aa,uf=1,Ma="",or="move-up",Oa=!1,ka,Na,Ia=!1;function La(){return uf++}function lf(e){e.top!==void 0&&(Aa=e.top,W=null),e.duration!==void 0&&(Ra=e.duration),e.prefixCls!==void 0&&(Ma=e.prefixCls),e.getContainer!==void 0&&(ka=e.getContainer,W=null),e.transitionName!==void 0&&(or=e.transitionName,W=null,Oa=!0),e.maxCount!==void 0&&(Na=e.maxCount,W=null),e.rtl!==void 0&&(Ia=e.rtl)}function ja(e,t){var r=e.prefixCls,n=e.getPopupContainer,a=Xa(),o=a.getPrefixCls,i=a.getRootPrefixCls,c=a.getIconPrefixCls,l=o("message",r||Ma),s=i(e.rootPrefixCls,l),f=c();if(W){t({prefixCls:l,rootPrefixCls:s,iconPrefixCls:f,instance:W});return}var v={prefixCls:l,transitionName:Oa?or:"".concat(s,"-").concat(or),style:{top:Aa},getContainer:ka||n,maxCount:Na};Ee.newInstance(v,function(h){if(W){t({prefixCls:l,rootPrefixCls:s,iconPrefixCls:f,instance:W});return}W=h,t({prefixCls:l,rootPrefixCls:s,iconPrefixCls:f,instance:h})})}var Fa={info:Hu,success:ou,error:pu,warning:Au,loading:Zu},Da=Object.keys(Fa);function Ha(e,t,r){var n=e.duration!==void 0?e.duration:Ra,a=Fa[e.type],o=fe("".concat(t,"-custom-content"),L(L({},"".concat(t,"-").concat(e.type),e.type),"".concat(t,"-rtl"),Ia===!0));return{key:e.key,duration:n,style:e.style||{},className:e.className,content:u.createElement(eo,{iconPrefixCls:r},u.createElement("div",{className:o},e.icon||a&&u.createElement(a,null),u.createElement("span",null,e.content))),onClose:e.onClose,onClick:e.onClick}}function ff(e){var t=e.key||La(),r=new Promise(function(a){var o=function(){return typeof e.onClose=="function"&&e.onClose(),a(!0)};ja(e,function(i){var c=i.prefixCls,l=i.iconPrefixCls,s=i.instance;s.notice(Ha(R(R({},e),{key:t,onClose:o}),c,l))})}),n=function(){var o;W&&(W.removeNotice(t),(o=e.onClose)===null||o===void 0||o.call(e))};return n.then=function(a,o){return r.then(a,o)},n.promise=r,n}function df(e){return Object.prototype.toString.call(e)==="[object Object]"&&!!e.content}var Oe={open:ff,config:lf,destroy:function(t){if(W)if(t){var r=W,n=r.removeNotice;n(t)}else{var a=W,o=a.destroy;o(),W=null}}};function za(e,t){e[t]=function(r,n,a){return df(r)?e.open(R(R({},r),{type:t})):(typeof n=="function"&&(a=n,n=void 0),e.open({content:r,duration:n,type:t,onClose:a}))}}Da.forEach(function(e){return za(Oe,e)});Oe.warn=Oe.warning;Oe.useMessage=sf(ja,Ha);const vf=Oe;function hf(e,t){var r=function(){var a,o=null,i={add:function(g,S){o==null||o.component.add(g,S)}},c=wr(i),l=K(c,2),s=l[0],f=l[1];function v(m){var g=m.prefixCls,S=a("notification",g);e(R(R({},m),{prefixCls:S}),function(E){var $=E.prefixCls,w=E.instance;o=w,s(t(m,$))})}var h=u.useRef({});return h.current.open=v,["success","info","warning","error"].forEach(function(m){h.current[m]=function(g){return h.current.open(R(R({},g),{type:m}))}}),[h.current,u.createElement(_r,{key:"holder"},function(m){return a=m.getPrefixCls,f})]};return r}globalThis&&globalThis.__awaiter;var pe={},Ua=4.5,Va=24,Ga=24,Ka="",ir="topRight",Wa,Ba,Ya=!1,qa;function pf(e){var t=e.duration,r=e.placement,n=e.bottom,a=e.top,o=e.getContainer,i=e.closeIcon,c=e.prefixCls;c!==void 0&&(Ka=c),t!==void 0&&(Ua=t),r!==void 0?ir=r:e.rtl&&(ir="topLeft"),n!==void 0&&(Ga=n),a!==void 0&&(Va=a),o!==void 0&&(Wa=o),i!==void 0&&(Ba=i),e.rtl!==void 0&&(Ya=e.rtl),e.maxCount!==void 0&&(qa=e.maxCount)}function mf(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Va,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ga,n;switch(e){case"top":n={left:"50%",transform:"translateX(-50%)",right:"auto",top:t,bottom:"auto"};break;case"topLeft":n={left:0,top:t,bottom:"auto"};break;case"topRight":n={right:0,top:t,bottom:"auto"};break;case"bottom":n={left:"50%",transform:"translateX(-50%)",right:"auto",top:"auto",bottom:r};break;case"bottomLeft":n={left:0,top:"auto",bottom:r};break;default:n={right:0,top:"auto",bottom:r};break}return n}function Za(e,t){var r=e.placement,n=r===void 0?ir:r,a=e.top,o=e.bottom,i=e.getContainer,c=i===void 0?Wa:i,l=e.prefixCls,s=Xa(),f=s.getPrefixCls,v=s.getIconPrefixCls,h=f("notification",l||Ka),m=v(),g="".concat(h,"-").concat(n),S=pe[g];if(S){Promise.resolve(S).then(function($){t({prefixCls:"".concat(h,"-notice"),iconPrefixCls:m,instance:$})});return}var E=fe("".concat(h,"-").concat(n),L({},"".concat(h,"-rtl"),Ya===!0));pe[g]=new Promise(function($){Ee.newInstance({prefixCls:h,className:E,style:mf(n,a,o),getContainer:c,maxCount:qa},function(w){$(w),t({prefixCls:"".concat(h,"-notice"),iconPrefixCls:m,instance:w})})})}var gf={success:lu,info:Ku,error:Cu,warning:Iu};function Qa(e,t,r){var n=e.duration,a=e.icon,o=e.type,i=e.description,c=e.message,l=e.btn,s=e.onClose,f=e.onClick,v=e.key,h=e.style,m=e.className,g=e.closeIcon,S=g===void 0?Ba:g,E=e.props,$=n===void 0?Ua:n,w=null;a?w=u.createElement("span",{className:"".concat(t,"-icon")},e.icon):o&&(w=u.createElement(gf[o]||null,{className:"".concat(t,"-icon ").concat(t,"-icon-").concat(o)}));var M=typeof S>"u"?u.createElement("span",{className:"".concat(t,"-close-x")},u.createElement($u,{className:"".concat(t,"-close-icon")})):S,A=!i&&w?u.createElement("span",{className:"".concat(t,"-message-single-line-auto-margin")}):null;return{content:u.createElement(eo,{iconPrefixCls:r},u.createElement("div",{className:w?"".concat(t,"-with-icon"):"",role:"alert"},w,u.createElement("div",{className:"".concat(t,"-message")},A,c),u.createElement("div",{className:"".concat(t,"-description")},i),l?u.createElement("span",{className:"".concat(t,"-btn")},l):null)),duration:$,closable:!0,closeIcon:M,onClose:s,onClick:f,key:v,style:h||{},className:fe(m,L({},"".concat(t,"-").concat(o),!!o)),props:E}}function yf(e){Za(e,function(t){var r=t.prefixCls,n=t.iconPrefixCls,a=t.instance;a.notice(Qa(e,r,n))})}var we={open:yf,close:function(t){Object.keys(pe).forEach(function(r){return Promise.resolve(pe[r]).then(function(n){n.removeNotice(t)})})},config:pf,destroy:function(){Object.keys(pe).forEach(function(t){Promise.resolve(pe[t]).then(function(r){r.destroy()}),delete pe[t]})}};["success","info","warning","error"].forEach(function(e){we[e]=function(t){return we.open(R(R({},t),{type:e}))}});we.warn=we.warning;we.useNotification=hf(Za,Qa);const bf=we;var Cf=function(t,r){return r||(t?"ant-".concat(t):"ant")},$r=u.createContext({getPrefixCls:Cf}),_r=$r.Consumer,xf="-ant-".concat(Date.now(),"-").concat(Math.random());function Sf(e,t){var r={},n=function(f,v){var h=f.clone();return h=(v==null?void 0:v(h))||h,h.toRgbString()},a=function(f,v){var h=new Be(f),m=xe(h.toRgbString());r["".concat(v,"-color")]=n(h),r["".concat(v,"-color-disabled")]=m[1],r["".concat(v,"-color-hover")]=m[4],r["".concat(v,"-color-active")]=m[6],r["".concat(v,"-color-outline")]=h.clone().setAlpha(.2).toRgbString(),r["".concat(v,"-color-deprecated-bg")]=m[0],r["".concat(v,"-color-deprecated-border")]=m[2]};if(t.primaryColor){a(t.primaryColor,"primary");var o=new Be(t.primaryColor),i=xe(o.toRgbString());i.forEach(function(s,f){r["primary-".concat(f+1)]=s}),r["primary-color-deprecated-l-35"]=n(o,function(s){return s.lighten(35)}),r["primary-color-deprecated-l-20"]=n(o,function(s){return s.lighten(20)}),r["primary-color-deprecated-t-20"]=n(o,function(s){return s.tint(20)}),r["primary-color-deprecated-t-50"]=n(o,function(s){return s.tint(50)}),r["primary-color-deprecated-f-12"]=n(o,function(s){return s.setAlpha(s.getAlpha()*.12)});var c=new Be(i[0]);r["primary-color-active-deprecated-f-30"]=n(c,function(s){return s.setAlpha(s.getAlpha()*.3)}),r["primary-color-active-deprecated-d-02"]=n(c,function(s){return s.darken(2)})}t.successColor&&a(t.successColor,"success"),t.warningColor&&a(t.warningColor,"warning"),t.errorColor&&a(t.errorColor,"error"),t.infoColor&&a(t.infoColor,"info");var l=Object.keys(r).map(function(s){return"--".concat(e,"-").concat(s,": ").concat(r[s],";")});return` + :root { + `.concat(l.join(` +`),` + } + `).trim()}function Ef(e,t){var r=Sf(e,t);ke()&&In(r,"".concat(xf,"-dynamic-theme"))}var cr=u.createContext(!1),wf=function(t){var r=t.children,n=t.disabled,a=u.useContext(cr);return u.createElement(cr.Provider,{value:n??a},r)};const Nh=cr;var sr=u.createContext(void 0),$f=function(t){var r=t.children,n=t.size;return u.createElement(sr.Consumer,null,function(a){return u.createElement(sr.Provider,{value:n||a},r)})};const _f=sr;var Pf=["getTargetContainer","getPopupContainer","renderEmpty","pageHeader","input","pagination","form"],Tf="ant",Rf="anticon",tt,Ja;function Qe(){return tt||Tf}function Af(){return Ja||Rf}var Mf=function(t){var r=t.prefixCls,n=t.iconPrefixCls,a=t.theme;r!==void 0&&(tt=r),n!==void 0&&(Ja=n),a&&Ef(Qe(),a)},Xa=function(){return{getPrefixCls:function(r,n){return n||(r?"".concat(Qe(),"-").concat(r):Qe())},getIconPrefixCls:Af,getRootPrefixCls:function(r,n){return r||tt||(n&&n.includes("-")?n.replace(/^(.*)-[^-]*$/,"$1"):Qe())}}},Of=function(t){var r=t.children,n=t.csp,a=t.autoInsertSpaceInButton,o=t.form,i=t.locale,c=t.componentSize,l=t.direction,s=t.space,f=t.virtual,v=t.dropdownMatchSelectWidth,h=t.legacyLocale,m=t.parentContext,g=t.iconPrefixCls,S=t.componentDisabled,E=u.useCallback(function(P,T){var I=t.prefixCls;if(T)return T;var j=I||m.getPrefixCls("");return P?"".concat(j,"-").concat(P):j},[m.getPrefixCls,t.prefixCls]),$=R(R({},m),{csp:n,autoInsertSpaceInButton:a,locale:i||h,direction:l,space:s,virtual:f,dropdownMatchSelectWidth:v,getPrefixCls:E});Pf.forEach(function(P){var T=t[P];T&&($[P]=T)});var w=la(function(){return $},$,function(P,T){var I=Object.keys(P),j=Object.keys(T);return I.length!==j.length||I.some(function(X){return P[X]!==T[X]})}),M=u.useMemo(function(){return{prefixCls:g,csp:n}},[g,n]),A=r,k=u.useMemo(function(){var P,T,I,j;return pl(((P=Se.Form)===null||P===void 0?void 0:P.defaultValidateMessages)||{},((I=(T=w.locale)===null||T===void 0?void 0:T.Form)===null||I===void 0?void 0:I.defaultValidateMessages)||{},((j=w.form)===null||j===void 0?void 0:j.validateMessages)||{},(o==null?void 0:o.validateMessages)||{})},[w,o==null?void 0:o.validateMessages]);return Object.keys(k).length>0&&(A=u.createElement(ml.Provider,{value:k},r)),i&&(A=u.createElement($l,{locale:i,_ANT_MARK__:El},A)),(g||n)&&(A=u.createElement(ur.Provider,{value:M},A)),c&&(A=u.createElement($f,{size:c},A)),S!==void 0&&(A=u.createElement(wf,{disabled:S},A)),u.createElement($r.Provider,{value:w},A)},St=function(t){return u.useEffect(function(){t.direction&&(vf.config({rtl:t.direction==="rtl"}),bf.config({rtl:t.direction==="rtl"}))},[t.direction]),u.createElement(Pl,null,function(r,n,a){return u.createElement(_r,null,function(o){return u.createElement(Of,R({parentContext:o,legacyLocale:a},t))})})};St.ConfigContext=$r;St.SizeContext=_f;St.config=Mf;const eo=St;var to=u.isValidElement;function Ih(e){return e&&to(e)&&e.type===u.Fragment}function kf(e,t,r){return to(e)?u.cloneElement(e,typeof r=="function"?r(e.props||{}):r):t}function Lh(e,t){return kf(e,e,t)}var jh=function(){for(var t=arguments.length,r=new Array(t),n=0;n-1}var Zf=qf,Qf=Et;function Jf(e,t){var r=this.__data__,n=Qf(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var Xf=Jf,ed=Lf,td=Gf,rd=Bf,nd=Zf,ad=Xf;function $e(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t-1&&e%1==0&&e-1&&e%1==0&&e<=ov}var cv=iv;function sv(e){return e}var uv=sv,lv=at,fv=mr,dv=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,vv=/^\w*$/;function hv(e,t){if(lv(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||fv(e)?!0:vv.test(e)||!dv.test(e)||t!=null&&e in Object(t)}var pv=hv,oo=V0,mv="Expected a function";function Tr(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(mv);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],o=r.cache;if(o.has(a))return o.get(a);var i=e.apply(this,n);return r.cache=o.set(a,i)||o,i};return r.cache=new(Tr.Cache||oo),r}Tr.Cache=oo;var gv=Tr,yv=gv,bv=500;function Cv(e){var t=yv(e,function(n){return r.size===bv&&r.clear(),n}),r=t.cache;return t}var xv=Cv,Sv=xv,Ev=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,wv=/\\(\\)?/g,$v=Sv(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Ev,function(r,n,a,o){t.push(a?o.replace(wv,"$1"):n||r)}),t}),_v=$v,Pv=at,Tv=pv,Rv=_v,Av=Ne;function Mv(e,t){return Pv(e)?e:Tv(e,t)?[e]:Rv(Av(e))}var io=Mv,Ov=mr,kv=1/0;function Nv(e){if(typeof e=="string"||Ov(e))return e;var t=e+"";return t=="0"&&1/e==-kv?"-0":t}var co=Nv,Iv=io,Lv=co;function jv(e,t){t=Iv(t,e);for(var r=0,n=t.length;e!=null&&r0){if(++t>=mh)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var Ch=bh,xh=ph,Sh=Ch,Eh=Sh(xh),Gh=Eh;export{at as $,se as A,Ct as B,$r as C,Nh as D,Pl as E,rn as F,pu as G,jh as H,Se as I,gl as J,nl as K,Zu as L,ou as M,Au as N,Jt as O,sl as P,ke as Q,fa as R,_f as S,od as T,Gd as U,V0 as V,dr as W,vr as X,no as Y,Dh as Z,Xe as _,K as a,wo as a$,hr as a0,cv as a1,pr as a2,ii as a3,ev as a4,av as a5,vd as a6,Pr as a7,Sd as a8,dl as a9,Ll as aA,kl as aB,Iu as aC,lu as aD,Cu as aE,Xa as aF,Rh as aG,Fh as aH,kf as aI,Hu as aJ,Yt as aK,Be as aL,$h as aM,He as aN,_h as aO,Tn as aP,kr as aQ,$o as aR,_o as aS,me as aT,le as aU,zt as aV,To as aW,Z as aX,Ht as aY,Or as aZ,Dt as a_,lr as aa,eo as ab,Ku as ac,pa as ad,Me as ae,qt as af,Ot as ag,uv as ah,ro as ai,Hh as aj,zh as ak,pv as al,co as am,vi as an,Uh as ao,eh as ap,Vh as aq,Gh as ar,af as as,ml as at,wf as au,$f as av,Oh as aw,Xt as ax,ca as ay,Mh as az,L as b,Po as b0,Mo as b1,kh as b2,Ee as b3,Ph as b4,Ks as b5,xo as b6,Mt as b7,Qo as b8,In as b9,Th as ba,ti as bb,Ye as bc,pl as bd,Ih as be,mr as bf,tl as bg,io as bh,fe as c,Ql as d,Lh as e,b as f,Co as g,$u as h,to as i,H as j,_r as k,st as l,vf as m,bf as n,Ah as o,ct as p,ut as q,Je as r,Qu as s,Bt as t,Ce as u,cl as v,er as w,ei as x,la as y,rt as z}; diff --git a/dist/assets/button-eb671c5b.js b/dist/assets/button-8d21fb6b.js similarity index 52% rename from dist/assets/button-eb671c5b.js rename to dist/assets/button-8d21fb6b.js index b689115311180ce9ccc50084d955c00810860b25..f9bedd355809fbf4c016c2aebbd6d5f0d56a2a70 100644 --- a/dist/assets/button-eb671c5b.js +++ b/dist/assets/button-8d21fb6b.js @@ -1,4 +1,4 @@ -import{R as S,r as i,_ as O}from"./umi-2135699e.js";import{bK as $e,C as w,c as R,b as u,w as V,V as Ae,U as We,Y as De,bH as je,ak as Be,a1 as Fe,e as be,T as Me,P as Ge,W as ve,X as Ue,aY as Ve,L as pe,d as He,ae as K,a9 as Ye,aa as Ke,a as ge,o as Xe,O as qe,bG as Je}from"./_setToString-038b76d7.js";function H(a){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=[];return S.Children.forEach(a,function(e){e==null&&!t.keepEmpty||(Array.isArray(e)?n=n.concat(H(e)):$e(e)&&e.props?n=n.concat(H(e.props.children,t)):n.push(e))}),n}var ye=globalThis&&globalThis.__rest||function(a,t){var n={};for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&t.indexOf(e)<0&&(n[e]=a[e]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,e=Object.getOwnPropertySymbols(a);r1&&arguments[1]!==void 0?arguments[1]:1,n=tt++,e=t;function r(){e-=1,e<=0?(a(),delete k[n]):k[n]=V(r)}return k[n]=V(r),n}z.cancel=function(t){t!==void 0&&(V.cancel(k[t]),delete k[t])};z.ids=k;function nt(a,t,n){return t=ve(t),Ue(a,Ve()?Reflect.construct(t,n||[],ve(a).constructor):t.apply(a,n))}var F;function Ce(a){return!a||a.offsetParent===null||a.hidden}function at(a){return a instanceof Document?a.body:Array.from(a.childNodes).find(function(t){return(t==null?void 0:t.nodeType)===Node.ELEMENT_NODE})}function rt(a){var t=(a||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return t&&t[1]&&t[2]&&t[3]?!(t[1]===t[2]&&t[2]===t[3]):!0}var xe=function(a){Ae(t,a);function t(){var n;return We(this,t),n=nt(this,t,arguments),n.containerRef=i.createRef(),n.animationStart=!1,n.destroyed=!1,n.onClick=function(e,r){var o,c,s=n.props,l=s.insertExtraNode,v=s.disabled;if(!(v||!e||Ce(e)||e.className.includes("-leave"))){n.extraNode=document.createElement("div");var p=De(n),g=p.extraNode,b=n.context.getPrefixCls;g.className="".concat(b(""),"-click-animating-node");var C=n.getAttributeName();if(e.setAttribute(C,"true"),r&&r!=="#fff"&&r!=="#ffffff"&&r!=="rgb(255, 255, 255)"&&r!=="rgba(255, 255, 255, 1)"&&rt(r)&&!/rgba\((?:\d*, ){3}0\)/.test(r)&&r!=="transparent"){g.style.borderColor=r;var x=((o=e.getRootNode)===null||o===void 0?void 0:o.call(e))||e.ownerDocument,f=(c=at(x))!==null&&c!==void 0?c:x;F=je(` +import{R as S,r as i,_ as O}from"./umi-6680b95f.js";import{bg as $e,C as w,c as R,b as u,w as V,q as Ae,p as De,t as We,b9 as je,P as Be,v as Fe,e as be,l as Me,k as Ge,r as ve,s as Ue,ay as Ve,L as pe,d as He,H as J,S as qe,D as Je,a as ge,o as Ke,j as Qe,be as Xe}from"./_setToString-64803aa4.js";function H(a){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=[];return S.Children.forEach(a,function(e){e==null&&!t.keepEmpty||(Array.isArray(e)?n=n.concat(H(e)):$e(e)&&e.props?n=n.concat(H(e.props.children,t)):n.push(e))}),n}var ye=globalThis&&globalThis.__rest||function(a,t){var n={};for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&t.indexOf(e)<0&&(n[e]=a[e]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,e=Object.getOwnPropertySymbols(a);r1&&arguments[1]!==void 0?arguments[1]:1,n=tt++,e=t;function r(){e-=1,e<=0?(a(),delete k[n]):k[n]=V(r)}return k[n]=V(r),n}z.cancel=function(t){t!==void 0&&(V.cancel(k[t]),delete k[t])};z.ids=k;function nt(a,t,n){return t=ve(t),Ue(a,Ve()?Reflect.construct(t,n||[],ve(a).constructor):t.apply(a,n))}var F;function Ce(a){return!a||a.offsetParent===null||a.hidden}function at(a){return a instanceof Document?a.body:Array.from(a.childNodes).find(function(t){return(t==null?void 0:t.nodeType)===Node.ELEMENT_NODE})}function rt(a){var t=(a||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return t&&t[1]&&t[2]&&t[3]?!(t[1]===t[2]&&t[2]===t[3]):!0}var xe=function(a){Ae(t,a);function t(){var n;return De(this,t),n=nt(this,t,arguments),n.containerRef=i.createRef(),n.animationStart=!1,n.destroyed=!1,n.onClick=function(e,r){var o,c,s=n.props,l=s.insertExtraNode,v=s.disabled;if(!(v||!e||Ce(e)||e.className.includes("-leave"))){n.extraNode=document.createElement("div");var p=We(n),g=p.extraNode,b=n.context.getPrefixCls;g.className="".concat(b(""),"-click-animating-node");var C=n.getAttributeName();if(e.setAttribute(C,"true"),r&&r!=="#fff"&&r!=="#ffffff"&&r!=="rgb(255, 255, 255)"&&r!=="rgba(255, 255, 255, 1)"&&rt(r)&&!/rgba\((?:\d*, ){3}0\)/.test(r)&&r!=="transparent"){g.style.borderColor=r;var x=((o=e.getRootNode)===null||o===void 0?void 0:o.call(e))||e.ownerDocument,f=(c=at(x))!==null&&c!==void 0?c:x;F=je(` [`.concat(b(""),"-click-animating-without-extra-node='true']::after, .").concat(b(""),`-click-animating-node { --antd-wave-shadow-color: `).concat(r,`; - }`),"antd-wave",{csp:n.csp,attachTo:f})}l&&e.appendChild(g),["transition","animation"].forEach(function(m){e.addEventListener("".concat(m,"start"),n.onTransitionStart),e.addEventListener("".concat(m,"end"),n.onTransitionEnd)})}},n.onTransitionStart=function(e){if(!n.destroyed){var r=n.containerRef.current;!e||e.target!==r||n.animationStart||n.resetEffect(r)}},n.onTransitionEnd=function(e){!e||e.animationName!=="fadeEffect"||n.resetEffect(e.target)},n.bindAnimationEvent=function(e){if(!(!e||!e.getAttribute||e.getAttribute("disabled")||e.className.includes("disabled"))){var r=function(c){if(!(c.target.tagName==="INPUT"||Ce(c.target))){n.resetEffect(e);var s=getComputedStyle(e).getPropertyValue("border-top-color")||getComputedStyle(e).getPropertyValue("border-color")||getComputedStyle(e).getPropertyValue("background-color");n.clickWaveTimeoutId=window.setTimeout(function(){return n.onClick(e,s)},0),z.cancel(n.animationStartId),n.animationStart=!0,n.animationStartId=z(function(){n.animationStart=!1},10)}};return e.addEventListener("click",r,!0),{cancel:function(){e.removeEventListener("click",r,!0)}}}},n.renderWave=function(e){var r=e.csp,o=n.props.children;if(n.csp=r,!i.isValidElement(o))return o;var c=n.containerRef;return Be(o)&&(c=Fe(o.ref,n.containerRef)),be(o,{ref:c})},n}return Me(t,[{key:"componentDidMount",value:function(){this.destroyed=!1;var e=this.containerRef.current;!e||e.nodeType!==1||(this.instance=this.bindAnimationEvent(e))}},{key:"componentWillUnmount",value:function(){this.instance&&this.instance.cancel(),this.clickWaveTimeoutId&&clearTimeout(this.clickWaveTimeoutId),this.destroyed=!0}},{key:"getAttributeName",value:function(){var e=this.context.getPrefixCls,r=this.props.insertExtraNode;return r?"".concat(e(""),"-click-animating"):"".concat(e(""),"-click-animating-without-extra-node")}},{key:"resetEffect",value:function(e){var r=this;if(!(!e||e===this.extraNode||!(e instanceof Element))){var o=this.props.insertExtraNode,c=this.getAttributeName();e.setAttribute(c,"false"),F&&(F.innerHTML=""),o&&this.extraNode&&e.contains(this.extraNode)&&e.removeChild(this.extraNode),["transition","animation"].forEach(function(s){e.removeEventListener("".concat(s,"start"),r.onTransitionStart),e.removeEventListener("".concat(s,"end"),r.onTransitionEnd)})}}},{key:"render",value:function(){return i.createElement(Ge,null,this.renderWave)}}]),t}(i.Component);xe.contextType=w;const it=xe;var ot=globalThis&&globalThis.__rest||function(a,t){var n={};for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&t.indexOf(e)<0&&(n[e]=a[e]);if(a!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,e=Object.getOwnPropertySymbols(a);r=4.5;case"AAlarge":return o>=3;case"AAAsmall":return o>=7;default:return!1}}function Ya(e,r,t){t===void 0&&(t={includeFallbackColors:!1,level:"AA",size:"small"});for(var n=null,a=0,o=t.includeFallbackColors,l=t.level,f=t.size,y=0,s=r;ya&&(a=h,n=new De(E))}return Ha(e,n,{level:l,size:f})||!o?n:(t.includeFallbackColors=!1,Ya(e,["#fff","#000"],t))}function Jl(e,r){var t=new De(e),n="#"+Kr(t.r,t.g,t.b,t.a),a=n,o=t.gradientType?"GradientType = 1, ":"";if(r){var l=new De(r);a="#"+Kr(l.r,l.g,l.b,l.a)}return"progid:DXImageTransform.Microsoft.gradient(".concat(o,"startColorstr=").concat(n,",endColorstr=").concat(a,")")}function Zl(e,r){var t={r:Dr(e.r),g:Dr(e.g),b:Dr(e.b)};return e.a!==void 0&&(t.a=Number(e.a)),new De(t,r)}function eu(){return new De({r:Math.random(),g:Math.random(),b:Math.random()})}function Va(e){if(e===void 0&&(e={}),e.count!==void 0&&e.count!==null){var r=e.count,t=[];for(e.count=void 0;r>t.length;)e.count=null,e.seed&&(e.seed+=1),t.push(Va(e));return e.count=r,t}var n=tu(e.hue,e.seed),a=ru(n,e),o=nu(n,a,e),l={h:n,s:a,v:o};return e.alpha!==void 0&&(l.a=e.alpha),new De(l)}function tu(e,r){var t=ou(e),n=Zt(t,r);return n<0&&(n=360+n),n}function ru(e,r){if(r.hue==="monochrome")return 0;if(r.luminosity==="random")return Zt([0,100],r.seed);var t=Ka(e).saturationRange,n=t[0],a=t[1];switch(r.luminosity){case"bright":n=55;break;case"dark":n=a-10;break;case"light":a=55;break}return Zt([n,a],r.seed)}function nu(e,r,t){var n=au(e,r),a=100;switch(t.luminosity){case"dark":a=n+20;break;case"light":n=(a+n)/2;break;case"random":n=0,a=100;break}return Zt([n,a],t.seed)}function au(e,r){for(var t=Ka(e).lowerBounds,n=0;n=a&&r<=l){var y=(f-o)/(l-a),s=o-y*a;return y*r+s}}return 0}function ou(e){var r=parseInt(e,10);if(!Number.isNaN(r)&&r<360&&r>0)return[r,r];if(typeof e=="string"){var t=mn.find(function(l){return l.name===e});if(t){var n=Qa(t);if(n.hueRange)return n.hueRange}var a=new De(e);if(a.isValid){var o=a.toHsv().h;return[o,o]}}return[0,360]}function Ka(e){e>=334&&e<=360&&(e-=360);for(var r=0,t=mn;r=a.hueRange[0]&&e<=a.hueRange[1])return a}throw Error("Color not found")}function Zt(e,r){if(r===void 0)return Math.floor(e[0]+Math.random()*(e[1]+1-e[0]));var t=e[1]||1,n=e[0]||0;r=(r*9301+49297)%233280;var a=r/233280;return Math.floor(n+a*(t-n))}function Qa(e){var r=e.lowerBounds[0][0],t=e.lowerBounds[e.lowerBounds.length-1][0],n=e.lowerBounds[e.lowerBounds.length-1][1],a=e.lowerBounds[0][1];return{name:e.name,hueRange:e.hueRange,lowerBounds:e.lowerBounds,saturationRange:[r,t],brightnessRange:[n,a]}}var mn=[{name:"monochrome",hueRange:null,lowerBounds:[[0,0],[100,0]]},{name:"red",hueRange:[-26,18],lowerBounds:[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]},{name:"orange",hueRange:[19,46],lowerBounds:[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]},{name:"yellow",hueRange:[47,62],lowerBounds:[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]},{name:"green",hueRange:[63,178],lowerBounds:[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]},{name:"blue",hueRange:[179,257],lowerBounds:[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]},{name:"purple",hueRange:[258,282],lowerBounds:[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]},{name:"pink",hueRange:[283,334],lowerBounds:[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]}];const iu=Object.freeze(Object.defineProperty({__proto__:null,TinyColor:De,bounds:mn,convertDecimalToHex:Rl,convertHexToDecimal:El,default:ta,fromRatio:Zl,hslToRgb:Sl,hsvToRgb:Il,inputToRGB:Tl,isReadable:Ha,isValidCSSUnit:Ml,legacyRandom:eu,mostReadable:Ya,names:Nl,numberInputToObject:$l,parseIntFromHex:kl,random:Va,readability:pn,rgbToHex:Al,rgbToHsl:Dl,rgbToHsv:jl,rgbToRgb:Ll,rgbaToArgbHex:Kr,rgbaToHex:ql,stringInputToObject:Wl,tinycolor:ta,toMsFilter:Jl},Symbol.toStringTag,{value:"Module"}));var lu={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};const uu=lu;var cu=function(r,t){return ae.createElement(Fl,ra(ra({},r),{},{ref:t,icon:uu}))},fu=ae.forwardRef(cu);const Bs=fu,su=Object.freeze(Object.defineProperty({__proto__:null,CSSMotionList:zl,Provider:Ul,default:Bl},Symbol.toStringTag,{value:"Module"})),du=Object.freeze(Object.defineProperty({__proto__:null,default:Gl},Symbol.toStringTag,{value:"Module"})),vu=Object.freeze(Object.defineProperty({__proto__:null,Panel:Ql,default:Kl},Symbol.toStringTag,{value:"Module"}));var Xa={exports:{}};(function(e){function r(){return e.exports=r=Object.assign?Object.assign.bind():function(t){for(var n=1;n"u"&&t(3);var h=Promise;function v(i,c){c&&i.then(function(u){c(null,u)},function(u){c(u)})}function I(i,c,u){typeof c=="function"&&i.then(c),typeof u=="function"&&i.catch(u)}function b(i){return typeof i!="string"&&(console.warn(i+" used as a key, but it is not a string."),i=String(i)),i}function $(){if(arguments.length&&typeof arguments[arguments.length-1]=="function")return arguments[arguments.length-1]}var w="local-forage-detect-blob-support",k=void 0,W={},R=Object.prototype.toString,G="readonly",x="readwrite";function T(i){for(var c=i.length,u=new ArrayBuffer(c),m=new Uint8Array(u),g=0;g=43)}}).catch(function(){return!1})}function S(i){return typeof k=="boolean"?h.resolve(k):O(i).then(function(c){return k=c,k})}function P(i){var c=W[i.name],u={};u.promise=new h(function(m,g){u.resolve=m,u.reject=g}),c.deferredOperations.push(u),c.dbReady?c.dbReady=c.dbReady.then(function(){return u.promise}):c.dbReady=u.promise}function F(i){var c=W[i.name],u=c.deferredOperations.pop();if(u)return u.resolve(),u.promise}function Y(i,c){var u=W[i.name],m=u.deferredOperations.pop();if(m)return m.reject(c),m.promise}function j(i,c){return new h(function(u,m){if(W[i.name]=W[i.name]||A(),i.db)if(c)P(i),i.db.close();else return u(i.db);var g=[i.name];c&&g.push(i.version);var d=y.open.apply(y,g);c&&(d.onupgradeneeded=function(N){var D=d.result;try{D.createObjectStore(i.storeName),N.oldVersion<=1&&D.createObjectStore(w)}catch(B){if(B.name==="ConstraintError")console.warn('The database "'+i.name+'" has been upgraded from version '+N.oldVersion+" to version "+N.newVersion+', but the storage "'+i.storeName+'" already exists.');else throw B}}),d.onerror=function(N){N.preventDefault(),m(d.error)},d.onsuccess=function(){var N=d.result;N.onversionchange=function(D){D.target.close()},u(N),F(i)}})}function M(i){return j(i,!1)}function V(i){return j(i,!0)}function X(i,c){if(!i.db)return!0;var u=!i.db.objectStoreNames.contains(i.storeName),m=i.versioni.db.version;if(m&&(i.version!==c&&console.warn('The database "'+i.name+`" can't be downgraded from version `+i.db.version+" to version "+i.version+"."),i.version=i.db.version),g||u){if(u){var d=i.db.version+1;d>i.version&&(i.version=d)}return!0}return!1}function Q(i){return new h(function(c,u){var m=new FileReader;m.onerror=u,m.onloadend=function(g){var d=btoa(g.target.result||"");c({__local_forage_encoded_blob:!0,data:d,type:i.type})},m.readAsBinaryString(i)})}function K(i){var c=T(atob(i.data));return E([c],{type:i.type})}function L(i){return i&&i.__local_forage_encoded_blob}function p(i){var c=this,u=c._initReady().then(function(){var m=W[c._dbInfo.name];if(m&&m.dbReady)return m.dbReady});return I(u,i,i),u}function _(i){P(i);for(var c=W[i.name],u=c.forages,m=0;m0&&(!i.db||d.name==="InvalidStateError"||d.name==="NotFoundError"))return h.resolve().then(function(){if(!i.db||d.name==="NotFoundError"&&!i.db.objectStoreNames.contains(i.storeName)&&i.version<=i.db.version)return i.db&&(i.version=i.db.version+1),V(i)}).then(function(){return _(i).then(function(){C(i,c,u,m-1)})}).catch(u);u(d)}}function A(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function q(i){var c=this,u={db:null};if(i)for(var m in i)u[m]=i[m];var g=W[u.name];g||(g=A(),W[u.name]=g),g.forages.push(c),c._initReady||(c._initReady=c.ready,c.ready=p);var d=[];function N(){return h.resolve()}for(var D=0;D>4,H[g++]=(N&15)<<4|D>>2,H[g++]=(D&3)<<6|B&63;return U}function Qe(i){var c=new Uint8Array(i),u="",m;for(m=0;m>2],u+=le[(c[m]&3)<<4|c[m+1]>>4],u+=le[(c[m+1]&15)<<2|c[m+2]>>6],u+=le[c[m+2]&63];return c.length%3===2?u=u.substring(0,u.length-1)+"=":c.length%3===1&&(u=u.substring(0,u.length-2)+"=="),u}function Sr(i,c){var u="";if(i&&(u=vt.call(i)),i&&(u==="[object ArrayBuffer]"||i.buffer&&vt.call(i.buffer)==="[object ArrayBuffer]")){var m,g=Ee;i instanceof ArrayBuffer?(m=i,g+=Ue):(m=i.buffer,u==="[object Int8Array]"?g+=ut:u==="[object Uint8Array]"?g+=ke:u==="[object Uint8ClampedArray]"?g+=ct:u==="[object Int16Array]"?g+=Rt:u==="[object Uint16Array]"?g+=Ve:u==="[object Int32Array]"?g+=ft:u==="[object Uint32Array]"?g+=st:u==="[object Float32Array]"?g+=Ke:u==="[object Float64Array]"?g+=Et:c(new Error("Failed to get type for BinaryArray"))),c(g+Qe(m))}else if(u==="[object Blob]"){var d=new FileReader;d.onload=function(){var N=ce+i.type+"~"+Qe(this.result);c(Ee+lt+N)},d.readAsArrayBuffer(i)}else try{c(JSON.stringify(i))}catch(N){console.error("Couldn't convert value into a JSON string: ",i),c(null,N)}}function Ge(i){if(i.substring(0,$e)!==Ee)return JSON.parse(i);var c=i.substring(dt),u=i.substring($e,dt),m;if(u===lt&&Ce.test(c)){var g=c.match(Ce);m=g[1],c=c.substring(g[0].length)}var d=Le(c);switch(u){case Ue:return d;case lt:return E([d],{type:m});case ut:return new Int8Array(d);case ke:return new Uint8Array(d);case ct:return new Uint8ClampedArray(d);case Rt:return new Int16Array(d);case Ve:return new Uint16Array(d);case ft:return new Int32Array(d);case st:return new Uint32Array(d);case Ke:return new Float32Array(d);case Et:return new Float64Array(d);default:throw new Error("Unkown type: "+u)}}var Xe={serialize:Sr,deserialize:Ge,stringToBuffer:Le,bufferToString:Qe};function be(i,c,u,m){i.executeSql("CREATE TABLE IF NOT EXISTS "+c.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],u,m)}function St(i){var c=this,u={db:null};if(i)for(var m in i)u[m]=typeof i[m]!="string"?i[m].toString():i[m];var g=new h(function(d,N){try{u.db=openDatabase(u.name,String(u.version),u.description,u.size)}catch(D){return N(D)}u.db.transaction(function(D){be(D,u,function(){c._dbInfo=u,d()},function(B,U){N(U)})},N)});return u.serializer=Xe,g}function Te(i,c,u,m,g,d){i.executeSql(u,m,g,function(N,D){D.code===D.SYNTAX_ERR?N.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[c.storeName],function(B,U){U.rows.length?d(B,D):be(B,c,function(){B.executeSql(u,m,g,d)},d)},d):d(N,D)},d)}function Ir(i,c){var u=this;i=b(i);var m=new h(function(g,d){u.ready().then(function(){var N=u._dbInfo;N.db.transaction(function(D){Te(D,N,"SELECT * FROM "+N.storeName+" WHERE key = ? LIMIT 1",[i],function(B,U){var H=U.rows.length?U.rows.item(0).value:null;H&&(H=N.serializer.deserialize(H)),g(H)},function(B,U){d(U)})})}).catch(d)});return v(m,c),m}function Tr(i,c){var u=this,m=new h(function(g,d){u.ready().then(function(){var N=u._dbInfo;N.db.transaction(function(D){Te(D,N,"SELECT * FROM "+N.storeName,[],function(B,U){for(var H=U.rows,J=H.length,ie=0;ie0){N(It.apply(g,[i,B,u,m-1]));return}D(ie)}})})}).catch(D)});return v(d,u),d}function Tt(i,c,u){return It.apply(this,[i,c,u,1])}function Mt(i,c){var u=this;i=b(i);var m=new h(function(g,d){u.ready().then(function(){var N=u._dbInfo;N.db.transaction(function(D){Te(D,N,"DELETE FROM "+N.storeName+" WHERE key = ?",[i],function(){g()},function(B,U){d(U)})})}).catch(d)});return v(m,c),m}function Mr(i){var c=this,u=new h(function(m,g){c.ready().then(function(){var d=c._dbInfo;d.db.transaction(function(N){Te(N,d,"DELETE FROM "+d.storeName,[],function(){m()},function(D,B){g(B)})})}).catch(g)});return v(u,i),u}function pt(i){var c=this,u=new h(function(m,g){c.ready().then(function(){var d=c._dbInfo;d.db.transaction(function(N){Te(N,d,"SELECT COUNT(key) as c FROM "+d.storeName,[],function(D,B){var U=B.rows.item(0).c;m(U)},function(D,B){g(B)})})}).catch(g)});return v(u,i),u}function Nt(i,c){var u=this,m=new h(function(g,d){u.ready().then(function(){var N=u._dbInfo;N.db.transaction(function(D){Te(D,N,"SELECT key FROM "+N.storeName+" WHERE id = ? LIMIT 1",[i+1],function(B,U){var H=U.rows.length?U.rows.item(0).key:null;g(H)},function(B,U){d(U)})})}).catch(d)});return v(m,c),m}function $t(i){var c=this,u=new h(function(m,g){c.ready().then(function(){var d=c._dbInfo;d.db.transaction(function(N){Te(N,d,"SELECT key FROM "+d.storeName,[],function(D,B){for(var U=[],H=0;H '__WebKitDatabaseInfoTable__'",[],function(g,d){for(var N=[],D=0;D0}function ol(i){var c=this,u={};if(i)for(var m in i)u[m]=i[m];return u.keyPrefix=Ze(i,c._defaultConfig),al()?(c._dbInfo=u,u.serializer=Xe,h.resolve()):h.reject()}function il(i){var c=this,u=c.ready().then(function(){for(var m=c._dbInfo.keyPrefix,g=localStorage.length-1;g>=0;g--){var d=localStorage.key(g);d.indexOf(m)===0&&localStorage.removeItem(d)}});return v(u,i),u}function ll(i,c){var u=this;i=b(i);var m=u.ready().then(function(){var g=u._dbInfo,d=localStorage.getItem(g.keyPrefix+i);return d&&(d=g.serializer.deserialize(d)),d});return v(m,c),m}function ul(i,c){var u=this,m=u.ready().then(function(){for(var g=u._dbInfo,d=g.keyPrefix,N=d.length,D=localStorage.length,B=1,U=0;U=0;N--){var D=localStorage.key(N);D.indexOf(d)===0&&localStorage.removeItem(D)}}):g=h.reject("Invalid arguments"),v(g,c),g}var ml={_driver:"localStorageWrapper",_initStorage:ol,_support:Je(),iterate:ul,getItem:ll,setItem:vl,removeItem:dl,clear:il,length:sl,key:cl,keys:fl,dropInstance:pl},hl=function(c,u){return c===u||typeof c=="number"&&typeof u=="number"&&isNaN(c)&&isNaN(u)},gl=function(c,u){for(var m=c.length,g=0;g"u"?"undefined":o(u))==="object"){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var m in u){if(m==="storeName"&&(u[m]=u[m].replace(/\W/g,"_")),m==="version"&&typeof u[m]!="number")return new Error("Database version must be a number.");this._config[m]=u[m]}return"driver"in u&&u.driver?this.setDriver(this._config.driver):!0}else return typeof u=="string"?this._config[u]:this._config},i.prototype.defineDriver=function(u,m,g){var d=new h(function(N,D){try{var B=u._driver,U=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!u._driver){D(U);return}for(var H=Nr.concat("_initStorage"),J=0,ie=H.length;J{const{id:E,result:h,error:v}=s.data,I=n.get(E);if(I&&(n.delete(E),v?I.reject(new Error(v)):I.resolve(h)),o.length>0){const b=o.shift();y.postMessage(b)}else a.push(y)},y.onerror=s=>{console.error("[solveStaffGroup worker error]",s)},e.push(y),y}function f(...y){return new Promise((s,E)=>{const h=t++;n.set(h,{resolve:s,reject:E});const v={id:h,args:y};let I=a.pop();!I&&e.lengthy.terminate()),e=[],a.length=0,o.length=0,n.clear()}}}class yu{store;constructor(){this.store=hu.createInstance({name:"solution-store"})}getBatch(r){return Promise.all(r.map(t=>this.store.getItem(t)))}get(r){return this.store.getItem(r)}set(r,t){return this.store.setItem(r,t)}remove(r){return this.store.removeItem(r)}}class Gs{localStore=new yu;async getBatch(r){const t=await jt.post("/api/solutions/batchGet",{data:{nameList:r}});return Promise.all(t.map((n,a)=>n||this.localStore.get(r[a])))}async get(r){return await jt.post("/api/solutions/batchGet",{data:{nameList:[r]}}).then(n=>n[0])||this.localStore.get(r)}set(r,t){return jt.post("/api/solutions/set",{data:{name:r,value:t}})}remove(r){return jt.post("/api/solutions/delete",{data:{name:r}})}}const Hs=async(e,{forceUpdate:r=!1,readonly:t=!1,onlyFetchCache:n=!1,solutionStore:a=null,onProgress:o,policy:l="equations",quota:f})=>{var I;if(e.assemble(),(I=e.spartito)!=null&&I.regulated)return;const y=e.spartito||e.makeSpartito(),s=y.measures.filter(b=>!b.regulated),E=s.length;let h=0;if(o==null||o(0),!r){const b=await(a==null?void 0:a.getBatch(s.map($=>$.regulationHash)))??[];s.forEach(($,w)=>{const k=b[w];k&&$.applySolution(k),o==null||o(Math.ceil(h++/E*100))})}if(n)return;const v=y.measures.filter(b=>!b.regulated);if(v.length>0){const{solveStaffGroup:b,terminate:$}=gu();await Promise.all(v.map(async w=>{var W;const k=w.regulationHash;await w.regulate({policy:l,quota:f||Math.min((w.events.length+1)*16,200),solver:b}),t||a==null||a.set(k,{...w.asSolution(),priority:-((W=w.solutionStat)==null?void 0:W.loss)}),o==null||o(Math.ceil(h++/E*100))})),$()}o==null||o(100)};var ao={},oo={exports:{}};(function(e){var r=pe.default;function t(a){if(typeof WeakMap!="function")return null;var o=new WeakMap,l=new WeakMap;return(t=function(y){return y?l:o})(a)}function n(a,o){if(!o&&a&&a.__esModule)return a;if(a===null||r(a)!="object"&&typeof a!="function")return{default:a};var l=t(o);if(l&&l.has(a))return l.get(a);var f={__proto__:null},y=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in a)if(s!=="default"&&{}.hasOwnProperty.call(a,s)){var E=y?Object.getOwnPropertyDescriptor(a,s):null;E&&(E.get||E.set)?Object.defineProperty(f,s,E):f[s]=a[s]}return f.default=a,l&&l.set(a,f),f}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports})(oo);var me=oo.exports,io={exports:{}};(function(e){function r(t){return t&&t.__esModule?t:{default:t}}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports})(io);var ee=io.exports,lo={exports:{}},uo={exports:{}},co={exports:{}};(function(e){function r(t,n){(n==null||n>t.length)&&(n=t.length);for(var a=0,o=Array(n);a0&&arguments[0]!==void 0?arguments[0]:{},r=e.mark;return r?r.startsWith("data-")?r:"data-".concat(r):Mu}function ar(e){if(e.attachTo)return e.attachTo;var r=document.querySelector("head");return r||document.body}function Nu(e){return e==="queue"?"prependQueue":e?"prepend":"append"}function bn(e){return Array.from((er.get(e)||e).children).filter(function(r){return r.tagName==="STYLE"})}function xn(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!(0,Iu.default)())return null;var t=r.csp,n=r.prepend,a=r.priority,o=a===void 0?0:a,l=Nu(n),f=l==="prependQueue",y=document.createElement("style");y.setAttribute(la,l),f&&o&&y.setAttribute(ua,"".concat(o)),t!=null&&t.nonce&&(y.nonce=t==null?void 0:t.nonce),y.innerHTML=e;var s=ar(r),E=s.firstChild;if(n){if(f){var h=(r.styles||bn(s)).filter(function(v){if(!["prepend","prependQueue"].includes(v.getAttribute(la)))return!1;var I=Number(v.getAttribute(ua)||0);return o>=I});if(h.length)return s.insertBefore(y,h[h.length-1].nextSibling),y}s.insertBefore(y,E)}else s.appendChild(y);return y}function To(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=ar(r);return(r.styles||bn(t)).find(function(n){return n.getAttribute(Io(r))===e})}function $u(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=To(e,r);if(t){var n=ar(r);n.removeChild(t)}}function ku(e,r){var t=er.get(e);if(!t||!(0,Tu.default)(document,t)){var n=xn("",r),a=n.parentNode;er.set(e,a),e.removeChild(n)}}function Au(){er.clear()}function Du(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=ar(t),a=bn(n),o=(0,ia.default)((0,ia.default)({},t),{},{styles:a});ku(n,o);var l=To(r,o);if(l){var f,y;if((f=o.csp)!==null&&f!==void 0&&f.nonce&&l.nonce!==((y=o.csp)===null||y===void 0?void 0:y.nonce)){var s;l.nonce=(s=o.csp)===null||s===void 0?void 0:s.nonce}return l.innerHTML!==e&&(l.innerHTML=e),l}var E=xn(e,o);return E.setAttribute(Io(o),r),E}var ca;function Pn(){if(ca)return we;ca=1;var e=ee,r=pe;Object.defineProperty(we,"__esModule",{value:!0}),we.generate=$,we.getSecondaryColor=w,we.iconStyles=void 0,we.isIconDefinition=I,we.normalizeAttrs=b,we.normalizeTwoToneColors=k,we.useInsertStyles=we.svgBaseProps=void 0,we.warning=v;var t=e(Pe),n=e(pe),a=wo,o=h(ae),l=e(Se),f=Fe,y=e(rt),s=e(Yl);function E(R){if(typeof WeakMap!="function")return null;var G=new WeakMap,x=new WeakMap;return(E=function(O){return O?x:G})(R)}function h(R,G){if(!G&&R&&R.__esModule)return R;if(R===null||r(R)!="object"&&typeof R!="function")return{default:R};var x=E(G);if(x&&x.has(R))return x.get(R);var T={__proto__:null},O=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var S in R)if(S!=="default"&&{}.hasOwnProperty.call(R,S)){var P=O?Object.getOwnPropertyDescriptor(R,S):null;P&&(P.get||P.set)?Object.defineProperty(T,S,P):T[S]=R[S]}return T.default=R,x&&x.set(R,T),T}function v(R,G){(0,l.default)(R,"[@ant-design/icons] ".concat(G))}function I(R){return(0,n.default)(R)==="object"&&typeof R.name=="string"&&typeof R.theme=="string"&&((0,n.default)(R.icon)==="object"||typeof R.icon=="function")}function b(){var R=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return Object.keys(R).reduce(function(G,x){var T=R[x];switch(x){case"class":G.className=T,delete G.class;break;default:delete G[x],G[(0,s.default)(x)]=T}return G},{})}function $(R,G,x){return x?o.default.createElement(R.tag,(0,t.default)((0,t.default)({key:G},b(R.attrs)),x),(R.children||[]).map(function(T,O){return $(T,"".concat(G,"-").concat(R.tag,"-").concat(O))})):o.default.createElement(R.tag,(0,t.default)({key:G},b(R.attrs)),(R.children||[]).map(function(T,O){return $(T,"".concat(G,"-").concat(R.tag,"-").concat(O))}))}function w(R){return(0,a.generate)(R)[0]}function k(R){return R?Array.isArray(R)?R:[R]:[]}we.svgBaseProps={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"};var W=we.iconStyles=` -.anticon { - display: inline-flex; - alignItems: center; - color: inherit; - font-style: normal; - line-height: 0; - text-align: center; - text-transform: none; - vertical-align: -0.125em; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.anticon > * { - line-height: 1; -} - -.anticon svg { - display: inline-block; -} - -.anticon::before { - display: none; -} - -.anticon .anticon-icon { - display: block; -} - -.anticon[tabindex] { - cursor: pointer; -} - -.anticon-spin::before, -.anticon-spin { - display: inline-block; - -webkit-animation: loadingCircle 1s infinite linear; - animation: loadingCircle 1s infinite linear; -} - -@-webkit-keyframes loadingCircle { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes loadingCircle { - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} -`;return we.useInsertStyles=function(){var G=arguments.length>0&&arguments[0]!==void 0?arguments[0]:W,x=(0,o.useContext)(y.default),T=x.csp;(0,o.useEffect)(function(){(0,f.updateCSS)(G,"@ant-design-icons",{prepend:!0,csp:T})},[])},we}var fa;function Mo(){if(fa)return yt;fa=1;var e=ee;Object.defineProperty(yt,"__esModule",{value:!0}),yt.default=void 0;var r=e(Po()),t=e(Pe),n=Pn(),a=["icon","className","onClick","style","primaryColor","secondaryColor"],o={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};function l(s){var E=s.primaryColor,h=s.secondaryColor;o.primaryColor=E,o.secondaryColor=h||(0,n.getSecondaryColor)(E),o.calculated=!!h}function f(){return(0,t.default)({},o)}var y=function(E){var h=E.icon,v=E.className,I=E.onClick,b=E.style,$=E.primaryColor,w=E.secondaryColor,k=(0,r.default)(E,a),W=o;if($&&(W={primaryColor:$,secondaryColor:w||(0,n.getSecondaryColor)($)}),(0,n.useInsertStyles)(),(0,n.warning)((0,n.isIconDefinition)(h),"icon should be icon definiton, but got ".concat(h)),!(0,n.isIconDefinition)(h))return null;var R=h;return R&&typeof R.icon=="function"&&(R=(0,t.default)((0,t.default)({},R),{},{icon:R.icon(W.primaryColor,W.secondaryColor)})),(0,n.generate)(R.icon,"svg-".concat(R.name),(0,t.default)({className:v,onClick:I,style:b,"data-icon":R.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},k))};return y.displayName="IconReact",y.getTwoToneColors=f,y.setTwoToneColors=l,yt.default=y,yt}var _t={},sa;function ju(){if(sa)return _t;sa=1;var e=ee;Object.defineProperty(_t,"__esModule",{value:!0}),_t.getTwoToneColor=o,_t.setTwoToneColor=a;var r=e(We),t=e(Mo()),n=Pn();function a(l){var f=(0,n.normalizeTwoToneColors)(l),y=(0,r.default)(f,2),s=y[0],E=y[1];return t.default.setTwoToneColors({primaryColor:s,secondaryColor:E})}function o(){var l=t.default.getTwoToneColors();return l.calculated?[l.primaryColor,l.secondaryColor]:l.primaryColor}return _t}var da;function je(){if(da)return gt;da=1;var e=ee,r=pe;Object.defineProperty(gt,"__esModule",{value:!0}),gt.default=void 0;var t=e(Pe),n=e(We),a=e(Me),o=e(Po()),l=b(ae),f=e(qe),y=e(rt),s=e(Mo()),E=ju(),h=Pn(),v=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];function I(w){if(typeof WeakMap!="function")return null;var k=new WeakMap,W=new WeakMap;return(I=function(G){return G?W:k})(w)}function b(w,k){if(!k&&w&&w.__esModule)return w;if(w===null||r(w)!="object"&&typeof w!="function")return{default:w};var W=I(k);if(W&&W.has(w))return W.get(w);var R={__proto__:null},G=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var x in w)if(x!=="default"&&{}.hasOwnProperty.call(w,x)){var T=G?Object.getOwnPropertyDescriptor(w,x):null;T&&(T.get||T.set)?Object.defineProperty(R,x,T):R[x]=w[x]}return R.default=w,W&&W.set(w,R),R}(0,E.setTwoToneColor)("#1890ff");var $=l.forwardRef(function(w,k){var W=w.className,R=w.icon,G=w.spin,x=w.rotate,T=w.tabIndex,O=w.onClick,S=w.twoToneColor,P=(0,o.default)(w,v),F=l.useContext(y.default),Y=F.prefixCls,j=Y===void 0?"anticon":Y,M=F.rootClassName,V=(0,f.default)(M,j,(0,a.default)((0,a.default)({},"".concat(j,"-").concat(R.name),!!R.name),"".concat(j,"-spin"),!!G||R.name==="loading"),W),X=T;X===void 0&&O&&(X=-1);var Q=x?{msTransform:"rotate(".concat(x,"deg)"),transform:"rotate(".concat(x,"deg)")}:void 0,K=(0,h.normalizeTwoToneColors)(S),L=(0,n.default)(K,2),p=L[0],_=L[1];return l.createElement("span",(0,t.default)((0,t.default)({role:"img","aria-label":R.name},P),{},{ref:k,tabIndex:X,onClick:O,className:V}),l.createElement(s.default,{icon:R,primaryColor:p,secondaryColor:_,style:Q}))});return $.displayName="AntdIcon",$.getTwoToneColor=E.getTwoToneColor,$.setTwoToneColor=E.setTwoToneColor,gt.default=$,gt}var wn=ee,Lu=pe;Object.defineProperty(nr,"__esModule",{value:!0});nr.default=void 0;var va=wn(Pe),No=Fu(ae),qu=wn(bu()),Wu=wn(je());function $o(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return($o=function(a){return a?t:r})(e)}function Fu(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||Lu(e)!="object"&&typeof e!="function")return{default:e};var t=$o(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var Bu=function(r,t){return No.createElement(Wu.default,(0,va.default)((0,va.default)({},r),{},{ref:t,icon:qu.default}))},zu=No.forwardRef(Bu);nr.default=zu;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(nr);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(Qr,Qr.exports);var ko=Qr.exports,Jr={exports:{}},or={},Ft={},pa;function Uu(){if(pa)return Ft;pa=1,Object.defineProperty(Ft,"__esModule",{value:!0});var e={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"};return Ft.default=e,Ft}var On=ee,Gu=pe;Object.defineProperty(or,"__esModule",{value:!0});or.default=void 0;var ma=On(Pe),Ao=Vu(ae),Hu=On(Uu()),Yu=On(je());function Do(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return(Do=function(a){return a?t:r})(e)}function Vu(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||Gu(e)!="object"&&typeof e!="function")return{default:e};var t=Do(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var Ku=function(r,t){return Ao.createElement(Yu.default,(0,ma.default)((0,ma.default)({},r),{},{ref:t,icon:Hu.default}))},Qu=Ao.forwardRef(Ku);or.default=Qu;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(or);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(Jr,Jr.exports);var jo=Jr.exports,Zr={exports:{}},ir={},Bt={},ha;function Xu(){if(ha)return Bt;ha=1,Object.defineProperty(Bt,"__esModule",{value:!0});var e={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};return Bt.default=e,Bt}var Rn=ee,Ju=pe;Object.defineProperty(ir,"__esModule",{value:!0});ir.default=void 0;var ga=Rn(Pe),Lo=tc(ae),Zu=Rn(Xu()),ec=Rn(je());function qo(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return(qo=function(a){return a?t:r})(e)}function tc(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||Ju(e)!="object"&&typeof e!="function")return{default:e};var t=qo(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var rc=function(r,t){return Lo.createElement(ec.default,(0,ga.default)((0,ga.default)({},r),{},{ref:t,icon:Zu.default}))},nc=Lo.forwardRef(rc);ir.default=nc;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(ir);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(Zr,Zr.exports);var Wo=Zr.exports,en={exports:{}},lr={},zt={},ya;function ac(){if(ya)return zt;ya=1,Object.defineProperty(zt,"__esModule",{value:!0});var e={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z"}}]},name:"info-circle",theme:"outlined"};return zt.default=e,zt}var En=ee,oc=pe;Object.defineProperty(lr,"__esModule",{value:!0});lr.default=void 0;var _a=En(Pe),Fo=uc(ae),ic=En(ac()),lc=En(je());function Bo(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return(Bo=function(a){return a?t:r})(e)}function uc(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||oc(e)!="object"&&typeof e!="function")return{default:e};var t=Bo(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(n,o,l):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var cc=function(r,t){return Fo.createElement(lc.default,(0,_a.default)((0,_a.default)({},r),{},{ref:t,icon:ic.default}))},fc=Fo.forwardRef(cc);lr.default=fc;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(lr);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(en,en.exports);var zo=en.exports,at={},Uo={exports:{}};(function(e){var r=pe.default;function t(){e.exports=t=function(){return a},e.exports.__esModule=!0,e.exports.default=e.exports;var n,a={},o=Object.prototype,l=o.hasOwnProperty,f=Object.defineProperty||function(p,_,C){p[_]=C.value},y=typeof Symbol=="function"?Symbol:{},s=y.iterator||"@@iterator",E=y.asyncIterator||"@@asyncIterator",h=y.toStringTag||"@@toStringTag";function v(p,_,C){return Object.defineProperty(p,_,{value:C,enumerable:!0,configurable:!0,writable:!0}),p[_]}try{v({},"")}catch{v=function(C,A,q){return C[A]=q}}function I(p,_,C,A){var q=_&&_.prototype instanceof G?_:G,z=Object.create(q.prototype),Z=new K(A||[]);return f(z,"_invoke",{value:M(p,C,Z)}),z}function b(p,_,C){try{return{type:"normal",arg:p.call(_,C)}}catch(A){return{type:"throw",arg:A}}}a.wrap=I;var $="suspendedStart",w="suspendedYield",k="executing",W="completed",R={};function G(){}function x(){}function T(){}var O={};v(O,s,function(){return this});var S=Object.getPrototypeOf,P=S&&S(S(L([])));P&&P!==o&&l.call(P,s)&&(O=P);var F=T.prototype=G.prototype=Object.create(O);function Y(p){["next","throw","return"].forEach(function(_){v(p,_,function(C){return this._invoke(_,C)})})}function j(p,_){function C(q,z,Z,te){var re=b(p[q],p,z);if(re.type!=="throw"){var ne=re.arg,oe=ne.value;return oe&&r(oe)=="object"&&l.call(oe,"__await")?_.resolve(oe.__await).then(function(ue){C("next",ue,Z,te)},function(ue){C("throw",ue,Z,te)}):_.resolve(oe).then(function(ue){ne.value=ue,Z(ne)},function(ue){return C("throw",ue,Z,te)})}te(re.arg)}var A;f(this,"_invoke",{value:function(z,Z){function te(){return new _(function(re,ne){C(z,Z,re,ne)})}return A=A?A.then(te,te):te()}})}function M(p,_,C){var A=$;return function(q,z){if(A===k)throw Error("Generator is already running");if(A===W){if(q==="throw")throw z;return{value:n,done:!0}}for(C.method=q,C.arg=z;;){var Z=C.delegate;if(Z){var te=V(Z,C);if(te){if(te===R)continue;return te}}if(C.method==="next")C.sent=C._sent=C.arg;else if(C.method==="throw"){if(A===$)throw A=W,C.arg;C.dispatchException(C.arg)}else C.method==="return"&&C.abrupt("return",C.arg);A=k;var re=b(p,_,C);if(re.type==="normal"){if(A=C.done?W:w,re.arg===R)continue;return{value:re.arg,done:C.done}}re.type==="throw"&&(A=W,C.method="throw",C.arg=re.arg)}}}function V(p,_){var C=_.method,A=p.iterator[C];if(A===n)return _.delegate=null,C==="throw"&&p.iterator.return&&(_.method="return",_.arg=n,V(p,_),_.method==="throw")||C!=="return"&&(_.method="throw",_.arg=new TypeError("The iterator does not provide a '"+C+"' method")),R;var q=b(A,p.iterator,_.arg);if(q.type==="throw")return _.method="throw",_.arg=q.arg,_.delegate=null,R;var z=q.arg;return z?z.done?(_[p.resultName]=z.value,_.next=p.nextLoc,_.method!=="return"&&(_.method="next",_.arg=n),_.delegate=null,R):z:(_.method="throw",_.arg=new TypeError("iterator result is not an object"),_.delegate=null,R)}function X(p){var _={tryLoc:p[0]};1 in p&&(_.catchLoc=p[1]),2 in p&&(_.finallyLoc=p[2],_.afterLoc=p[3]),this.tryEntries.push(_)}function Q(p){var _=p.completion||{};_.type="normal",delete _.arg,p.completion=_}function K(p){this.tryEntries=[{tryLoc:"root"}],p.forEach(X,this),this.reset(!0)}function L(p){if(p||p===""){var _=p[s];if(_)return _.call(p);if(typeof p.next=="function")return p;if(!isNaN(p.length)){var C=-1,A=function q(){for(;++C=0;--q){var z=this.tryEntries[q],Z=z.completion;if(z.tryLoc==="root")return A("end");if(z.tryLoc<=this.prev){var te=l.call(z,"catchLoc"),re=l.call(z,"finallyLoc");if(te&&re){if(this.prev=0;--A){var q=this.tryEntries[A];if(q.tryLoc<=this.prev&&l.call(q,"finallyLoc")&&this.prev=0;--C){var A=this.tryEntries[C];if(A.finallyLoc===_)return this.complete(A.completion,A.afterLoc),Q(A),R}},catch:function(_){for(var C=this.tryEntries.length-1;C>=0;--C){var A=this.tryEntries[C];if(A.tryLoc===_){var q=A.completion;if(q.type==="throw"){var z=q.arg;Q(A)}return z}}throw Error("illegal catch attempt")},delegateYield:function(_,C,A){return this.delegate={iterator:L(_),resultName:C,nextLoc:A},this.method==="next"&&(this.arg=n),R}},a}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports})(Uo);var Go=Uo.exports,Ho={exports:{}};(function(e){function r(n,a,o,l,f,y,s){try{var E=n[y](s),h=E.value}catch(v){return void o(v)}E.done?a(h):Promise.resolve(h).then(l,f)}function t(n){return function(){var a=this,o=arguments;return new Promise(function(l,f){var y=n.apply(a,o);function s(h){r(y,l,f,s,E,"next",h)}function E(h){r(y,l,f,s,E,"throw",h)}s(void 0)})}}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports})(Ho);var sc=Ho.exports,dc=me.default,ur=ee.default;Object.defineProperty(at,"__esModule",{value:!0});at._r=bc;at._u=Oc;at.render=xc;at.unmount=Rc;var tr=ur(Go),Yo=ur(sc),vc=ur(pe),pc=ur(Pe),mc=dc(Ga),wt=(0,pc.default)({},mc),hc=wt.version,qr=wt.render,gc=wt.unmountComponentAtNode,cr;try{var yc=Number((hc||"").split(".")[0]);yc>=18&&(cr=wt.createRoot)}catch{}function Ca(e){var r=wt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;r&&(0,vc.default)(r)==="object"&&(r.usingClientEntryPoint=e)}var rr="__rc_react_root__";function _c(e,r){Ca(!0);var t=r[rr]||cr(r);Ca(!1),t.render(e),r[rr]=t}function Cc(e,r){qr==null||qr(e,r)}function bc(e,r){}function xc(e,r){if(cr){_c(e,r);return}Cc(e,r)}function Pc(e){return tn.apply(this,arguments)}function tn(){return tn=(0,Yo.default)((0,tr.default)().mark(function e(r){return(0,tr.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",Promise.resolve().then(function(){var a;(a=r[rr])===null||a===void 0||a.unmount(),delete r[rr]}));case 1:case"end":return n.stop()}},e)})),tn.apply(this,arguments)}function wc(e){gc(e)}function Oc(e){}function Rc(e){return rn.apply(this,arguments)}function rn(){return rn=(0,Yo.default)((0,tr.default)().mark(function e(r){return(0,tr.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(cr===void 0){n.next=2;break}return n.abrupt("return",Pc(r));case 2:wc(r);case 3:case"end":return n.stop()}},e)})),rn.apply(this,arguments)}var Wr={},fr={},Ec=me.default;Object.defineProperty(fr,"__esModule",{value:!0});fr.default=Ic;var Sc=Ec(ae);function Ic(e,r,t){var n=Sc.useRef({});return(!("value"in n.current)||t(n.current.condition,r))&&(n.current.value=e(),n.current.condition=r),n.current.value}var sr={},Vo={exports:{}};(function(e){var r=_o,t=vo,n=hn,a=xo;function o(l){return r(l)||t(l)||n(l)||a()}e.exports=o,e.exports.__esModule=!0,e.exports.default=e.exports})(Vo);var Tc=Vo.exports,Sn={};Object.defineProperty(Sn,"__esModule",{value:!0});Sn.default=Mc;function Mc(e,r){for(var t=e,n=0;n3&&arguments[3]!==void 0?arguments[3]:!1;return r.length&&n&&t===void 0&&!(0,nn.default)(e,r.slice(0,-1))?e:Xo(e,r,t,n)}function kc(e){return(0,Ko.default)(e)==="object"&&e!==null&&Object.getPrototypeOf(e)===Object.prototype}function ba(e){return Array.isArray(e)?[]:{}}var Ac=typeof Reflect>"u"?Object.keys:Reflect.ownKeys;function Dc(){for(var e=arguments.length,r=new Array(e),t=0;t1&&arguments[1]!==void 0?arguments[1]:R,_=arguments.length>2&&arguments[2]!==void 0?arguments[2]:G,C;switch(L){case"top":C={left:"50%",transform:"translateX(-50%)",right:"auto",top:p,bottom:"auto"};break;case"topLeft":C={left:0,top:p,bottom:"auto"};break;case"topRight":C={right:0,top:p,bottom:"auto"};break;case"bottom":C={left:"50%",transform:"translateX(-50%)",right:"auto",top:"auto",bottom:_};break;case"bottomLeft":C={left:0,top:"auto",bottom:_};break;default:C={right:0,top:"auto",bottom:_};break}return C}function M(L,p){var _=L.placement,C=_===void 0?T:_,A=L.top,q=L.bottom,z=L.getContainer,Z=z===void 0?O:z,te=L.prefixCls,re=(0,b.globalConfig)(),ne=re.getPrefixCls,oe=re.getIconPrefixCls,ue=ne("notification",te||x),_e=oe(),ve="".concat(ue,"-").concat(C),xe=k[ve];if(xe){Promise.resolve(xe).then(function(le){p({prefixCls:"".concat(ue,"-notice"),iconPrefixCls:_e,instance:le})});return}var de=(0,h.default)("".concat(ue,"-").concat(C),(0,o.default)({},"".concat(ue,"-rtl"),P===!0));k[ve]=new Promise(function(le){v.default.newInstance({prefixCls:ue,className:de,style:j(C,A,q),getContainer:Z,maxCount:F},function(ce){le(ce),p({prefixCls:"".concat(ue,"-notice"),iconPrefixCls:_e,instance:ce})})})}var V={success:l.default,info:E.default,error:f.default,warning:s.default};function X(L,p,_){var C=L.duration,A=L.icon,q=L.type,z=L.description,Z=L.message,te=L.btn,re=L.onClose,ne=L.onClick,oe=L.key,ue=L.style,_e=L.className,ve=L.closeIcon,xe=ve===void 0?S:ve,de=L.props,le=C===void 0?W:C,ce=null;A?ce=I.createElement("span",{className:"".concat(p,"-icon")},L.icon):q&&(ce=I.createElement(V[q]||null,{className:"".concat(p,"-icon ").concat(p,"-icon-").concat(q)}));var Ce=typeof xe>"u"?I.createElement("span",{className:"".concat(p,"-close-x")},I.createElement(y.default,{className:"".concat(p,"-close-icon")})):xe,Ee=!z&&ce?I.createElement("span",{className:"".concat(p,"-message-single-line-auto-margin")}):null;return{content:I.createElement(b.default,{iconPrefixCls:_},I.createElement("div",{className:ce?"".concat(p,"-with-icon"):"",role:"alert"},ce,I.createElement("div",{className:"".concat(p,"-message")},Ee,Z),I.createElement("div",{className:"".concat(p,"-description")},z),te?I.createElement("span",{className:"".concat(p,"-btn")},te):null)),duration:le,closable:!0,closeIcon:Ce,onClose:re,onClick:ne,key:oe,style:ue||{},className:(0,h.default)(_e,(0,o.default)({},"".concat(p,"-").concat(q),!!q)),props:de}}function Q(L){M(L,function(p){var _=p.prefixCls,C=p.iconPrefixCls,A=p.instance;A.notice(X(L,_,C))})}var K={open:Q,close:function(p){Object.keys(k).forEach(function(_){return Promise.resolve(k[_]).then(function(C){C.removeNotice(p)})})},config:Y,destroy:function(){Object.keys(k).forEach(function(p){Promise.resolve(k[p]).then(function(_){_.destroy()}),delete k[p]})}};["success","info","warning","error"].forEach(function(L){K[L]=function(p){return K.open((0,a.default)((0,a.default)({},p),{type:L}))}}),K.warn=K.warning,K.useNotification=(0,$.default)(M,X),e.getInstance=function(p){return w(void 0,void 0,void 0,(0,n.default)().mark(function _(){return(0,n.default)().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:return A.abrupt("return",null);case 1:case"end":return A.stop()}},_)}))},e.default=K}(Ur)),Ur}var He={},Yf=me.default,Vf=ee.default;Object.defineProperty(He,"__esModule",{value:!0});He.ConfigContext=He.ConfigConsumer=void 0;He.withConfigConsumer=Zf;var Kf=Vf(ye),sn=Yf(ae),Qf=function(r,t){return t||(r?"ant-".concat(r):"ant")},Xf=He.ConfigContext=sn.createContext({getPrefixCls:Qf}),Jf=He.ConfigConsumer=Xf.Consumer;function Zf(e){return function(t){var n=function(l){return sn.createElement(Jf,null,function(f){var y=e.prefixCls,s=f.getPrefixCls,E=l.prefixCls,h=s(y,E);return sn.createElement(t,(0,Kf.default)({},f,l,{prefixCls:h}))})},a=t.constructor;return a&&a.displayName||t.name,n}}var Pr={};const es=tt(iu);var Ai=ee.default;Object.defineProperty(Pr,"__esModule",{value:!0});Pr.getStyle=Di;Pr.registerTheme=as;var Fa=wo,Hr=es,ts=Ai(nt),rs=Fe;Ai(Be);var ns="-ant-".concat(Date.now(),"-").concat(Math.random());function Di(e,r){var t={},n=function(E,h){var v=E.clone();return v=(h==null?void 0:h(v))||v,v.toRgbString()},a=function(E,h){var v=new Hr.TinyColor(E),I=(0,Fa.generate)(v.toRgbString());t["".concat(h,"-color")]=n(v),t["".concat(h,"-color-disabled")]=I[1],t["".concat(h,"-color-hover")]=I[4],t["".concat(h,"-color-active")]=I[6],t["".concat(h,"-color-outline")]=v.clone().setAlpha(.2).toRgbString(),t["".concat(h,"-color-deprecated-bg")]=I[0],t["".concat(h,"-color-deprecated-border")]=I[2]};if(r.primaryColor){a(r.primaryColor,"primary");var o=new Hr.TinyColor(r.primaryColor),l=(0,Fa.generate)(o.toRgbString());l.forEach(function(s,E){t["primary-".concat(E+1)]=s}),t["primary-color-deprecated-l-35"]=n(o,function(s){return s.lighten(35)}),t["primary-color-deprecated-l-20"]=n(o,function(s){return s.lighten(20)}),t["primary-color-deprecated-t-20"]=n(o,function(s){return s.tint(20)}),t["primary-color-deprecated-t-50"]=n(o,function(s){return s.tint(50)}),t["primary-color-deprecated-f-12"]=n(o,function(s){return s.setAlpha(s.getAlpha()*.12)});var f=new Hr.TinyColor(l[0]);t["primary-color-active-deprecated-f-30"]=n(f,function(s){return s.setAlpha(s.getAlpha()*.3)}),t["primary-color-active-deprecated-d-02"]=n(f,function(s){return s.darken(2)})}r.successColor&&a(r.successColor,"success"),r.warningColor&&a(r.warningColor,"warning"),r.errorColor&&a(r.errorColor,"error"),r.infoColor&&a(r.infoColor,"info");var y=Object.keys(t).map(function(s){return"--".concat(e,"-").concat(s,": ").concat(t[s],";")});return` - :root { - `.concat(y.join(` -`),` - } - `).trim()}function as(e,r){var t=Di(e,r);(0,ts.default)()&&(0,rs.updateCSS)(t,"".concat(ns,"-dynamic-theme"))}var Wn={};(function(e){var r=me.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.DisabledContextProvider=void 0;var t=r(ae),n=t.createContext(!1);e.DisabledContextProvider=function(o){var l=o.children,f=o.disabled,y=t.useContext(n);return t.createElement(n.Provider,{value:f??y},l)},e.default=n})(Wn);var Fn={};(function(e){var r=me.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SizeContextProvider=void 0;var t=r(ae),n=t.createContext(void 0);e.SizeContextProvider=function(o){var l=o.children,f=o.size;return t.createElement(n.Consumer,null,function(y){return t.createElement(n.Provider,{value:f||y},l)})},e.default=n})(Fn);var Ba;function Ne(){return Ba||(Ba=1,function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"ConfigConsumer",{enumerable:!0,get:function(){return b.ConfigConsumer}}),Object.defineProperty(e,"ConfigContext",{enumerable:!0,get:function(){return b.ConfigContext}}),e.globalConfig=e.defaultPrefixCls=e.defaultIconPrefixCls=e.default=e.configConsumerProps=void 0;var n=t(ye),a=t(rt),o=t(fr),l=r(ae),f=sr,y=t(Jo),s=r(Zo),E=t(Nn),h=t(dr),v=t(Mi()),I=t(Hf()),b=He,$=Pr,w=Wn,k=r(Fn);e.configConsumerProps=["getTargetContainer","getPopupContainer","rootPrefixCls","getPrefixCls","renderEmpty","csp","autoInsertSpaceInButton","locale","pageHeader"];var W=["getTargetContainer","getPopupContainer","renderEmpty","pageHeader","input","pagination","form"],R=e.defaultPrefixCls="ant",G=e.defaultIconPrefixCls="anticon",x,T;function O(){return x||R}function S(){return T||G}var P=function(M){var V=M.prefixCls,X=M.iconPrefixCls,Q=M.theme;V!==void 0&&(x=V),X!==void 0&&(T=X),Q&&(0,$.registerTheme)(O(),Q)};e.globalConfig=function(){return{getPrefixCls:function(V,X){return X||(V?"".concat(O(),"-").concat(V):O())},getIconPrefixCls:S,getRootPrefixCls:function(V,X){return V||x||(X&&X.includes("-")?X.replace(/^(.*)-[^-]*$/,"$1"):O())}}};var F=function(M){var V=M.children,X=M.csp,Q=M.autoInsertSpaceInButton,K=M.form,L=M.locale,p=M.componentSize,_=M.direction,C=M.space,A=M.virtual,q=M.dropdownMatchSelectWidth,z=M.legacyLocale,Z=M.parentContext,te=M.iconPrefixCls,re=M.componentDisabled,ne=l.useCallback(function(de,le){var ce=M.prefixCls;if(le)return le;var Ce=ce||Z.getPrefixCls("");return de?"".concat(Ce,"-").concat(de):Ce},[Z.getPrefixCls,M.prefixCls]),oe=(0,n.default)((0,n.default)({},Z),{csp:X,autoInsertSpaceInButton:Q,locale:L||z,direction:_,space:C,virtual:A,dropdownMatchSelectWidth:q,getPrefixCls:ne});W.forEach(function(de){var le=M[de];le&&(oe[de]=le)});var ue=(0,o.default)(function(){return oe},oe,function(de,le){var ce=Object.keys(de),Ce=Object.keys(le);return ce.length!==Ce.length||ce.some(function(Ee){return de[Ee]!==le[Ee]})}),_e=l.useMemo(function(){return{prefixCls:te,csp:X}},[te,X]),ve=V,xe=l.useMemo(function(){var de,le,ce,Ce;return(0,f.merge)(((de=h.default.Form)===null||de===void 0?void 0:de.defaultValidateMessages)||{},((ce=(le=ue.locale)===null||le===void 0?void 0:le.Form)===null||ce===void 0?void 0:ce.defaultValidateMessages)||{},((Ce=ue.form)===null||Ce===void 0?void 0:Ce.validateMessages)||{},(K==null?void 0:K.validateMessages)||{})},[ue,K==null?void 0:K.validateMessages]);return Object.keys(xe).length>0&&(ve=l.createElement(y.default.Provider,{value:xe},V)),L&&(ve=l.createElement(s.default,{locale:L,_ANT_MARK__:s.ANT_MARK},ve)),(te||X)&&(ve=l.createElement(a.default.Provider,{value:_e},ve)),p&&(ve=l.createElement(k.SizeContextProvider,{size:p},ve)),re!==void 0&&(ve=l.createElement(w.DisabledContextProvider,{disabled:re},ve)),l.createElement(b.ConfigContext.Provider,{value:ue},ve)},Y=function(M){return l.useEffect(function(){M.direction&&(v.default.config({rtl:M.direction==="rtl"}),I.default.config({rtl:M.direction==="rtl"}))},[M.direction]),l.createElement(E.default,null,function(V,X,Q){return l.createElement(b.ConfigConsumer,null,function(K){return l.createElement(F,(0,n.default)({parentContext:K,legacyLocale:Q},M))})})};Y.ConfigContext=b.ConfigContext,Y.SizeContext=k.default,Y.config=P,e.default=Y}(Wr)),Wr}var ji={},Li={},Bn={},os=me.default,is=ee.default;Object.defineProperty(Bn,"__esModule",{value:!0});Bn.default=us;var ls=is(We),Yr=os(ae);function us(e){var r=Yr.useRef(!1),t=Yr.useState(e),n=(0,ls.default)(t,2),a=n[0],o=n[1];Yr.useEffect(function(){return r.current=!1,function(){r.current=!0}},[]);function l(f,y){y&&r.current||o(f)}return[a,l]}var zn={},wr={},Or={};Object.defineProperty(Or,"__esModule",{value:!0});Or.default=cs;function cs(e,r){var t=Object.assign({},e);return Array.isArray(r)&&r.forEach(function(n){delete t[n]}),t}var Un={},Gn={},Rr={},fs=ee.default;Object.defineProperty(Rr,"__esModule",{value:!0});Rr.default=ms;var ss=fs(pe),ds=Symbol.for("react.element"),vs=Symbol.for("react.transitional.element"),ps=Symbol.for("react.fragment");function ms(e){return e&&(0,ss.default)(e)==="object"&&(e.$$typeof===ds||e.$$typeof===vs)&&e.type===ps}var qi=ee.default;Object.defineProperty(Gn,"__esModule",{value:!0});Gn.default=dn;var hs=qi(Rr),gs=qi(ae);function dn(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=[];return gs.default.Children.forEach(e,function(n){n==null&&!r.keepEmpty||(Array.isArray(n)?t=t.concat(dn(n)):(0,hs.default)(n)&&n.props?t=t.concat(dn(n.props.children,r)):t.push(n))}),t}(function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.useCompactItemContext=e.default=e.SpaceCompactItemContext=e.NoCompactStyle=void 0;var n=t(ye),a=t(Me),o=t(qe),l=t(Gn),f=r(ae),y=Ne(),s=function(I,b){var $={};for(var w in I)Object.prototype.hasOwnProperty.call(I,w)&&b.indexOf(w)<0&&($[w]=I[w]);if(I!=null&&typeof Object.getOwnPropertySymbols=="function")for(var k=0,w=Object.getOwnPropertySymbols(I);k=19)return!0;var a=(0,Vr.isMemo)(r)?r.type.type:r.type;return!(typeof a=="function"&&!((t=a.prototype)!==null&&t!==void 0&&t.render)&&a.$$typeof!==Vr.ForwardRef||typeof r=="function"&&!((n=r.prototype)!==null&&n!==void 0&&n.render)&&r.$$typeof!==Vr.ForwardRef)};function Vn(e){return(0,zi.isValidElement)(e)&&!(0,Ps.default)(e)}Oe.supportNodeRef=function(r){return Vn(r)&&Es(r)};Oe.getNodeRef=function(r){if(r&&Vn(r)){var t=r;return t.props.propertyIsEnumerable("ref")?t.props.ref:t.ref}return null};var Ui={},Er={};Object.defineProperty(Er,"__esModule",{value:!0});Er.default=void 0;var Gi=function(r){return+setTimeout(r,16)},Hi=function(r){return clearTimeout(r)};typeof window<"u"&&"requestAnimationFrame"in window&&(Gi=function(r){return window.requestAnimationFrame(r)},Hi=function(r){return window.cancelAnimationFrame(r)});var za=0,Kn=new Map;function Yi(e){Kn.delete(e)}var Vi=function(r){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;za+=1;var n=za;function a(o){if(o===0)Yi(n),r();else{var l=Gi(function(){a(o-1)});Kn.set(n,l)}}return a(t),n};Vi.cancel=function(e){var r=Kn.get(e);return Yi(e),Hi(r)};Er.default=Vi;(function(e){var r=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var t=r(Er),n=0,a={};function o(l){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,y=n++,s=f;function E(){s-=1,s<=0?(l(),delete a[y]):a[y]=(0,t.default)(E)}return a[y]=(0,t.default)(E),y}o.cancel=function(f){f!==void 0&&(t.default.cancel(a[f]),delete a[f])},o.ids=a})(Ui);(function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(gi),a=t(_i),o=t(Ii),l=t(Ri),f=t(wi),y=t(Ln),s=t(xi),E=Fe,h=Oe,v=r(ae),I=Ne(),b=t(Ui),$=ze;function w(T,O,S){return O=(0,f.default)(O),(0,o.default)(T,(0,l.default)()?Reflect.construct(O,S||[],(0,f.default)(T).constructor):O.apply(T,S))}var k;function W(T){return!T||T.offsetParent===null||T.hidden}function R(T){return T instanceof Document?T.body:Array.from(T.childNodes).find(function(O){return(O==null?void 0:O.nodeType)===Node.ELEMENT_NODE})}function G(T){var O=(T||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return O&&O[1]&&O[2]&&O[3]?!(O[1]===O[2]&&O[2]===O[3]):!0}var x=function(T){(0,s.default)(O,T);function O(){var S;return(0,n.default)(this,O),S=w(this,O,arguments),S.containerRef=v.createRef(),S.animationStart=!1,S.destroyed=!1,S.onClick=function(P,F){var Y,j,M=S.props,V=M.insertExtraNode,X=M.disabled;if(!(X||!P||W(P)||P.className.includes("-leave"))){S.extraNode=document.createElement("div");var Q=(0,y.default)(S),K=Q.extraNode,L=S.context.getPrefixCls;K.className="".concat(L(""),"-click-animating-node");var p=S.getAttributeName();if(P.setAttribute(p,"true"),F&&F!=="#fff"&&F!=="#ffffff"&&F!=="rgb(255, 255, 255)"&&F!=="rgba(255, 255, 255, 1)"&&G(F)&&!/rgba\((?:\d*, ){3}0\)/.test(F)&&F!=="transparent"){K.style.borderColor=F;var _=((Y=P.getRootNode)===null||Y===void 0?void 0:Y.call(P))||P.ownerDocument,C=(j=R(_))!==null&&j!==void 0?j:_;k=(0,E.updateCSS)(` - [`.concat(L(""),"-click-animating-without-extra-node='true']::after, .").concat(L(""),`-click-animating-node { - --antd-wave-shadow-color: `).concat(F,`; - }`),"antd-wave",{csp:S.csp,attachTo:C})}V&&P.appendChild(K),["transition","animation"].forEach(function(A){P.addEventListener("".concat(A,"start"),S.onTransitionStart),P.addEventListener("".concat(A,"end"),S.onTransitionEnd)})}},S.onTransitionStart=function(P){if(!S.destroyed){var F=S.containerRef.current;!P||P.target!==F||S.animationStart||S.resetEffect(F)}},S.onTransitionEnd=function(P){!P||P.animationName!=="fadeEffect"||S.resetEffect(P.target)},S.bindAnimationEvent=function(P){if(!(!P||!P.getAttribute||P.getAttribute("disabled")||P.className.includes("disabled"))){var F=function(j){if(!(j.target.tagName==="INPUT"||W(j.target))){S.resetEffect(P);var M=getComputedStyle(P).getPropertyValue("border-top-color")||getComputedStyle(P).getPropertyValue("border-color")||getComputedStyle(P).getPropertyValue("background-color");S.clickWaveTimeoutId=window.setTimeout(function(){return S.onClick(P,M)},0),b.default.cancel(S.animationStartId),S.animationStart=!0,S.animationStartId=(0,b.default)(function(){S.animationStart=!1},10)}};return P.addEventListener("click",F,!0),{cancel:function(){P.removeEventListener("click",F,!0)}}}},S.renderWave=function(P){var F=P.csp,Y=S.props.children;if(S.csp=F,!v.isValidElement(Y))return Y;var j=S.containerRef;return(0,h.supportRef)(Y)&&(j=(0,h.composeRef)(Y.ref,S.containerRef)),(0,$.cloneElement)(Y,{ref:j})},S}return(0,a.default)(O,[{key:"componentDidMount",value:function(){this.destroyed=!1;var P=this.containerRef.current;!P||P.nodeType!==1||(this.instance=this.bindAnimationEvent(P))}},{key:"componentWillUnmount",value:function(){this.instance&&this.instance.cancel(),this.clickWaveTimeoutId&&clearTimeout(this.clickWaveTimeoutId),this.destroyed=!0}},{key:"getAttributeName",value:function(){var P=this.context.getPrefixCls,F=this.props.insertExtraNode;return F?"".concat(P(""),"-click-animating"):"".concat(P(""),"-click-animating-without-extra-node")}},{key:"resetEffect",value:function(P){var F=this;if(!(!P||P===this.extraNode||!(P instanceof Element))){var Y=this.props.insertExtraNode,j=this.getAttributeName();P.setAttribute(j,"false"),k&&(k.innerHTML=""),Y&&this.extraNode&&P.contains(this.extraNode)&&P.removeChild(this.extraNode),["transition","animation"].forEach(function(M){P.removeEventListener("".concat(M,"start"),F.onTransitionStart),P.removeEventListener("".concat(M,"end"),F.onTransitionEnd)})}}},{key:"render",value:function(){return v.createElement(I.ConfigConsumer,null,this.renderWave)}}]),O}(v.Component);x.contextType=I.ConfigContext,e.default=x})(Bi);var Ki={};(function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.GroupSizeContext=void 0;var n=t(ye),a=t(Me),o=t(qe),l=r(ae),f=Ne();t(Be);var y=function(h,v){var I={};for(var b in h)Object.prototype.hasOwnProperty.call(h,b)&&v.indexOf(b)<0&&(I[b]=h[b]);if(h!=null&&typeof Object.getOwnPropertySymbols=="function")for(var $=0,b=Object.getOwnPropertySymbols(h);$=4.5;case"AAlarge":return o>=3;case"AAAsmall":return o>=7;default:return!1}}function Ya(e,r,t){t===void 0&&(t={includeFallbackColors:!1,level:"AA",size:"small"});for(var n=null,a=0,o=t.includeFallbackColors,u=t.level,f=t.size,y=0,s=r;ya&&(a=h,n=new De(E))}return Ga(e,n,{level:u,size:f})||!o?n:(t.includeFallbackColors=!1,Ya(e,["#fff","#000"],t))}function Qu(e,r){var t=new De(e),n="#"+Vr(t.r,t.g,t.b,t.a),a=n,o=t.gradientType?"GradientType = 1, ":"";if(r){var u=new De(r);a="#"+Vr(u.r,u.g,u.b,u.a)}return"progid:DXImageTransform.Microsoft.gradient(".concat(o,"startColorstr=").concat(n,",endColorstr=").concat(a,")")}function Xu(e,r){var t={r:Dr(e.r),g:Dr(e.g),b:Dr(e.b)};return e.a!==void 0&&(t.a=Number(e.a)),new De(t,r)}function Ju(){return new De({r:Math.random(),g:Math.random(),b:Math.random()})}function Ha(e){if(e===void 0&&(e={}),e.count!==void 0&&e.count!==null){var r=e.count,t=[];for(e.count=void 0;r>t.length;)e.count=null,e.seed&&(e.seed+=1),t.push(Ha(e));return e.count=r,t}var n=Zu(e.hue,e.seed),a=el(n,e),o=tl(n,a,e),u={h:n,s:a,v:o};return e.alpha!==void 0&&(u.a=e.alpha),new De(u)}function Zu(e,r){var t=nl(e),n=Zt(t,r);return n<0&&(n=360+n),n}function el(e,r){if(r.hue==="monochrome")return 0;if(r.luminosity==="random")return Zt([0,100],r.seed);var t=Ka(e).saturationRange,n=t[0],a=t[1];switch(r.luminosity){case"bright":n=55;break;case"dark":n=a-10;break;case"light":a=55;break}return Zt([n,a],r.seed)}function tl(e,r,t){var n=rl(e,r),a=100;switch(t.luminosity){case"dark":a=n+20;break;case"light":n=(a+n)/2;break;case"random":n=0,a=100;break}return Zt([n,a],t.seed)}function rl(e,r){for(var t=Ka(e).lowerBounds,n=0;n=a&&r<=u){var y=(f-o)/(u-a),s=o-y*a;return y*r+s}}return 0}function nl(e){var r=parseInt(e,10);if(!Number.isNaN(r)&&r<360&&r>0)return[r,r];if(typeof e=="string"){var t=mn.find(function(u){return u.name===e});if(t){var n=Va(t);if(n.hueRange)return n.hueRange}var a=new De(e);if(a.isValid){var o=a.toHsv().h;return[o,o]}}return[0,360]}function Ka(e){e>=334&&e<=360&&(e-=360);for(var r=0,t=mn;r=a.hueRange[0]&&e<=a.hueRange[1])return a}throw Error("Color not found")}function Zt(e,r){if(r===void 0)return Math.floor(e[0]+Math.random()*(e[1]+1-e[0]));var t=e[1]||1,n=e[0]||0;r=(r*9301+49297)%233280;var a=r/233280;return Math.floor(n+a*(t-n))}function Va(e){var r=e.lowerBounds[0][0],t=e.lowerBounds[e.lowerBounds.length-1][0],n=e.lowerBounds[e.lowerBounds.length-1][1],a=e.lowerBounds[0][1];return{name:e.name,hueRange:e.hueRange,lowerBounds:e.lowerBounds,saturationRange:[r,t],brightnessRange:[n,a]}}var mn=[{name:"monochrome",hueRange:null,lowerBounds:[[0,0],[100,0]]},{name:"red",hueRange:[-26,18],lowerBounds:[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]},{name:"orange",hueRange:[19,46],lowerBounds:[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]},{name:"yellow",hueRange:[47,62],lowerBounds:[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]},{name:"green",hueRange:[63,178],lowerBounds:[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]},{name:"blue",hueRange:[179,257],lowerBounds:[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]},{name:"purple",hueRange:[258,282],lowerBounds:[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]},{name:"pink",hueRange:[283,334],lowerBounds:[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]}];const al=Object.freeze(Object.defineProperty({__proto__:null,TinyColor:De,bounds:mn,convertDecimalToHex:Ru,convertHexToDecimal:Ou,default:ta,fromRatio:Xu,hslToRgb:Eu,hsvToRgb:Su,inputToRGB:Iu,isReadable:Ga,isValidCSSUnit:Tu,legacyRandom:Ju,mostReadable:Ya,names:Mu,numberInputToObject:Nu,parseIntFromHex:$u,random:Ha,readability:pn,rgbToHex:ku,rgbToHsl:Au,rgbToHsv:Du,rgbToRgb:ju,rgbaToArgbHex:Vr,rgbaToHex:Lu,stringInputToObject:qu,tinycolor:ta,toMsFilter:Qu},Symbol.toStringTag,{value:"Module"})),ol=Object.freeze(Object.defineProperty({__proto__:null,CSSMotionList:Fu,Provider:Bu,default:Wu},Symbol.toStringTag,{value:"Module"})),il=Object.freeze(Object.defineProperty({__proto__:null,default:zu},Symbol.toStringTag,{value:"Module"})),ul=Object.freeze(Object.defineProperty({__proto__:null,Panel:Ku,default:Hu},Symbol.toStringTag,{value:"Module"}));var Qa={exports:{}};(function(e){function r(){return e.exports=r=Object.assign?Object.assign.bind():function(t){for(var n=1;n"u"&&t(3);var h=Promise;function v(i,c){c&&i.then(function(l){c(null,l)},function(l){c(l)})}function I(i,c,l){typeof c=="function"&&i.then(c),typeof l=="function"&&i.catch(l)}function b(i){return typeof i!="string"&&(console.warn(i+" used as a key, but it is not a string."),i=String(i)),i}function $(){if(arguments.length&&typeof arguments[arguments.length-1]=="function")return arguments[arguments.length-1]}var w="local-forage-detect-blob-support",k=void 0,W={},O=Object.prototype.toString,G="readonly",x="readwrite";function T(i){for(var c=i.length,l=new ArrayBuffer(c),m=new Uint8Array(l),g=0;g=43)}}).catch(function(){return!1})}function S(i){return typeof k=="boolean"?h.resolve(k):R(i).then(function(c){return k=c,k})}function P(i){var c=W[i.name],l={};l.promise=new h(function(m,g){l.resolve=m,l.reject=g}),c.deferredOperations.push(l),c.dbReady?c.dbReady=c.dbReady.then(function(){return l.promise}):c.dbReady=l.promise}function F(i){var c=W[i.name],l=c.deferredOperations.pop();if(l)return l.resolve(),l.promise}function H(i,c){var l=W[i.name],m=l.deferredOperations.pop();if(m)return m.reject(c),m.promise}function j(i,c){return new h(function(l,m){if(W[i.name]=W[i.name]||A(),i.db)if(c)P(i),i.db.close();else return l(i.db);var g=[i.name];c&&g.push(i.version);var d=y.open.apply(y,g);c&&(d.onupgradeneeded=function(N){var D=d.result;try{D.createObjectStore(i.storeName),N.oldVersion<=1&&D.createObjectStore(w)}catch(B){if(B.name==="ConstraintError")console.warn('The database "'+i.name+'" has been upgraded from version '+N.oldVersion+" to version "+N.newVersion+', but the storage "'+i.storeName+'" already exists.');else throw B}}),d.onerror=function(N){N.preventDefault(),m(d.error)},d.onsuccess=function(){var N=d.result;N.onversionchange=function(D){D.target.close()},l(N),F(i)}})}function M(i){return j(i,!1)}function K(i){return j(i,!0)}function X(i,c){if(!i.db)return!0;var l=!i.db.objectStoreNames.contains(i.storeName),m=i.versioni.db.version;if(m&&(i.version!==c&&console.warn('The database "'+i.name+`" can't be downgraded from version `+i.db.version+" to version "+i.version+"."),i.version=i.db.version),g||l){if(l){var d=i.db.version+1;d>i.version&&(i.version=d)}return!0}return!1}function Q(i){return new h(function(c,l){var m=new FileReader;m.onerror=l,m.onloadend=function(g){var d=btoa(g.target.result||"");c({__local_forage_encoded_blob:!0,data:d,type:i.type})},m.readAsBinaryString(i)})}function V(i){var c=T(atob(i.data));return E([c],{type:i.type})}function L(i){return i&&i.__local_forage_encoded_blob}function p(i){var c=this,l=c._initReady().then(function(){var m=W[c._dbInfo.name];if(m&&m.dbReady)return m.dbReady});return I(l,i,i),l}function _(i){P(i);for(var c=W[i.name],l=c.forages,m=0;m0&&(!i.db||d.name==="InvalidStateError"||d.name==="NotFoundError"))return h.resolve().then(function(){if(!i.db||d.name==="NotFoundError"&&!i.db.objectStoreNames.contains(i.storeName)&&i.version<=i.db.version)return i.db&&(i.version=i.db.version+1),K(i)}).then(function(){return _(i).then(function(){C(i,c,l,m-1)})}).catch(l);l(d)}}function A(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function q(i){var c=this,l={db:null};if(i)for(var m in i)l[m]=i[m];var g=W[l.name];g||(g=A(),W[l.name]=g),g.forages.push(c),c._initReady||(c._initReady=c.ready,c.ready=p);var d=[];function N(){return h.resolve()}for(var D=0;D>4,Y[g++]=(N&15)<<4|D>>2,Y[g++]=(D&3)<<6|B&63;return U}function Qe(i){var c=new Uint8Array(i),l="",m;for(m=0;m>2],l+=ue[(c[m]&3)<<4|c[m+1]>>4],l+=ue[(c[m+1]&15)<<2|c[m+2]>>6],l+=ue[c[m+2]&63];return c.length%3===2?l=l.substring(0,l.length-1)+"=":c.length%3===1&&(l=l.substring(0,l.length-2)+"=="),l}function Sr(i,c){var l="";if(i&&(l=vt.call(i)),i&&(l==="[object ArrayBuffer]"||i.buffer&&vt.call(i.buffer)==="[object ArrayBuffer]")){var m,g=Ee;i instanceof ArrayBuffer?(m=i,g+=Ue):(m=i.buffer,l==="[object Int8Array]"?g+=lt:l==="[object Uint8Array]"?g+=ke:l==="[object Uint8ClampedArray]"?g+=ct:l==="[object Int16Array]"?g+=Ot:l==="[object Uint16Array]"?g+=Ke:l==="[object Int32Array]"?g+=ft:l==="[object Uint32Array]"?g+=st:l==="[object Float32Array]"?g+=Ve:l==="[object Float64Array]"?g+=Et:c(new Error("Failed to get type for BinaryArray"))),c(g+Qe(m))}else if(l==="[object Blob]"){var d=new FileReader;d.onload=function(){var N=ce+i.type+"~"+Qe(this.result);c(Ee+ut+N)},d.readAsArrayBuffer(i)}else try{c(JSON.stringify(i))}catch(N){console.error("Couldn't convert value into a JSON string: ",i),c(null,N)}}function Ge(i){if(i.substring(0,$e)!==Ee)return JSON.parse(i);var c=i.substring(dt),l=i.substring($e,dt),m;if(l===ut&&Ce.test(c)){var g=c.match(Ce);m=g[1],c=c.substring(g[0].length)}var d=Le(c);switch(l){case Ue:return d;case ut:return E([d],{type:m});case lt:return new Int8Array(d);case ke:return new Uint8Array(d);case ct:return new Uint8ClampedArray(d);case Ot:return new Int16Array(d);case Ke:return new Uint16Array(d);case ft:return new Int32Array(d);case st:return new Uint32Array(d);case Ve:return new Float32Array(d);case Et:return new Float64Array(d);default:throw new Error("Unkown type: "+l)}}var Xe={serialize:Sr,deserialize:Ge,stringToBuffer:Le,bufferToString:Qe};function be(i,c,l,m){i.executeSql("CREATE TABLE IF NOT EXISTS "+c.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],l,m)}function St(i){var c=this,l={db:null};if(i)for(var m in i)l[m]=typeof i[m]!="string"?i[m].toString():i[m];var g=new h(function(d,N){try{l.db=openDatabase(l.name,String(l.version),l.description,l.size)}catch(D){return N(D)}l.db.transaction(function(D){be(D,l,function(){c._dbInfo=l,d()},function(B,U){N(U)})},N)});return l.serializer=Xe,g}function Te(i,c,l,m,g,d){i.executeSql(l,m,g,function(N,D){D.code===D.SYNTAX_ERR?N.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[c.storeName],function(B,U){U.rows.length?d(B,D):be(B,c,function(){B.executeSql(l,m,g,d)},d)},d):d(N,D)},d)}function Ir(i,c){var l=this;i=b(i);var m=new h(function(g,d){l.ready().then(function(){var N=l._dbInfo;N.db.transaction(function(D){Te(D,N,"SELECT * FROM "+N.storeName+" WHERE key = ? LIMIT 1",[i],function(B,U){var Y=U.rows.length?U.rows.item(0).value:null;Y&&(Y=N.serializer.deserialize(Y)),g(Y)},function(B,U){d(U)})})}).catch(d)});return v(m,c),m}function Tr(i,c){var l=this,m=new h(function(g,d){l.ready().then(function(){var N=l._dbInfo;N.db.transaction(function(D){Te(D,N,"SELECT * FROM "+N.storeName,[],function(B,U){for(var Y=U.rows,J=Y.length,ie=0;ie0){N(It.apply(g,[i,B,l,m-1]));return}D(ie)}})})}).catch(D)});return v(d,l),d}function Tt(i,c,l){return It.apply(this,[i,c,l,1])}function Mt(i,c){var l=this;i=b(i);var m=new h(function(g,d){l.ready().then(function(){var N=l._dbInfo;N.db.transaction(function(D){Te(D,N,"DELETE FROM "+N.storeName+" WHERE key = ?",[i],function(){g()},function(B,U){d(U)})})}).catch(d)});return v(m,c),m}function Mr(i){var c=this,l=new h(function(m,g){c.ready().then(function(){var d=c._dbInfo;d.db.transaction(function(N){Te(N,d,"DELETE FROM "+d.storeName,[],function(){m()},function(D,B){g(B)})})}).catch(g)});return v(l,i),l}function pt(i){var c=this,l=new h(function(m,g){c.ready().then(function(){var d=c._dbInfo;d.db.transaction(function(N){Te(N,d,"SELECT COUNT(key) as c FROM "+d.storeName,[],function(D,B){var U=B.rows.item(0).c;m(U)},function(D,B){g(B)})})}).catch(g)});return v(l,i),l}function Nt(i,c){var l=this,m=new h(function(g,d){l.ready().then(function(){var N=l._dbInfo;N.db.transaction(function(D){Te(D,N,"SELECT key FROM "+N.storeName+" WHERE id = ? LIMIT 1",[i+1],function(B,U){var Y=U.rows.length?U.rows.item(0).key:null;g(Y)},function(B,U){d(U)})})}).catch(d)});return v(m,c),m}function $t(i){var c=this,l=new h(function(m,g){c.ready().then(function(){var d=c._dbInfo;d.db.transaction(function(N){Te(N,d,"SELECT key FROM "+d.storeName,[],function(D,B){for(var U=[],Y=0;Y '__WebKitDatabaseInfoTable__'",[],function(g,d){for(var N=[],D=0;D0}function au(i){var c=this,l={};if(i)for(var m in i)l[m]=i[m];return l.keyPrefix=Ze(i,c._defaultConfig),nu()?(c._dbInfo=l,l.serializer=Xe,h.resolve()):h.reject()}function ou(i){var c=this,l=c.ready().then(function(){for(var m=c._dbInfo.keyPrefix,g=localStorage.length-1;g>=0;g--){var d=localStorage.key(g);d.indexOf(m)===0&&localStorage.removeItem(d)}});return v(l,i),l}function iu(i,c){var l=this;i=b(i);var m=l.ready().then(function(){var g=l._dbInfo,d=localStorage.getItem(g.keyPrefix+i);return d&&(d=g.serializer.deserialize(d)),d});return v(m,c),m}function uu(i,c){var l=this,m=l.ready().then(function(){for(var g=l._dbInfo,d=g.keyPrefix,N=d.length,D=localStorage.length,B=1,U=0;U=0;N--){var D=localStorage.key(N);D.indexOf(d)===0&&localStorage.removeItem(D)}}):g=h.reject("Invalid arguments"),v(g,c),g}var pu={_driver:"localStorageWrapper",_initStorage:au,_support:Je(),iterate:uu,getItem:iu,setItem:du,removeItem:su,clear:ou,length:fu,key:lu,keys:cu,dropInstance:vu},mu=function(c,l){return c===l||typeof c=="number"&&typeof l=="number"&&isNaN(c)&&isNaN(l)},hu=function(c,l){for(var m=c.length,g=0;g"u"?"undefined":o(l))==="object"){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var m in l){if(m==="storeName"&&(l[m]=l[m].replace(/\W/g,"_")),m==="version"&&typeof l[m]!="number")return new Error("Database version must be a number.");this._config[m]=l[m]}return"driver"in l&&l.driver?this.setDriver(this._config.driver):!0}else return typeof l=="string"?this._config[l]:this._config},i.prototype.defineDriver=function(l,m,g){var d=new h(function(N,D){try{var B=l._driver,U=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!l._driver){D(U);return}for(var Y=Nr.concat("_initStorage"),J=0,ie=Y.length;J{const{id:E,result:h,error:v}=s.data,I=n.get(E);if(I&&(n.delete(E),v?I.reject(new Error(v)):I.resolve(h)),o.length>0){const b=o.shift();y.postMessage(b)}else a.push(y)},y.onerror=s=>{console.error("[solveStaffGroup worker error]",s)},e.push(y),y}function f(...y){return new Promise((s,E)=>{const h=t++;n.set(h,{resolve:s,reject:E});const v={id:h,args:y};let I=a.pop();!I&&e.lengthy.terminate()),e=[],a.length=0,o.length=0,n.clear()}}}class dl{store;constructor(){this.store=fl.createInstance({name:"solution-store"})}getBatch(r){return Promise.all(r.map(t=>this.store.getItem(t)))}get(r){return this.store.getItem(r)}set(r,t){return this.store.setItem(r,t)}remove(r){return this.store.removeItem(r)}}class Ws{localStore=new dl;async getBatch(r){const t=await jt.post("/api/solutions/batchGet",{data:{nameList:r}});return Promise.all(t.map((n,a)=>n||this.localStore.get(r[a])))}async get(r){return await jt.post("/api/solutions/batchGet",{data:{nameList:[r]}}).then(n=>n[0])||this.localStore.get(r)}set(r,t){return jt.post("/api/solutions/set",{data:{name:r,value:t}})}remove(r){return jt.post("/api/solutions/delete",{data:{name:r}})}}const Fs=async(e,{forceUpdate:r=!1,readonly:t=!1,onlyFetchCache:n=!1,solutionStore:a=null,onProgress:o,policy:u="equations",quota:f})=>{var I;if(e.assemble(),(I=e.spartito)!=null&&I.regulated)return;const y=e.spartito||e.makeSpartito(),s=y.measures.filter(b=>!b.regulated),E=s.length;let h=0;if(o==null||o(0),!r){const b=await(a==null?void 0:a.getBatch(s.map($=>$.regulationHash)))??[];s.forEach(($,w)=>{const k=b[w];k&&$.applySolution(k),o==null||o(Math.ceil(h++/E*100))})}if(n)return;const v=y.measures.filter(b=>!b.regulated);if(v.length>0){const{solveStaffGroup:b,terminate:$}=sl();await Promise.all(v.map(async w=>{var W;const k=w.regulationHash;await w.regulate({policy:u,quota:f||Math.min((w.events.length+1)*16,200),solver:b}),t||a==null||a.set(k,{...w.asSolution(),priority:-((W=w.solutionStat)==null?void 0:W.loss)}),o==null||o(Math.ceil(h++/E*100))})),$()}o==null||o(100)};var no={},ao={exports:{}};(function(e){var r=pe.default;function t(a){if(typeof WeakMap!="function")return null;var o=new WeakMap,u=new WeakMap;return(t=function(y){return y?u:o})(a)}function n(a,o){if(!o&&a&&a.__esModule)return a;if(a===null||r(a)!="object"&&typeof a!="function")return{default:a};var u=t(o);if(u&&u.has(a))return u.get(a);var f={__proto__:null},y=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in a)if(s!=="default"&&{}.hasOwnProperty.call(a,s)){var E=y?Object.getOwnPropertyDescriptor(a,s):null;E&&(E.get||E.set)?Object.defineProperty(f,s,E):f[s]=a[s]}return f.default=a,u&&u.set(a,f),f}e.exports=n,e.exports.__esModule=!0,e.exports.default=e.exports})(ao);var me=ao.exports,oo={exports:{}};(function(e){function r(t){return t&&t.__esModule?t:{default:t}}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports})(oo);var ee=oo.exports,io={exports:{}},uo={exports:{}},lo={exports:{}};(function(e){function r(t,n){(n==null||n>t.length)&&(n=t.length);for(var a=0,o=Array(n);a0&&arguments[0]!==void 0?arguments[0]:{},r=e.mark;return r?r.startsWith("data-")?r:"data-".concat(r):Rl}function ar(e){if(e.attachTo)return e.attachTo;var r=document.querySelector("head");return r||document.body}function Ol(e){return e==="queue"?"prependQueue":e?"prepend":"append"}function bn(e){return Array.from((er.get(e)||e).children).filter(function(r){return r.tagName==="STYLE"})}function xn(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!(0,Pl.default)())return null;var t=r.csp,n=r.prepend,a=r.priority,o=a===void 0?0:a,u=Ol(n),f=u==="prependQueue",y=document.createElement("style");y.setAttribute(ia,u),f&&o&&y.setAttribute(ua,"".concat(o)),t!=null&&t.nonce&&(y.nonce=t==null?void 0:t.nonce),y.innerHTML=e;var s=ar(r),E=s.firstChild;if(n){if(f){var h=(r.styles||bn(s)).filter(function(v){if(!["prepend","prependQueue"].includes(v.getAttribute(ia)))return!1;var I=Number(v.getAttribute(ua)||0);return o>=I});if(h.length)return s.insertBefore(y,h[h.length-1].nextSibling),y}s.insertBefore(y,E)}else s.appendChild(y);return y}function Io(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=ar(r);return(r.styles||bn(t)).find(function(n){return n.getAttribute(So(r))===e})}function El(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=Io(e,r);if(t){var n=ar(r);n.removeChild(t)}}function Sl(e,r){var t=er.get(e);if(!t||!(0,wl.default)(document,t)){var n=xn("",r),a=n.parentNode;er.set(e,a),e.removeChild(n)}}function Il(){er.clear()}function Tl(e,r){var t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=ar(t),a=bn(n),o=(0,oa.default)((0,oa.default)({},t),{},{styles:a});Sl(n,o);var u=Io(r,o);if(u){var f,y;if((f=o.csp)!==null&&f!==void 0&&f.nonce&&u.nonce!==((y=o.csp)===null||y===void 0?void 0:y.nonce)){var s;u.nonce=(s=o.csp)===null||s===void 0?void 0:s.nonce}return u.innerHTML!==e&&(u.innerHTML=e),u}var E=xn(e,o);return E.setAttribute(So(o),r),E}var la;function Pn(){if(la)return we;la=1;var e=ee,r=pe;Object.defineProperty(we,"__esModule",{value:!0}),we.generate=$,we.getSecondaryColor=w,we.iconStyles=void 0,we.isIconDefinition=I,we.normalizeAttrs=b,we.normalizeTwoToneColors=k,we.useInsertStyles=we.svgBaseProps=void 0,we.warning=v;var t=e(Pe),n=e(pe),a=Po,o=h(ae),u=e(Se),f=Fe,y=e(rt),s=e(Gu);function E(O){if(typeof WeakMap!="function")return null;var G=new WeakMap,x=new WeakMap;return(E=function(R){return R?x:G})(O)}function h(O,G){if(!G&&O&&O.__esModule)return O;if(O===null||r(O)!="object"&&typeof O!="function")return{default:O};var x=E(G);if(x&&x.has(O))return x.get(O);var T={__proto__:null},R=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var S in O)if(S!=="default"&&{}.hasOwnProperty.call(O,S)){var P=R?Object.getOwnPropertyDescriptor(O,S):null;P&&(P.get||P.set)?Object.defineProperty(T,S,P):T[S]=O[S]}return T.default=O,x&&x.set(O,T),T}function v(O,G){(0,u.default)(O,"[@ant-design/icons] ".concat(G))}function I(O){return(0,n.default)(O)==="object"&&typeof O.name=="string"&&typeof O.theme=="string"&&((0,n.default)(O.icon)==="object"||typeof O.icon=="function")}function b(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return Object.keys(O).reduce(function(G,x){var T=O[x];switch(x){case"class":G.className=T,delete G.class;break;default:delete G[x],G[(0,s.default)(x)]=T}return G},{})}function $(O,G,x){return x?o.default.createElement(O.tag,(0,t.default)((0,t.default)({key:G},b(O.attrs)),x),(O.children||[]).map(function(T,R){return $(T,"".concat(G,"-").concat(O.tag,"-").concat(R))})):o.default.createElement(O.tag,(0,t.default)({key:G},b(O.attrs)),(O.children||[]).map(function(T,R){return $(T,"".concat(G,"-").concat(O.tag,"-").concat(R))}))}function w(O){return(0,a.generate)(O)[0]}function k(O){return O?Array.isArray(O)?O:[O]:[]}we.svgBaseProps={width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true",focusable:"false"};var W=we.iconStyles=` +.anticon { + display: inline-flex; + alignItems: center; + color: inherit; + font-style: normal; + line-height: 0; + text-align: center; + text-transform: none; + vertical-align: -0.125em; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.anticon > * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`;return we.useInsertStyles=function(){var G=arguments.length>0&&arguments[0]!==void 0?arguments[0]:W,x=(0,o.useContext)(y.default),T=x.csp;(0,o.useEffect)(function(){(0,f.updateCSS)(G,"@ant-design-icons",{prepend:!0,csp:T})},[])},we}var ca;function To(){if(ca)return yt;ca=1;var e=ee;Object.defineProperty(yt,"__esModule",{value:!0}),yt.default=void 0;var r=e(xo()),t=e(Pe),n=Pn(),a=["icon","className","onClick","style","primaryColor","secondaryColor"],o={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1};function u(s){var E=s.primaryColor,h=s.secondaryColor;o.primaryColor=E,o.secondaryColor=h||(0,n.getSecondaryColor)(E),o.calculated=!!h}function f(){return(0,t.default)({},o)}var y=function(E){var h=E.icon,v=E.className,I=E.onClick,b=E.style,$=E.primaryColor,w=E.secondaryColor,k=(0,r.default)(E,a),W=o;if($&&(W={primaryColor:$,secondaryColor:w||(0,n.getSecondaryColor)($)}),(0,n.useInsertStyles)(),(0,n.warning)((0,n.isIconDefinition)(h),"icon should be icon definiton, but got ".concat(h)),!(0,n.isIconDefinition)(h))return null;var O=h;return O&&typeof O.icon=="function"&&(O=(0,t.default)((0,t.default)({},O),{},{icon:O.icon(W.primaryColor,W.secondaryColor)})),(0,n.generate)(O.icon,"svg-".concat(O.name),(0,t.default)({className:v,onClick:I,style:b,"data-icon":O.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},k))};return y.displayName="IconReact",y.getTwoToneColors=f,y.setTwoToneColors=u,yt.default=y,yt}var _t={},fa;function Ml(){if(fa)return _t;fa=1;var e=ee;Object.defineProperty(_t,"__esModule",{value:!0}),_t.getTwoToneColor=o,_t.setTwoToneColor=a;var r=e(We),t=e(To()),n=Pn();function a(u){var f=(0,n.normalizeTwoToneColors)(u),y=(0,r.default)(f,2),s=y[0],E=y[1];return t.default.setTwoToneColors({primaryColor:s,secondaryColor:E})}function o(){var u=t.default.getTwoToneColors();return u.calculated?[u.primaryColor,u.secondaryColor]:u.primaryColor}return _t}var sa;function je(){if(sa)return gt;sa=1;var e=ee,r=pe;Object.defineProperty(gt,"__esModule",{value:!0}),gt.default=void 0;var t=e(Pe),n=e(We),a=e(Me),o=e(xo()),u=b(ae),f=e(qe),y=e(rt),s=e(To()),E=Ml(),h=Pn(),v=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];function I(w){if(typeof WeakMap!="function")return null;var k=new WeakMap,W=new WeakMap;return(I=function(G){return G?W:k})(w)}function b(w,k){if(!k&&w&&w.__esModule)return w;if(w===null||r(w)!="object"&&typeof w!="function")return{default:w};var W=I(k);if(W&&W.has(w))return W.get(w);var O={__proto__:null},G=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var x in w)if(x!=="default"&&{}.hasOwnProperty.call(w,x)){var T=G?Object.getOwnPropertyDescriptor(w,x):null;T&&(T.get||T.set)?Object.defineProperty(O,x,T):O[x]=w[x]}return O.default=w,W&&W.set(w,O),O}(0,E.setTwoToneColor)("#1890ff");var $=u.forwardRef(function(w,k){var W=w.className,O=w.icon,G=w.spin,x=w.rotate,T=w.tabIndex,R=w.onClick,S=w.twoToneColor,P=(0,o.default)(w,v),F=u.useContext(y.default),H=F.prefixCls,j=H===void 0?"anticon":H,M=F.rootClassName,K=(0,f.default)(M,j,(0,a.default)((0,a.default)({},"".concat(j,"-").concat(O.name),!!O.name),"".concat(j,"-spin"),!!G||O.name==="loading"),W),X=T;X===void 0&&R&&(X=-1);var Q=x?{msTransform:"rotate(".concat(x,"deg)"),transform:"rotate(".concat(x,"deg)")}:void 0,V=(0,h.normalizeTwoToneColors)(S),L=(0,n.default)(V,2),p=L[0],_=L[1];return u.createElement("span",(0,t.default)((0,t.default)({role:"img","aria-label":O.name},P),{},{ref:k,tabIndex:X,onClick:R,className:K}),u.createElement(s.default,{icon:O,primaryColor:p,secondaryColor:_,style:Q}))});return $.displayName="AntdIcon",$.getTwoToneColor=E.getTwoToneColor,$.setTwoToneColor=E.setTwoToneColor,gt.default=$,gt}var wn=ee,Nl=pe;Object.defineProperty(nr,"__esModule",{value:!0});nr.default=void 0;var da=wn(Pe),Mo=Al(ae),$l=wn(ml()),kl=wn(je());function No(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return(No=function(a){return a?t:r})(e)}function Al(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||Nl(e)!="object"&&typeof e!="function")return{default:e};var t=No(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var u=a?Object.getOwnPropertyDescriptor(e,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var Dl=function(r,t){return Mo.createElement(kl.default,(0,da.default)((0,da.default)({},r),{},{ref:t,icon:$l.default}))},jl=Mo.forwardRef(Dl);nr.default=jl;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(nr);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(Qr,Qr.exports);var $o=Qr.exports,Jr={exports:{}},or={},Ft={},va;function Ll(){if(va)return Ft;va=1,Object.defineProperty(Ft,"__esModule",{value:!0});var e={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"};return Ft.default=e,Ft}var Rn=ee,ql=pe;Object.defineProperty(or,"__esModule",{value:!0});or.default=void 0;var pa=Rn(Pe),ko=Bl(ae),Wl=Rn(Ll()),Fl=Rn(je());function Ao(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return(Ao=function(a){return a?t:r})(e)}function Bl(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||ql(e)!="object"&&typeof e!="function")return{default:e};var t=Ao(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var u=a?Object.getOwnPropertyDescriptor(e,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var zl=function(r,t){return ko.createElement(Fl.default,(0,pa.default)((0,pa.default)({},r),{},{ref:t,icon:Wl.default}))},Ul=ko.forwardRef(zl);or.default=Ul;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(or);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(Jr,Jr.exports);var Do=Jr.exports,Zr={exports:{}},ir={},Bt={},ma;function Gl(){if(ma)return Bt;ma=1,Object.defineProperty(Bt,"__esModule",{value:!0});var e={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};return Bt.default=e,Bt}var On=ee,Yl=pe;Object.defineProperty(ir,"__esModule",{value:!0});ir.default=void 0;var ha=On(Pe),jo=Vl(ae),Hl=On(Gl()),Kl=On(je());function Lo(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return(Lo=function(a){return a?t:r})(e)}function Vl(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||Yl(e)!="object"&&typeof e!="function")return{default:e};var t=Lo(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var u=a?Object.getOwnPropertyDescriptor(e,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var Ql=function(r,t){return jo.createElement(Kl.default,(0,ha.default)((0,ha.default)({},r),{},{ref:t,icon:Hl.default}))},Xl=jo.forwardRef(Ql);ir.default=Xl;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(ir);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(Zr,Zr.exports);var qo=Zr.exports,en={exports:{}},ur={},zt={},ga;function Jl(){if(ga)return zt;ga=1,Object.defineProperty(zt,"__esModule",{value:!0});var e={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z"}}]},name:"info-circle",theme:"outlined"};return zt.default=e,zt}var En=ee,Zl=pe;Object.defineProperty(ur,"__esModule",{value:!0});ur.default=void 0;var ya=En(Pe),Wo=rc(ae),ec=En(Jl()),tc=En(je());function Fo(e){if(typeof WeakMap!="function")return null;var r=new WeakMap,t=new WeakMap;return(Fo=function(a){return a?t:r})(e)}function rc(e,r){if(!r&&e&&e.__esModule)return e;if(e===null||Zl(e)!="object"&&typeof e!="function")return{default:e};var t=Fo(r);if(t&&t.has(e))return t.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if(o!=="default"&&{}.hasOwnProperty.call(e,o)){var u=a?Object.getOwnPropertyDescriptor(e,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}var nc=function(r,t){return Wo.createElement(tc.default,(0,ya.default)((0,ya.default)({},r),{},{ref:t,icon:ec.default}))},ac=Wo.forwardRef(nc);ur.default=ac;(function(e,r){Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var t=n(ur);function n(o){return o&&o.__esModule?o:{default:o}}var a=t;r.default=a,e.exports=a})(en,en.exports);var Bo=en.exports,at={},zo={exports:{}};(function(e){var r=pe.default;function t(){e.exports=t=function(){return a},e.exports.__esModule=!0,e.exports.default=e.exports;var n,a={},o=Object.prototype,u=o.hasOwnProperty,f=Object.defineProperty||function(p,_,C){p[_]=C.value},y=typeof Symbol=="function"?Symbol:{},s=y.iterator||"@@iterator",E=y.asyncIterator||"@@asyncIterator",h=y.toStringTag||"@@toStringTag";function v(p,_,C){return Object.defineProperty(p,_,{value:C,enumerable:!0,configurable:!0,writable:!0}),p[_]}try{v({},"")}catch{v=function(C,A,q){return C[A]=q}}function I(p,_,C,A){var q=_&&_.prototype instanceof G?_:G,z=Object.create(q.prototype),Z=new V(A||[]);return f(z,"_invoke",{value:M(p,C,Z)}),z}function b(p,_,C){try{return{type:"normal",arg:p.call(_,C)}}catch(A){return{type:"throw",arg:A}}}a.wrap=I;var $="suspendedStart",w="suspendedYield",k="executing",W="completed",O={};function G(){}function x(){}function T(){}var R={};v(R,s,function(){return this});var S=Object.getPrototypeOf,P=S&&S(S(L([])));P&&P!==o&&u.call(P,s)&&(R=P);var F=T.prototype=G.prototype=Object.create(R);function H(p){["next","throw","return"].forEach(function(_){v(p,_,function(C){return this._invoke(_,C)})})}function j(p,_){function C(q,z,Z,te){var re=b(p[q],p,z);if(re.type!=="throw"){var ne=re.arg,oe=ne.value;return oe&&r(oe)=="object"&&u.call(oe,"__await")?_.resolve(oe.__await).then(function(le){C("next",le,Z,te)},function(le){C("throw",le,Z,te)}):_.resolve(oe).then(function(le){ne.value=le,Z(ne)},function(le){return C("throw",le,Z,te)})}te(re.arg)}var A;f(this,"_invoke",{value:function(z,Z){function te(){return new _(function(re,ne){C(z,Z,re,ne)})}return A=A?A.then(te,te):te()}})}function M(p,_,C){var A=$;return function(q,z){if(A===k)throw Error("Generator is already running");if(A===W){if(q==="throw")throw z;return{value:n,done:!0}}for(C.method=q,C.arg=z;;){var Z=C.delegate;if(Z){var te=K(Z,C);if(te){if(te===O)continue;return te}}if(C.method==="next")C.sent=C._sent=C.arg;else if(C.method==="throw"){if(A===$)throw A=W,C.arg;C.dispatchException(C.arg)}else C.method==="return"&&C.abrupt("return",C.arg);A=k;var re=b(p,_,C);if(re.type==="normal"){if(A=C.done?W:w,re.arg===O)continue;return{value:re.arg,done:C.done}}re.type==="throw"&&(A=W,C.method="throw",C.arg=re.arg)}}}function K(p,_){var C=_.method,A=p.iterator[C];if(A===n)return _.delegate=null,C==="throw"&&p.iterator.return&&(_.method="return",_.arg=n,K(p,_),_.method==="throw")||C!=="return"&&(_.method="throw",_.arg=new TypeError("The iterator does not provide a '"+C+"' method")),O;var q=b(A,p.iterator,_.arg);if(q.type==="throw")return _.method="throw",_.arg=q.arg,_.delegate=null,O;var z=q.arg;return z?z.done?(_[p.resultName]=z.value,_.next=p.nextLoc,_.method!=="return"&&(_.method="next",_.arg=n),_.delegate=null,O):z:(_.method="throw",_.arg=new TypeError("iterator result is not an object"),_.delegate=null,O)}function X(p){var _={tryLoc:p[0]};1 in p&&(_.catchLoc=p[1]),2 in p&&(_.finallyLoc=p[2],_.afterLoc=p[3]),this.tryEntries.push(_)}function Q(p){var _=p.completion||{};_.type="normal",delete _.arg,p.completion=_}function V(p){this.tryEntries=[{tryLoc:"root"}],p.forEach(X,this),this.reset(!0)}function L(p){if(p||p===""){var _=p[s];if(_)return _.call(p);if(typeof p.next=="function")return p;if(!isNaN(p.length)){var C=-1,A=function q(){for(;++C=0;--q){var z=this.tryEntries[q],Z=z.completion;if(z.tryLoc==="root")return A("end");if(z.tryLoc<=this.prev){var te=u.call(z,"catchLoc"),re=u.call(z,"finallyLoc");if(te&&re){if(this.prev=0;--A){var q=this.tryEntries[A];if(q.tryLoc<=this.prev&&u.call(q,"finallyLoc")&&this.prev=0;--C){var A=this.tryEntries[C];if(A.finallyLoc===_)return this.complete(A.completion,A.afterLoc),Q(A),O}},catch:function(_){for(var C=this.tryEntries.length-1;C>=0;--C){var A=this.tryEntries[C];if(A.tryLoc===_){var q=A.completion;if(q.type==="throw"){var z=q.arg;Q(A)}return z}}throw Error("illegal catch attempt")},delegateYield:function(_,C,A){return this.delegate={iterator:L(_),resultName:C,nextLoc:A},this.method==="next"&&(this.arg=n),O}},a}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports})(zo);var Uo=zo.exports,Go={exports:{}};(function(e){function r(n,a,o,u,f,y,s){try{var E=n[y](s),h=E.value}catch(v){return void o(v)}E.done?a(h):Promise.resolve(h).then(u,f)}function t(n){return function(){var a=this,o=arguments;return new Promise(function(u,f){var y=n.apply(a,o);function s(h){r(y,u,f,s,E,"next",h)}function E(h){r(y,u,f,s,E,"throw",h)}s(void 0)})}}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports})(Go);var oc=Go.exports,ic=me.default,lr=ee.default;Object.defineProperty(at,"__esModule",{value:!0});at._r=mc;at._u=_c;at.render=hc;at.unmount=Cc;var tr=lr(Uo),Yo=lr(oc),uc=lr(pe),lc=lr(Pe),cc=ic(Ua),wt=(0,lc.default)({},cc),fc=wt.version,qr=wt.render,sc=wt.unmountComponentAtNode,cr;try{var dc=Number((fc||"").split(".")[0]);dc>=18&&(cr=wt.createRoot)}catch{}function _a(e){var r=wt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;r&&(0,uc.default)(r)==="object"&&(r.usingClientEntryPoint=e)}var rr="__rc_react_root__";function vc(e,r){_a(!0);var t=r[rr]||cr(r);_a(!1),t.render(e),r[rr]=t}function pc(e,r){qr==null||qr(e,r)}function mc(e,r){}function hc(e,r){if(cr){vc(e,r);return}pc(e,r)}function gc(e){return tn.apply(this,arguments)}function tn(){return tn=(0,Yo.default)((0,tr.default)().mark(function e(r){return(0,tr.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:return n.abrupt("return",Promise.resolve().then(function(){var a;(a=r[rr])===null||a===void 0||a.unmount(),delete r[rr]}));case 1:case"end":return n.stop()}},e)})),tn.apply(this,arguments)}function yc(e){sc(e)}function _c(e){}function Cc(e){return rn.apply(this,arguments)}function rn(){return rn=(0,Yo.default)((0,tr.default)().mark(function e(r){return(0,tr.default)().wrap(function(n){for(;;)switch(n.prev=n.next){case 0:if(cr===void 0){n.next=2;break}return n.abrupt("return",gc(r));case 2:yc(r);case 3:case"end":return n.stop()}},e)})),rn.apply(this,arguments)}var Wr={},fr={},bc=me.default;Object.defineProperty(fr,"__esModule",{value:!0});fr.default=Pc;var xc=bc(ae);function Pc(e,r,t){var n=xc.useRef({});return(!("value"in n.current)||t(n.current.condition,r))&&(n.current.value=e(),n.current.condition=r),n.current.value}var sr={},Ho={exports:{}};(function(e){var r=yo,t=so,n=hn,a=bo;function o(u){return r(u)||t(u)||n(u)||a()}e.exports=o,e.exports.__esModule=!0,e.exports.default=e.exports})(Ho);var wc=Ho.exports,Sn={};Object.defineProperty(Sn,"__esModule",{value:!0});Sn.default=Rc;function Rc(e,r){for(var t=e,n=0;n3&&arguments[3]!==void 0?arguments[3]:!1;return r.length&&n&&t===void 0&&!(0,nn.default)(e,r.slice(0,-1))?e:Qo(e,r,t,n)}function Sc(e){return(0,Ko.default)(e)==="object"&&e!==null&&Object.getPrototypeOf(e)===Object.prototype}function Ca(e){return Array.isArray(e)?[]:{}}var Ic=typeof Reflect>"u"?Object.keys:Reflect.ownKeys;function Tc(){for(var e=arguments.length,r=new Array(e),t=0;t1&&arguments[1]!==void 0?arguments[1]:O,_=arguments.length>2&&arguments[2]!==void 0?arguments[2]:G,C;switch(L){case"top":C={left:"50%",transform:"translateX(-50%)",right:"auto",top:p,bottom:"auto"};break;case"topLeft":C={left:0,top:p,bottom:"auto"};break;case"topRight":C={right:0,top:p,bottom:"auto"};break;case"bottom":C={left:"50%",transform:"translateX(-50%)",right:"auto",top:"auto",bottom:_};break;case"bottomLeft":C={left:0,top:"auto",bottom:_};break;default:C={right:0,top:"auto",bottom:_};break}return C}function M(L,p){var _=L.placement,C=_===void 0?T:_,A=L.top,q=L.bottom,z=L.getContainer,Z=z===void 0?R:z,te=L.prefixCls,re=(0,b.globalConfig)(),ne=re.getPrefixCls,oe=re.getIconPrefixCls,le=ne("notification",te||x),_e=oe(),ve="".concat(le,"-").concat(C),xe=k[ve];if(xe){Promise.resolve(xe).then(function(ue){p({prefixCls:"".concat(le,"-notice"),iconPrefixCls:_e,instance:ue})});return}var de=(0,h.default)("".concat(le,"-").concat(C),(0,o.default)({},"".concat(le,"-rtl"),P===!0));k[ve]=new Promise(function(ue){v.default.newInstance({prefixCls:le,className:de,style:j(C,A,q),getContainer:Z,maxCount:F},function(ce){ue(ce),p({prefixCls:"".concat(le,"-notice"),iconPrefixCls:_e,instance:ce})})})}var K={success:u.default,info:E.default,error:f.default,warning:s.default};function X(L,p,_){var C=L.duration,A=L.icon,q=L.type,z=L.description,Z=L.message,te=L.btn,re=L.onClose,ne=L.onClick,oe=L.key,le=L.style,_e=L.className,ve=L.closeIcon,xe=ve===void 0?S:ve,de=L.props,ue=C===void 0?W:C,ce=null;A?ce=I.createElement("span",{className:"".concat(p,"-icon")},L.icon):q&&(ce=I.createElement(K[q]||null,{className:"".concat(p,"-icon ").concat(p,"-icon-").concat(q)}));var Ce=typeof xe>"u"?I.createElement("span",{className:"".concat(p,"-close-x")},I.createElement(y.default,{className:"".concat(p,"-close-icon")})):xe,Ee=!z&&ce?I.createElement("span",{className:"".concat(p,"-message-single-line-auto-margin")}):null;return{content:I.createElement(b.default,{iconPrefixCls:_},I.createElement("div",{className:ce?"".concat(p,"-with-icon"):"",role:"alert"},ce,I.createElement("div",{className:"".concat(p,"-message")},Ee,Z),I.createElement("div",{className:"".concat(p,"-description")},z),te?I.createElement("span",{className:"".concat(p,"-btn")},te):null)),duration:ue,closable:!0,closeIcon:Ce,onClose:re,onClick:ne,key:oe,style:le||{},className:(0,h.default)(_e,(0,o.default)({},"".concat(p,"-").concat(q),!!q)),props:de}}function Q(L){M(L,function(p){var _=p.prefixCls,C=p.iconPrefixCls,A=p.instance;A.notice(X(L,_,C))})}var V={open:Q,close:function(p){Object.keys(k).forEach(function(_){return Promise.resolve(k[_]).then(function(C){C.removeNotice(p)})})},config:H,destroy:function(){Object.keys(k).forEach(function(p){Promise.resolve(k[p]).then(function(_){_.destroy()}),delete k[p]})}};["success","info","warning","error"].forEach(function(L){V[L]=function(p){return V.open((0,a.default)((0,a.default)({},p),{type:L}))}}),V.warn=V.warning,V.useNotification=(0,$.default)(M,X),e.getInstance=function(p){return w(void 0,void 0,void 0,(0,n.default)().mark(function _(){return(0,n.default)().wrap(function(A){for(;;)switch(A.prev=A.next){case 0:return A.abrupt("return",null);case 1:case"end":return A.stop()}},_)}))},e.default=V}(Ur)),Ur}var Ye={},Ff=me.default,Bf=ee.default;Object.defineProperty(Ye,"__esModule",{value:!0});Ye.ConfigContext=Ye.ConfigConsumer=void 0;Ye.withConfigConsumer=Hf;var zf=Bf(ye),sn=Ff(ae),Uf=function(r,t){return t||(r?"ant-".concat(r):"ant")},Gf=Ye.ConfigContext=sn.createContext({getPrefixCls:Uf}),Yf=Ye.ConfigConsumer=Gf.Consumer;function Hf(e){return function(t){var n=function(u){return sn.createElement(Yf,null,function(f){var y=e.prefixCls,s=f.getPrefixCls,E=u.prefixCls,h=s(y,E);return sn.createElement(t,(0,zf.default)({},f,u,{prefixCls:h}))})},a=t.constructor;return a&&a.displayName||t.name,n}}var Pr={};const Kf=tt(al);var ki=ee.default;Object.defineProperty(Pr,"__esModule",{value:!0});Pr.getStyle=Ai;Pr.registerTheme=Jf;var Wa=Po,Yr=Kf,Vf=ki(nt),Qf=Fe;ki(Be);var Xf="-ant-".concat(Date.now(),"-").concat(Math.random());function Ai(e,r){var t={},n=function(E,h){var v=E.clone();return v=(h==null?void 0:h(v))||v,v.toRgbString()},a=function(E,h){var v=new Yr.TinyColor(E),I=(0,Wa.generate)(v.toRgbString());t["".concat(h,"-color")]=n(v),t["".concat(h,"-color-disabled")]=I[1],t["".concat(h,"-color-hover")]=I[4],t["".concat(h,"-color-active")]=I[6],t["".concat(h,"-color-outline")]=v.clone().setAlpha(.2).toRgbString(),t["".concat(h,"-color-deprecated-bg")]=I[0],t["".concat(h,"-color-deprecated-border")]=I[2]};if(r.primaryColor){a(r.primaryColor,"primary");var o=new Yr.TinyColor(r.primaryColor),u=(0,Wa.generate)(o.toRgbString());u.forEach(function(s,E){t["primary-".concat(E+1)]=s}),t["primary-color-deprecated-l-35"]=n(o,function(s){return s.lighten(35)}),t["primary-color-deprecated-l-20"]=n(o,function(s){return s.lighten(20)}),t["primary-color-deprecated-t-20"]=n(o,function(s){return s.tint(20)}),t["primary-color-deprecated-t-50"]=n(o,function(s){return s.tint(50)}),t["primary-color-deprecated-f-12"]=n(o,function(s){return s.setAlpha(s.getAlpha()*.12)});var f=new Yr.TinyColor(u[0]);t["primary-color-active-deprecated-f-30"]=n(f,function(s){return s.setAlpha(s.getAlpha()*.3)}),t["primary-color-active-deprecated-d-02"]=n(f,function(s){return s.darken(2)})}r.successColor&&a(r.successColor,"success"),r.warningColor&&a(r.warningColor,"warning"),r.errorColor&&a(r.errorColor,"error"),r.infoColor&&a(r.infoColor,"info");var y=Object.keys(t).map(function(s){return"--".concat(e,"-").concat(s,": ").concat(t[s],";")});return` + :root { + `.concat(y.join(` +`),` + } + `).trim()}function Jf(e,r){var t=Ai(e,r);(0,Vf.default)()&&(0,Qf.updateCSS)(t,"".concat(Xf,"-dynamic-theme"))}var Wn={};(function(e){var r=me.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.DisabledContextProvider=void 0;var t=r(ae),n=t.createContext(!1);e.DisabledContextProvider=function(o){var u=o.children,f=o.disabled,y=t.useContext(n);return t.createElement(n.Provider,{value:f??y},u)},e.default=n})(Wn);var Fn={};(function(e){var r=me.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.SizeContextProvider=void 0;var t=r(ae),n=t.createContext(void 0);e.SizeContextProvider=function(o){var u=o.children,f=o.size;return t.createElement(n.Consumer,null,function(y){return t.createElement(n.Provider,{value:f||y},u)})},e.default=n})(Fn);var Fa;function Ne(){return Fa||(Fa=1,function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"ConfigConsumer",{enumerable:!0,get:function(){return b.ConfigConsumer}}),Object.defineProperty(e,"ConfigContext",{enumerable:!0,get:function(){return b.ConfigContext}}),e.globalConfig=e.defaultPrefixCls=e.defaultIconPrefixCls=e.default=e.configConsumerProps=void 0;var n=t(ye),a=t(rt),o=t(fr),u=r(ae),f=sr,y=t(Xo),s=r(Jo),E=t(Nn),h=t(dr),v=t(Ti()),I=t(Wf()),b=Ye,$=Pr,w=Wn,k=r(Fn);e.configConsumerProps=["getTargetContainer","getPopupContainer","rootPrefixCls","getPrefixCls","renderEmpty","csp","autoInsertSpaceInButton","locale","pageHeader"];var W=["getTargetContainer","getPopupContainer","renderEmpty","pageHeader","input","pagination","form"],O=e.defaultPrefixCls="ant",G=e.defaultIconPrefixCls="anticon",x,T;function R(){return x||O}function S(){return T||G}var P=function(M){var K=M.prefixCls,X=M.iconPrefixCls,Q=M.theme;K!==void 0&&(x=K),X!==void 0&&(T=X),Q&&(0,$.registerTheme)(R(),Q)};e.globalConfig=function(){return{getPrefixCls:function(K,X){return X||(K?"".concat(R(),"-").concat(K):R())},getIconPrefixCls:S,getRootPrefixCls:function(K,X){return K||x||(X&&X.includes("-")?X.replace(/^(.*)-[^-]*$/,"$1"):R())}}};var F=function(M){var K=M.children,X=M.csp,Q=M.autoInsertSpaceInButton,V=M.form,L=M.locale,p=M.componentSize,_=M.direction,C=M.space,A=M.virtual,q=M.dropdownMatchSelectWidth,z=M.legacyLocale,Z=M.parentContext,te=M.iconPrefixCls,re=M.componentDisabled,ne=u.useCallback(function(de,ue){var ce=M.prefixCls;if(ue)return ue;var Ce=ce||Z.getPrefixCls("");return de?"".concat(Ce,"-").concat(de):Ce},[Z.getPrefixCls,M.prefixCls]),oe=(0,n.default)((0,n.default)({},Z),{csp:X,autoInsertSpaceInButton:Q,locale:L||z,direction:_,space:C,virtual:A,dropdownMatchSelectWidth:q,getPrefixCls:ne});W.forEach(function(de){var ue=M[de];ue&&(oe[de]=ue)});var le=(0,o.default)(function(){return oe},oe,function(de,ue){var ce=Object.keys(de),Ce=Object.keys(ue);return ce.length!==Ce.length||ce.some(function(Ee){return de[Ee]!==ue[Ee]})}),_e=u.useMemo(function(){return{prefixCls:te,csp:X}},[te,X]),ve=K,xe=u.useMemo(function(){var de,ue,ce,Ce;return(0,f.merge)(((de=h.default.Form)===null||de===void 0?void 0:de.defaultValidateMessages)||{},((ce=(ue=le.locale)===null||ue===void 0?void 0:ue.Form)===null||ce===void 0?void 0:ce.defaultValidateMessages)||{},((Ce=le.form)===null||Ce===void 0?void 0:Ce.validateMessages)||{},(V==null?void 0:V.validateMessages)||{})},[le,V==null?void 0:V.validateMessages]);return Object.keys(xe).length>0&&(ve=u.createElement(y.default.Provider,{value:xe},K)),L&&(ve=u.createElement(s.default,{locale:L,_ANT_MARK__:s.ANT_MARK},ve)),(te||X)&&(ve=u.createElement(a.default.Provider,{value:_e},ve)),p&&(ve=u.createElement(k.SizeContextProvider,{size:p},ve)),re!==void 0&&(ve=u.createElement(w.DisabledContextProvider,{disabled:re},ve)),u.createElement(b.ConfigContext.Provider,{value:le},ve)},H=function(M){return u.useEffect(function(){M.direction&&(v.default.config({rtl:M.direction==="rtl"}),I.default.config({rtl:M.direction==="rtl"}))},[M.direction]),u.createElement(E.default,null,function(K,X,Q){return u.createElement(b.ConfigConsumer,null,function(V){return u.createElement(F,(0,n.default)({parentContext:V,legacyLocale:Q},M))})})};H.ConfigContext=b.ConfigContext,H.SizeContext=k.default,H.config=P,e.default=H}(Wr)),Wr}var Di={},ji={},Bn={},Zf=me.default,es=ee.default;Object.defineProperty(Bn,"__esModule",{value:!0});Bn.default=rs;var ts=es(We),Hr=Zf(ae);function rs(e){var r=Hr.useRef(!1),t=Hr.useState(e),n=(0,ts.default)(t,2),a=n[0],o=n[1];Hr.useEffect(function(){return r.current=!1,function(){r.current=!0}},[]);function u(f,y){y&&r.current||o(f)}return[a,u]}var zn={},wr={},Rr={};Object.defineProperty(Rr,"__esModule",{value:!0});Rr.default=ns;function ns(e,r){var t=Object.assign({},e);return Array.isArray(r)&&r.forEach(function(n){delete t[n]}),t}var Un={},Gn={},Or={},as=ee.default;Object.defineProperty(Or,"__esModule",{value:!0});Or.default=cs;var os=as(pe),is=Symbol.for("react.element"),us=Symbol.for("react.transitional.element"),ls=Symbol.for("react.fragment");function cs(e){return e&&(0,os.default)(e)==="object"&&(e.$$typeof===is||e.$$typeof===us)&&e.type===ls}var Li=ee.default;Object.defineProperty(Gn,"__esModule",{value:!0});Gn.default=dn;var fs=Li(Or),ss=Li(ae);function dn(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=[];return ss.default.Children.forEach(e,function(n){n==null&&!r.keepEmpty||(Array.isArray(n)?t=t.concat(dn(n)):(0,fs.default)(n)&&n.props?t=t.concat(dn(n.props.children,r)):t.push(n))}),t}(function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.useCompactItemContext=e.default=e.SpaceCompactItemContext=e.NoCompactStyle=void 0;var n=t(ye),a=t(Me),o=t(qe),u=t(Gn),f=r(ae),y=Ne(),s=function(I,b){var $={};for(var w in I)Object.prototype.hasOwnProperty.call(I,w)&&b.indexOf(w)<0&&($[w]=I[w]);if(I!=null&&typeof Object.getOwnPropertySymbols=="function")for(var k=0,w=Object.getOwnPropertySymbols(I);k=19)return!0;var a=(0,Kr.isMemo)(r)?r.type.type:r.type;return!(typeof a=="function"&&!((t=a.prototype)!==null&&t!==void 0&&t.render)&&a.$$typeof!==Kr.ForwardRef||typeof r=="function"&&!((n=r.prototype)!==null&&n!==void 0&&n.render)&&r.$$typeof!==Kr.ForwardRef)};function Kn(e){return(0,Bi.isValidElement)(e)&&!(0,gs.default)(e)}Re.supportNodeRef=function(r){return Kn(r)&&bs(r)};Re.getNodeRef=function(r){if(r&&Kn(r)){var t=r;return t.props.propertyIsEnumerable("ref")?t.props.ref:t.ref}return null};var zi={},Er={};Object.defineProperty(Er,"__esModule",{value:!0});Er.default=void 0;var Ui=function(r){return+setTimeout(r,16)},Gi=function(r){return clearTimeout(r)};typeof window<"u"&&"requestAnimationFrame"in window&&(Ui=function(r){return window.requestAnimationFrame(r)},Gi=function(r){return window.cancelAnimationFrame(r)});var Ba=0,Vn=new Map;function Yi(e){Vn.delete(e)}var Hi=function(r){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;Ba+=1;var n=Ba;function a(o){if(o===0)Yi(n),r();else{var u=Ui(function(){a(o-1)});Vn.set(n,u)}}return a(t),n};Hi.cancel=function(e){var r=Vn.get(e);return Yi(e),Gi(r)};Er.default=Hi;(function(e){var r=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=o;var t=r(Er),n=0,a={};function o(u){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,y=n++,s=f;function E(){s-=1,s<=0?(u(),delete a[y]):a[y]=(0,t.default)(E)}return a[y]=(0,t.default)(E),y}o.cancel=function(f){f!==void 0&&(t.default.cancel(a[f]),delete a[f])},o.ids=a})(zi);(function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=t(hi),a=t(yi),o=t(Si),u=t(Ri),f=t(Pi),y=t(Ln),s=t(bi),E=Fe,h=Re,v=r(ae),I=Ne(),b=t(zi),$=ze;function w(T,R,S){return R=(0,f.default)(R),(0,o.default)(T,(0,u.default)()?Reflect.construct(R,S||[],(0,f.default)(T).constructor):R.apply(T,S))}var k;function W(T){return!T||T.offsetParent===null||T.hidden}function O(T){return T instanceof Document?T.body:Array.from(T.childNodes).find(function(R){return(R==null?void 0:R.nodeType)===Node.ELEMENT_NODE})}function G(T){var R=(T||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return R&&R[1]&&R[2]&&R[3]?!(R[1]===R[2]&&R[2]===R[3]):!0}var x=function(T){(0,s.default)(R,T);function R(){var S;return(0,n.default)(this,R),S=w(this,R,arguments),S.containerRef=v.createRef(),S.animationStart=!1,S.destroyed=!1,S.onClick=function(P,F){var H,j,M=S.props,K=M.insertExtraNode,X=M.disabled;if(!(X||!P||W(P)||P.className.includes("-leave"))){S.extraNode=document.createElement("div");var Q=(0,y.default)(S),V=Q.extraNode,L=S.context.getPrefixCls;V.className="".concat(L(""),"-click-animating-node");var p=S.getAttributeName();if(P.setAttribute(p,"true"),F&&F!=="#fff"&&F!=="#ffffff"&&F!=="rgb(255, 255, 255)"&&F!=="rgba(255, 255, 255, 1)"&&G(F)&&!/rgba\((?:\d*, ){3}0\)/.test(F)&&F!=="transparent"){V.style.borderColor=F;var _=((H=P.getRootNode)===null||H===void 0?void 0:H.call(P))||P.ownerDocument,C=(j=O(_))!==null&&j!==void 0?j:_;k=(0,E.updateCSS)(` + [`.concat(L(""),"-click-animating-without-extra-node='true']::after, .").concat(L(""),`-click-animating-node { + --antd-wave-shadow-color: `).concat(F,`; + }`),"antd-wave",{csp:S.csp,attachTo:C})}K&&P.appendChild(V),["transition","animation"].forEach(function(A){P.addEventListener("".concat(A,"start"),S.onTransitionStart),P.addEventListener("".concat(A,"end"),S.onTransitionEnd)})}},S.onTransitionStart=function(P){if(!S.destroyed){var F=S.containerRef.current;!P||P.target!==F||S.animationStart||S.resetEffect(F)}},S.onTransitionEnd=function(P){!P||P.animationName!=="fadeEffect"||S.resetEffect(P.target)},S.bindAnimationEvent=function(P){if(!(!P||!P.getAttribute||P.getAttribute("disabled")||P.className.includes("disabled"))){var F=function(j){if(!(j.target.tagName==="INPUT"||W(j.target))){S.resetEffect(P);var M=getComputedStyle(P).getPropertyValue("border-top-color")||getComputedStyle(P).getPropertyValue("border-color")||getComputedStyle(P).getPropertyValue("background-color");S.clickWaveTimeoutId=window.setTimeout(function(){return S.onClick(P,M)},0),b.default.cancel(S.animationStartId),S.animationStart=!0,S.animationStartId=(0,b.default)(function(){S.animationStart=!1},10)}};return P.addEventListener("click",F,!0),{cancel:function(){P.removeEventListener("click",F,!0)}}}},S.renderWave=function(P){var F=P.csp,H=S.props.children;if(S.csp=F,!v.isValidElement(H))return H;var j=S.containerRef;return(0,h.supportRef)(H)&&(j=(0,h.composeRef)(H.ref,S.containerRef)),(0,$.cloneElement)(H,{ref:j})},S}return(0,a.default)(R,[{key:"componentDidMount",value:function(){this.destroyed=!1;var P=this.containerRef.current;!P||P.nodeType!==1||(this.instance=this.bindAnimationEvent(P))}},{key:"componentWillUnmount",value:function(){this.instance&&this.instance.cancel(),this.clickWaveTimeoutId&&clearTimeout(this.clickWaveTimeoutId),this.destroyed=!0}},{key:"getAttributeName",value:function(){var P=this.context.getPrefixCls,F=this.props.insertExtraNode;return F?"".concat(P(""),"-click-animating"):"".concat(P(""),"-click-animating-without-extra-node")}},{key:"resetEffect",value:function(P){var F=this;if(!(!P||P===this.extraNode||!(P instanceof Element))){var H=this.props.insertExtraNode,j=this.getAttributeName();P.setAttribute(j,"false"),k&&(k.innerHTML=""),H&&this.extraNode&&P.contains(this.extraNode)&&P.removeChild(this.extraNode),["transition","animation"].forEach(function(M){P.removeEventListener("".concat(M,"start"),F.onTransitionStart),P.removeEventListener("".concat(M,"end"),F.onTransitionEnd)})}}},{key:"render",value:function(){return v.createElement(I.ConfigConsumer,null,this.renderWave)}}]),R}(v.Component);x.contextType=I.ConfigContext,e.default=x})(Fi);var Ki={};(function(e){var r=me.default,t=ee.default;Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.GroupSizeContext=void 0;var n=t(ye),a=t(Me),o=t(qe),u=r(ae),f=Ne();t(Be);var y=function(h,v){var I={};for(var b in h)Object.prototype.hasOwnProperty.call(h,b)&&v.indexOf(b)<0&&(I[b]=h[b]);if(h!=null&&typeof Object.getOwnPropertySymbols=="function")for(var $=0,b=Object.getOwnPropertySymbols(h);$1024*1024*1.999&&a!==h)e=U(e),i=e.type||l;else return navigator.msSaveBlob?navigator.msSaveBlob(U(e),c):p(e);else if(/([\x80-\xff])/.test(e)){var u=0,v=new Uint8Array(e.length),A=v.length;for(u;u{document.fonts.ready.then(()=>{u(document.fonts.check("40px Emmentaler-26"))})},[]);const c=Object.keys(l);return e.jsxs("div",{className:"font-test-page",children:[e.jsxs("div",{className:"font-test-header",children:[e.jsx("h1",{children:"Emmentaler-26 Font Glyphs"}),e.jsxs("div",{className:"font-test-status",children:["Font status: ",e.jsx("span",{className:o?"loaded":"not-loaded",children:o?"Loaded":"Not loaded"}),e.jsxs("span",{className:"glyph-count",children:[Object.values(l).reduce((s,n)=>s+n.length,0)," glyphs"]})]}),e.jsxs("div",{className:"font-test-controls",children:[e.jsx("input",{type:"text",placeholder:"Filter glyphs...",value:E,onChange:s=>h(s.target.value)}),e.jsxs("label",{children:["Size:",e.jsx("input",{type:"range",min:20,max:80,value:r,onChange:s=>m(Number(s.target.value))}),r,"px"]})]}),e.jsx("div",{className:"font-test-toc",children:c.map(s=>e.jsxs("a",{href:`#cat-${s}`,children:[i[s]||s," (",l[s].length,")"]},s))})]}),c.map(s=>{const n=l[s].filter(([a,t])=>!E||a.toLowerCase().includes(E.toLowerCase())||t.toLowerCase().includes(E.toLowerCase()));return n.length===0?null:e.jsxs("div",{id:`cat-${s}`,className:"font-test-category",children:[e.jsxs("h2",{children:[i[s]||s," ",e.jsxs("span",{children:["(",n.length,")"]})]}),e.jsx("div",{className:"glyph-grid",children:n.map(([a,t])=>e.jsxs("div",{className:"glyph-cell",title:a,children:[e.jsx("div",{className:"glyph-render",style:{fontSize:r},children:e.jsx("i",{className:`emmentaler glyph-${a}`})}),e.jsx("div",{className:"glyph-unicode",style:{fontSize:r},children:String.fromCodePoint(parseInt(t,16))}),e.jsx("div",{className:"glyph-name",children:a}),e.jsxs("div",{className:"glyph-code",children:["U+",t]})]},`${a}-${t}`))})]},s)})]})}export{f as default}; +import{r as d,j as e}from"./umi-6680b95f.js";const l={rests:[["rests-0","E000"],["rests-1","E001"],["rests-0o","E002"],["rests-1o","E003"],["rests-M3","E004"],["rests-M2","E005"],["rests-M1","E006"],["rests-M1o","E007"],["rests-2","E008"],["rests-2classical","E009"],["rests-2z","E00A"],["rests-3","E00B"],["rests-4","E00C"],["rests-5","E00D"],["rests-6","E00E"],["rests-7","E00F"],["rests-8","E010"],["rests-9","E011"],["rests-10","E012"],["rests-M3neomensural","E144"],["rests-M2neomensural","E145"],["rests-M1neomensural","E146"],["rests-0neomensural","E147"],["rests-1neomensural","E148"],["rests-2neomensural","E149"],["rests-3neomensural","E14A"],["rests-4neomensural","E14B"],["rests-M3mensural","E14C"],["rests-M2mensural","E14D"],["rests-M1mensural","E14E"],["rests-0mensural","E14F"],["rests-1mensural","E150"],["rests-2mensural","E151"],["rests-3mensural","E152"],["rests-4mensural","E153"]],accidentals:[["accidentals-sharp","E013"],["accidentals-sharp-arrowup","E014"],["accidentals-sharp-arrowdown","E015"],["accidentals-sharp-arrowboth","E016"],["accidentals-sharp-slashslash-stem","E017"],["accidentals-sharp-slashslashslash-stemstem","E018"],["accidentals-sharp-slashslashslash-stem","E019"],["accidentals-sharp-slash-stem","E01A"],["accidentals-sharp-slashslash-stemstemstem","E01B"],["accidentals-doublesharp","E01C"],["accidentals-natural","E01D"],["accidentals-natural-arrowup","E01E"],["accidentals-natural-arrowdown","E01F"],["accidentals-natural-arrowboth","E020"],["accidentals-flat","E021"],["accidentals-flat-arrowup","E022"],["accidentals-flat-arrowdown","E023"],["accidentals-flat-arrowboth","E024"],["accidentals-flat-slash","E025"],["accidentals-flat-slashslash","E026"],["accidentals-mirroredflat-flat","E027"],["accidentals-mirroredflat","E028"],["accidentals-mirroredflat-backslash","E029"],["accidentals-flatflat","E02A"],["accidentals-flatflat-slash","E02B"],["accidentals-rightparen","E02C"],["accidentals-leftparen","E02D"],["accidentals-medicaeaM1","E194"],["accidentals-vaticanaM1","E195"],["accidentals-vaticana0","E196"],["accidentals-mensural1","E197"],["accidentals-mensuralM1","E198"],["accidentals-hufnagelM1","E199"],["accidentals-kievan1","E19A"],["accidentals-kievanM1","E19B"]],arrowheads:[["arrowheads-open-01","E02E"],["arrowheads-open-0M1","E02F"],["arrowheads-open-11","E030"],["arrowheads-open-1M1","E031"],["arrowheads-close-01","E032"],["arrowheads-close-0M1","E033"],["arrowheads-close-11","E034"],["arrowheads-close-1M1","E035"]],dot:[["dot","E036"]],scripts:[["scripts-ufermata","E037"],["scripts-dfermata","E038"],["scripts-uhenzeshortfermata","E039"],["scripts-dhenzeshortfermata","E03A"],["scripts-uhenzelongfermata","E03B"],["scripts-dhenzelongfermata","E03C"],["scripts-ushortfermata","E03D"],["scripts-dshortfermata","E03E"],["scripts-uveryshortfermata","E03F"],["scripts-dveryshortfermata","E040"],["scripts-ulongfermata","E041"],["scripts-dlongfermata","E042"],["scripts-uverylongfermata","E043"],["scripts-dverylongfermata","E044"],["scripts-thumb","E045"],["scripts-sforzato","E046"],["scripts-espr","E047"],["scripts-staccato","E048"],["scripts-ustaccatissimo","E049"],["scripts-dstaccatissimo","E04A"],["scripts-tenuto","E04B"],["scripts-uportato","E04C"],["scripts-dportato","E04D"],["scripts-umarcato","E04E"],["scripts-dmarcato","E04F"],["scripts-open","E050"],["scripts-halfopen","E051"],["scripts-halfopenvertical","E052"],["scripts-stopped","E053"],["scripts-upbow","E054"],["scripts-downbow","E055"],["scripts-reverseturn","E056"],["scripts-turn","E057"],["scripts-slashturn","E058"],["scripts-haydnturn","E059"],["scripts-trill","E05A"],["scripts-upedalheel","E05B"],["scripts-dpedalheel","E05C"],["scripts-upedaltoe","E05D"],["scripts-dpedaltoe","E05E"],["scripts-flageolet","E05F"],["scripts-segno","E060"],["scripts-varsegno","E061"],["scripts-coda","E062"],["scripts-varcoda","E063"],["scripts-rcomma","E064"],["scripts-lcomma","E065"],["scripts-rvarcomma","E066"],["scripts-lvarcomma","E067"],["scripts-arpeggio","E068"],["scripts-trill_element","E069"],["scripts-arpeggio-arrow-M1","E06A"],["scripts-arpeggio-arrow-1","E06B"],["scripts-trillelement","E06C"],["scripts-prall","E06D"],["scripts-mordent","E06E"],["scripts-prallprall","E06F"],["scripts-prallmordent","E070"],["scripts-upprall","E071"],["scripts-upmordent","E072"],["scripts-prallup","E073"],["scripts-downprall","E074"],["scripts-downmordent","E075"],["scripts-pralldown","E076"],["scripts-lineprall","E077"],["scripts-caesura-curved","E078"],["scripts-caesura-straight","E079"],["scripts-tickmark","E07A"],["scripts-snappizzicato","E07B"],["scripts-ictus","E1CA"],["scripts-uaccentus","E1CB"],["scripts-daccentus","E1CC"],["scripts-usemicirculus","E1CD"],["scripts-dsemicirculus","E1CE"],["scripts-circulus","E1CF"],["scripts-augmentum","E1D0"],["scripts-usignumcongruentiae","E1D1"],["scripts-dsignumcongruentiae","E1D2"],["scripts-barline-kievan","E1D3"]],clefs:[["clefs-C","E07C"],["clefs-C_change","E07D"],["clefs-varC","E07E"],["clefs-varC_change","E07F"],["clefs-F","E080"],["clefs-F_change","E081"],["clefs-G","E082"],["clefs-G_change","E083"],["clefs-GG","E084"],["clefs-GG_change","E085"],["clefs-tenorG","E086"],["clefs-tenorG_change","E087"],["clefs-percussion","E088"],["clefs-percussion_change","E089"],["clefs-varpercussion","E08A"],["clefs-varpercussion_change","E08B"],["clefs-tab","E08C"],["clefs-tab_change","E08D"],["clefs-vaticana-do","E154"],["clefs-vaticana-do_change","E155"],["clefs-vaticana-fa","E156"],["clefs-vaticana-fa_change","E157"],["clefs-medicaea-do","E158"],["clefs-medicaea-do_change","E159"],["clefs-medicaea-fa","E15A"],["clefs-medicaea-fa_change","E15B"],["clefs-neomensural-c","E15C"],["clefs-neomensural-c_change","E15D"],["clefs-petrucci-c1","E15E"],["clefs-petrucci-c1_change","E15F"],["clefs-petrucci-c2","E160"],["clefs-petrucci-c2_change","E161"],["clefs-petrucci-c3","E162"],["clefs-petrucci-c3_change","E163"],["clefs-petrucci-c4","E164"],["clefs-petrucci-c4_change","E165"],["clefs-petrucci-c5","E166"],["clefs-petrucci-c5_change","E167"],["clefs-mensural-c","E168"],["clefs-mensural-c_change","E169"],["clefs-blackmensural-c","E16A"],["clefs-blackmensural-c_change","E16B"],["clefs-petrucci-f","E16C"],["clefs-petrucci-f_change","E16D"],["clefs-mensural-f","E16E"],["clefs-mensural-f_change","E16F"],["clefs-petrucci-g","E170"],["clefs-petrucci-g_change","E171"],["clefs-mensural-g","E172"],["clefs-mensural-g_change","E173"],["clefs-hufnagel-do","E174"],["clefs-hufnagel-do_change","E175"],["clefs-hufnagel-fa","E176"],["clefs-hufnagel-fa_change","E177"],["clefs-hufnagel-do-fa","E178"],["clefs-hufnagel-do-fa_change","E179"],["clefs-kievan-do","E17A"],["clefs-kievan-do_change","E17B"]],timesig:[["timesig-C44","E08E"],["timesig-C22","E08F"],["timesig-mensural44","E1B4"],["timesig-mensural22","E1B5"],["timesig-mensural32","E1B6"],["timesig-mensural64","E1B7"],["timesig-mensural94","E1B8"],["timesig-mensural34","E1B9"],["timesig-mensural68","E1BA"],["timesig-mensural98","E1BB"],["timesig-mensural48","E1BC"],["timesig-mensural68alt","E1BD"],["timesig-mensural24","E1BE"],["timesig-neomensural44","E1BF"],["timesig-neomensural22","E1C0"],["timesig-neomensural32","E1C1"],["timesig-neomensural64","E1C2"],["timesig-neomensural94","E1C3"],["timesig-neomensural34","E1C4"],["timesig-neomensural68","E1C5"],["timesig-neomensural98","E1C6"],["timesig-neomensural48","E1C7"],["timesig-neomensural68alt","E1C8"],["timesig-neomensural24","E1C9"]],pedal:[["pedal-star","E090"],["pedal-M","E091"],["pedal--","E092"],["pedal-P","E093"],["pedal-d","E094"],["pedal-e","E095"],["pedal-Ped","E096"]],brackettips:[["brackettips-up","E097"],["brackettips-down","E098"]],accordion:[["accordion-discant","E099"],["accordion-dot","E09A"],["accordion-freebass","E09B"],["accordion-stdbass","E09C"],["accordion-bayanbass","E09D"],["accordion-oldEE","E09E"],["accordion-push","E09F"],["accordion-pull","E0A0"]],ties:[["ties-lyric-short","E0A1"],["ties-lyric-default","E0A2"]],noteheads:[["noteheads-uM2","E0A3"],["noteheads-dM2","E0A4"],["noteheads-sM1","E0A5"],["noteheads-sM1double","E0A6"],["noteheads-s0","E0A7"],["noteheads-s1","E0A8"],["noteheads-s2","E0A9"],["noteheads-s0diamond","E0AA"],["noteheads-s1diamond","E0AB"],["noteheads-s2diamond","E0AC"],["noteheads-s0triangle","E0AD"],["noteheads-d1triangle","E0AE"],["noteheads-u1triangle","E0AF"],["noteheads-u2triangle","E0B0"],["noteheads-d2triangle","E0B1"],["noteheads-s0slash","E0B2"],["noteheads-s1slash","E0B3"],["noteheads-s2slash","E0B4"],["noteheads-s0cross","E0B5"],["noteheads-s1cross","E0B6"],["noteheads-s2cross","E0B7"],["noteheads-s2xcircle","E0B8"],["noteheads-s0do","E0B9"],["noteheads-d1do","E0BA"],["noteheads-u1do","E0BB"],["noteheads-d2do","E0BC"],["noteheads-u2do","E0BD"],["noteheads-s0doThin","E0BE"],["noteheads-d1doThin","E0BF"],["noteheads-u1doThin","E0C0"],["noteheads-d2doThin","E0C1"],["noteheads-u2doThin","E0C2"],["noteheads-s0re","E0C3"],["noteheads-u1re","E0C4"],["noteheads-d1re","E0C5"],["noteheads-u2re","E0C6"],["noteheads-d2re","E0C7"],["noteheads-s0reThin","E0C8"],["noteheads-u1reThin","E0C9"],["noteheads-d1reThin","E0CA"],["noteheads-u2reThin","E0CB"],["noteheads-d2reThin","E0CC"],["noteheads-s0mi","E0CD"],["noteheads-s1mi","E0CE"],["noteheads-s2mi","E0CF"],["noteheads-s0miMirror","E0D0"],["noteheads-s1miMirror","E0D1"],["noteheads-s2miMirror","E0D2"],["noteheads-s0miThin","E0D3"],["noteheads-s1miThin","E0D4"],["noteheads-s2miThin","E0D5"],["noteheads-u0fa","E0D6"],["noteheads-d0fa","E0D7"],["noteheads-u1fa","E0D8"],["noteheads-d1fa","E0D9"],["noteheads-u2fa","E0DA"],["noteheads-d2fa","E0DB"],["noteheads-u0faThin","E0DC"],["noteheads-d0faThin","E0DD"],["noteheads-u1faThin","E0DE"],["noteheads-d1faThin","E0DF"],["noteheads-u2faThin","E0E0"],["noteheads-d2faThin","E0E1"],["noteheads-s0sol","E0E2"],["noteheads-s1sol","E0E3"],["noteheads-s2sol","E0E4"],["noteheads-s0la","E0E5"],["noteheads-s1la","E0E6"],["noteheads-s2la","E0E7"],["noteheads-s0laThin","E0E8"],["noteheads-s1laThin","E0E9"],["noteheads-s2laThin","E0EA"],["noteheads-s0ti","E0EB"],["noteheads-u1ti","E0EC"],["noteheads-d1ti","E0ED"],["noteheads-u2ti","E0EE"],["noteheads-d2ti","E0EF"],["noteheads-s0tiThin","E0F0"],["noteheads-u1tiThin","E0F1"],["noteheads-d1tiThin","E0F2"],["noteheads-u2tiThin","E0F3"],["noteheads-d2tiThin","E0F4"],["noteheads-u0doFunk","E0F5"],["noteheads-d0doFunk","E0F6"],["noteheads-u1doFunk","E0F7"],["noteheads-d1doFunk","E0F8"],["noteheads-u2doFunk","E0F9"],["noteheads-d2doFunk","E0FA"],["noteheads-u0reFunk","E0FB"],["noteheads-d0reFunk","E0FC"],["noteheads-u1reFunk","E0FD"],["noteheads-d1reFunk","E0FE"],["noteheads-u2reFunk","E0FF"],["noteheads-d2reFunk","E100"],["noteheads-u0miFunk","E101"],["noteheads-d0miFunk","E102"],["noteheads-u1miFunk","E103"],["noteheads-d1miFunk","E104"],["noteheads-s2miFunk","E105"],["noteheads-u0faFunk","E106"],["noteheads-d0faFunk","E107"],["noteheads-u1faFunk","E108"],["noteheads-d1faFunk","E109"],["noteheads-u2faFunk","E10A"],["noteheads-d2faFunk","E10B"],["noteheads-s0solFunk","E10C"],["noteheads-s1solFunk","E10D"],["noteheads-s2solFunk","E10E"],["noteheads-s0laFunk","E10F"],["noteheads-s1laFunk","E110"],["noteheads-s2laFunk","E111"],["noteheads-u0tiFunk","E112"],["noteheads-d0tiFunk","E113"],["noteheads-u1tiFunk","E114"],["noteheads-d1tiFunk","E115"],["noteheads-u2tiFunk","E116"],["noteheads-d2tiFunk","E117"],["noteheads-s0doWalker","E118"],["noteheads-u1doWalker","E119"],["noteheads-d1doWalker","E11A"],["noteheads-u2doWalker","E11B"],["noteheads-d2doWalker","E11C"],["noteheads-s0reWalker","E11D"],["noteheads-u1reWalker","E11E"],["noteheads-d1reWalker","E11F"],["noteheads-u2reWalker","E120"],["noteheads-d2reWalker","E121"],["noteheads-s0miWalker","E122"],["noteheads-s1miWalker","E123"],["noteheads-s2miWalker","E124"],["noteheads-s0faWalker","E125"],["noteheads-u1faWalker","E126"],["noteheads-d1faWalker","E127"],["noteheads-u2faWalker","E128"],["noteheads-d2faWalker","E129"],["noteheads-s0laWalker","E12A"],["noteheads-s1laWalker","E12B"],["noteheads-s2laWalker","E12C"],["noteheads-s0tiWalker","E12D"],["noteheads-u1tiWalker","E12E"],["noteheads-d1tiWalker","E12F"],["noteheads-u2tiWalker","E130"],["noteheads-d2tiWalker","E131"],["noteheads-uM3neomensural","E1D6"],["noteheads-dM3neomensural","E1D7"],["noteheads-uM2neomensural","E1D8"],["noteheads-dM2neomensural","E1D9"],["noteheads-sM1neomensural","E1DA"],["noteheads-urM3neomensural","E1DB"],["noteheads-drM3neomensural","E1DC"],["noteheads-urM2neomensural","E1DD"],["noteheads-drM2neomensural","E1DE"],["noteheads-srM1neomensural","E1DF"],["noteheads-s0neomensural","E1E0"],["noteheads-s1neomensural","E1E1"],["noteheads-s2neomensural","E1E2"],["noteheads-s0harmonic","E1E3"],["noteheads-s2harmonic","E1E4"],["noteheads-uM3mensural","E1E5"],["noteheads-dM3mensural","E1E6"],["noteheads-sM3ligmensural","E1E7"],["noteheads-uM2mensural","E1E8"],["noteheads-dM2mensural","E1E9"],["noteheads-sM2ligmensural","E1EA"],["noteheads-sM1mensural","E1EB"],["noteheads-urM3mensural","E1EC"],["noteheads-drM3mensural","E1ED"],["noteheads-srM3ligmensural","E1EE"],["noteheads-urM2mensural","E1EF"],["noteheads-drM2mensural","E1F0"],["noteheads-srM2ligmensural","E1F1"],["noteheads-srM1mensural","E1F2"],["noteheads-uM3semimensural","E1F3"],["noteheads-dM3semimensural","E1F4"],["noteheads-sM3semiligmensural","E1F5"],["noteheads-uM2semimensural","E1F6"],["noteheads-dM2semimensural","E1F7"],["noteheads-sM2semiligmensural","E1F8"],["noteheads-sM1semimensural","E1F9"],["noteheads-urM3semimensural","E1FA"],["noteheads-drM3semimensural","E1FB"],["noteheads-srM3semiligmensural","E1FC"],["noteheads-urM2semimensural","E1FD"],["noteheads-drM2semimensural","E1FE"],["noteheads-srM2semiligmensural","E1FF"],["noteheads-srM1semimensural","E200"],["noteheads-uM3blackmensural","E201"],["noteheads-dM3blackmensural","E202"],["noteheads-sM3blackligmensural","E203"],["noteheads-uM2blackmensural","E204"],["noteheads-dM2blackmensural","E205"],["noteheads-sM2blackligmensural","E206"],["noteheads-sM1blackmensural","E207"],["noteheads-s0mensural","E208"],["noteheads-s1mensural","E209"],["noteheads-s2mensural","E20A"],["noteheads-s0blackmensural","E20B"],["noteheads-s0petrucci","E20C"],["noteheads-s1petrucci","E20D"],["noteheads-s2petrucci","E20E"],["noteheads-s0blackpetrucci","E20F"],["noteheads-s1blackpetrucci","E210"],["noteheads-s2blackpetrucci","E211"],["noteheads-svaticana-punctum","E212"],["noteheads-svaticana-punctum-cavum","E213"],["noteheads-svaticana-linea-punctum","E214"],["noteheads-svaticana-linea-punctum-cavum","E215"],["noteheads-svaticana-inclinatum","E216"],["noteheads-svaticana-lpes","E217"],["noteheads-svaticana-vlpes","E218"],["noteheads-svaticana-upes","E219"],["noteheads-svaticana-vupes","E21A"],["noteheads-svaticana-plica","E21B"],["noteheads-svaticana-vplica","E21C"],["noteheads-svaticana-epiphonus","E21D"],["noteheads-svaticana-vepiphonus","E21E"],["noteheads-svaticana-reverse-plica","E21F"],["noteheads-svaticana-reverse-vplica","E220"],["noteheads-svaticana-inner-cephalicus","E221"],["noteheads-svaticana-cephalicus","E222"],["noteheads-svaticana-quilisma","E223"],["noteheads-ssolesmes-incl-parvum","E224"],["noteheads-ssolesmes-auct-asc","E225"],["noteheads-ssolesmes-auct-desc","E226"],["noteheads-ssolesmes-incl-auctum","E227"],["noteheads-ssolesmes-stropha","E228"],["noteheads-ssolesmes-stropha-aucta","E229"],["noteheads-ssolesmes-oriscus","E22A"],["noteheads-smedicaea-inclinatum","E22B"],["noteheads-smedicaea-punctum","E22C"],["noteheads-smedicaea-rvirga","E22D"],["noteheads-smedicaea-virga","E22E"],["noteheads-shufnagel-punctum","E22F"],["noteheads-shufnagel-virga","E230"],["noteheads-shufnagel-lpes","E231"],["noteheads-sM2kievan","E232"],["noteheads-sM1kievan","E233"],["noteheads-s0kievan","E234"],["noteheads-d2kievan","E235"],["noteheads-u2kievan","E236"],["noteheads-s1kievan","E237"],["noteheads-sr1kievan","E238"],["noteheads-d3kievan","E239"],["noteheads-u3kievan","E23A"]],flags:[["flags-u3","E132"],["flags-u4","E133"],["flags-u5","E134"],["flags-u6","E135"],["flags-u7","E136"],["flags-u8","E137"],["flags-u9","E138"],["flags-u10","E139"],["flags-d3","E13A"],["flags-d4","E13B"],["flags-d5","E13C"],["flags-d6","E13D"],["flags-d7","E13E"],["flags-d8","E13F"],["flags-d9","E140"],["flags-d10","E141"],["flags-ugrace","E142"],["flags-dgrace","E143"],["flags-mensuralu03","E19C"],["flags-mensuralu13","E19D"],["flags-mensuralu23","E19E"],["flags-mensurald03","E19F"],["flags-mensurald13","E1A0"],["flags-mensurald23","E1A1"],["flags-mensuralu04","E1A2"],["flags-mensuralu14","E1A3"],["flags-mensuralu24","E1A4"],["flags-mensurald04","E1A5"],["flags-mensurald14","E1A6"],["flags-mensurald24","E1A7"],["flags-mensuralu05","E1A8"],["flags-mensuralu15","E1A9"],["flags-mensuralu25","E1AA"],["flags-mensurald05","E1AB"],["flags-mensurald15","E1AC"],["flags-mensurald25","E1AD"],["flags-mensuralu06","E1AE"],["flags-mensuralu16","E1AF"],["flags-mensuralu26","E1B0"],["flags-mensurald06","E1B1"],["flags-mensurald16","E1B2"],["flags-mensurald26","E1B3"]],custodes:[["custodes-hufnagel-u0","E17C"],["custodes-hufnagel-u1","E17D"],["custodes-hufnagel-u2","E17E"],["custodes-hufnagel-d0","E17F"],["custodes-hufnagel-d1","E180"],["custodes-hufnagel-d2","E181"],["custodes-medicaea-u0","E182"],["custodes-medicaea-u1","E183"],["custodes-medicaea-u2","E184"],["custodes-medicaea-d0","E185"],["custodes-medicaea-d1","E186"],["custodes-medicaea-d2","E187"],["custodes-vaticana-u0","E188"],["custodes-vaticana-u1","E189"],["custodes-vaticana-u2","E18A"],["custodes-vaticana-d0","E18B"],["custodes-vaticana-d1","E18C"],["custodes-vaticana-d2","E18D"],["custodes-mensural-u0","E18E"],["custodes-mensural-u1","E18F"],["custodes-mensural-u2","E190"],["custodes-mensural-d0","E191"],["custodes-mensural-d1","E192"],["custodes-mensural-d2","E193"]],dots:[["dots-dotvaticana","E1D4"],["dots-dotkievan","E1D5"]]},i={rests:"Rests",accidentals:"Accidentals",arrowheads:"Arrowheads",dot:"Dot",scripts:"Scripts & Articulations",clefs:"Clefs",timesig:"Time Signatures",pedal:"Pedal",brackettips:"Bracket Tips",accordion:"Accordion",ties:"Ties",noteheads:"Noteheads",flags:"Flags",custodes:"Custodes",dots:"Dots"};function f(){const[o,u]=d.useState(!1),[E,h]=d.useState(""),[r,m]=d.useState(40);d.useEffect(()=>{document.fonts.ready.then(()=>{u(document.fonts.check("40px Emmentaler-26"))})},[]);const c=Object.keys(l);return e.jsxs("div",{className:"font-test-page",children:[e.jsxs("div",{className:"font-test-header",children:[e.jsx("h1",{children:"Emmentaler-26 Font Glyphs"}),e.jsxs("div",{className:"font-test-status",children:["Font status: ",e.jsx("span",{className:o?"loaded":"not-loaded",children:o?"Loaded":"Not loaded"}),e.jsxs("span",{className:"glyph-count",children:[Object.values(l).reduce((s,n)=>s+n.length,0)," glyphs"]})]}),e.jsxs("div",{className:"font-test-controls",children:[e.jsx("input",{type:"text",placeholder:"Filter glyphs...",value:E,onChange:s=>h(s.target.value)}),e.jsxs("label",{children:["Size:",e.jsx("input",{type:"range",min:20,max:80,value:r,onChange:s=>m(Number(s.target.value))}),r,"px"]})]}),e.jsx("div",{className:"font-test-toc",children:c.map(s=>e.jsxs("a",{href:`#cat-${s}`,children:[i[s]||s," (",l[s].length,")"]},s))})]}),c.map(s=>{const n=l[s].filter(([a,t])=>!E||a.toLowerCase().includes(E.toLowerCase())||t.toLowerCase().includes(E.toLowerCase()));return n.length===0?null:e.jsxs("div",{id:`cat-${s}`,className:"font-test-category",children:[e.jsxs("h2",{children:[i[s]||s," ",e.jsxs("span",{children:["(",n.length,")"]})]}),e.jsx("div",{className:"glyph-grid",children:n.map(([a,t])=>e.jsxs("div",{className:"glyph-cell",title:a,children:[e.jsx("div",{className:"glyph-render",style:{fontSize:r},children:e.jsx("i",{className:`emmentaler glyph-${a}`})}),e.jsx("div",{className:"glyph-unicode",style:{fontSize:r},children:String.fromCodePoint(parseInt(t,16))}),e.jsx("div",{className:"glyph-name",children:a}),e.jsxs("div",{className:"glyph-code",children:["U+",t]})]},`${a}-${t}`))})]},s)})]})}export{f as default}; diff --git a/dist/assets/gauge-ab1f0653.js b/dist/assets/gauge-997625d7.js similarity index 82% rename from dist/assets/gauge-ab1f0653.js rename to dist/assets/gauge-997625d7.js index 61524f51469e19eb79c86c1ede9191e4bfac4ce5..5dcc998287501b284d1e1a6089a2941eb4c707d2 100644 --- a/dist/assets/gauge-ab1f0653.js +++ b/dist/assets/gauge-997625d7.js @@ -1 +1 @@ -import{r as e,j as r}from"./umi-2135699e.js";import{G as d}from"./gaugeRendererGL-9dc55e03.js";const a=[["source1.png","gauge1.png"],["source2.png","gauge2.png"]];function l(){const n=e.useRef(),t=e.useRef(),s=e.useRef(),[c,o]=e.useState(),[u,g]=e.useState(0);return e.useEffect(()=>{o(new d({source:n.current,gauge:t.current,canvas:s.current}))},[n.current,t.current,s.current]),r.jsxs("div",{children:[r.jsx("img",{ref:n,src:`/test.local/${a[u][0]}`}),r.jsx("img",{ref:t,src:`/test.local/${a[u][1]}`}),r.jsx("canvas",{ref:s}),r.jsx("button",{onClick:()=>g((u+1)%a.length),children:"change"}),r.jsx("button",{onClick:()=>{c.updateMaterial({width:t.current.width}),c.updateGeometry(),c.render()},children:"render"})]})}export{l as default}; +import{r as e,j as r}from"./umi-6680b95f.js";import{G as d}from"./gaugeRendererGL-41abf4c6.js";const a=[["source1.png","gauge1.png"],["source2.png","gauge2.png"]];function l(){const n=e.useRef(),t=e.useRef(),s=e.useRef(),[c,o]=e.useState(),[u,g]=e.useState(0);return e.useEffect(()=>{o(new d({source:n.current,gauge:t.current,canvas:s.current}))},[n.current,t.current,s.current]),r.jsxs("div",{children:[r.jsx("img",{ref:n,src:`/test.local/${a[u][0]}`}),r.jsx("img",{ref:t,src:`/test.local/${a[u][1]}`}),r.jsx("canvas",{ref:s}),r.jsx("button",{onClick:()=>g((u+1)%a.length),children:"change"}),r.jsx("button",{onClick:()=>{c.updateMaterial({width:t.current.width}),c.updateGeometry(),c.render()},children:"render"})]})}export{l as default}; diff --git a/dist/assets/gaugeRendererGL-41abf4c6.js b/dist/assets/gaugeRendererGL-41abf4c6.js new file mode 100644 index 0000000000000000000000000000000000000000..4fedb7152d752719af6d12cfd3dc7f22312780fa --- /dev/null +++ b/dist/assets/gaugeRendererGL-41abf4c6.js @@ -0,0 +1,82 @@ +const U=`//#version 300 es +//#define attribute in +//#define varying out +//#define texture2D texture + +precision highp float; +precision highp int; + +#define HIGH_PRECISION +#define SHADER_NAME MeshBasicMaterial +#define VERTEX_TEXTURES +#define USE_MAP +#define USE_UV +#define BONE_TEXTURE +#define DOUBLE_SIDED +uniform mat4 modelViewMatrix; +uniform mat4 projectionMatrix; +uniform vec3 cameraPosition; + +attribute vec3 position; +attribute vec3 normal; +attribute vec2 uv; + +#ifdef USE_UV + varying vec2 vUv; + uniform mat3 uvTransform; +#endif + +void main() { +#ifdef USE_UV + vUv = ( uvTransform * vec3( uv, 1 ) ).xy; +#endif + + vec3 transformed = vec3( position ); + + vec4 mvPosition = vec4( transformed, 1.0 ); + mvPosition = modelViewMatrix * mvPosition; + gl_Position = projectionMatrix * mvPosition; +} +`,x=`//#version 300 es +//#define varying in +//out highp vec4 pc_fragColor; +//#define gl_FragColor pc_fragColor +//#define texture2D texture + +precision highp float; +precision highp int; + +#define HIGH_PRECISION +#define SHADER_NAME MeshBasicMaterial +#define USE_MAP +#define USE_UV +#define DOUBLE_SIDED +uniform vec3 cameraPosition; + +vec4 LinearToLinear( in vec4 value ) { + return value; +} +vec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); } + +uniform vec3 diffuse; +uniform float opacity; + +#if defined( USE_UV ) + varying vec2 vUv; +#endif +#ifdef USE_MAP + uniform sampler2D map; +#endif + + +void main() { + vec4 diffuseColor = vec4( diffuse, opacity ); +#ifdef USE_MAP + vec4 texelColor = texture2D( map, vUv ); + texelColor = mapTexelToLinear( texelColor ); + diffuseColor *= texelColor; +#endif + + gl_FragColor = diffuseColor; +} +`,l=p=>p.flat(1);class S{sourceElem;gaugeElem;canvas;context;program;texture;pos;uv;ib;primitiveCount;width=256;height=192;constructor(t){if(this.sourceElem=t.source,this.gaugeElem=t.gauge,this.canvas=t.canvas,Number.isFinite(t.height)&&(this.height=t.height),this.context=this.canvas.getContext("webgl2",{antialias:!0,depth:!1}),!this.context){console.warn("WebGL2 is not available, GaugeRenderer disabled.");return}const e=this.context;e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_FLOAT),e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT),this.program=e.createProgram();const a=e.createShader(e.VERTEX_SHADER);e.shaderSource(a,U),e.compileShader(a);const h=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(h,x),e.compileShader(h),e.attachShader(this.program,a),e.attachShader(this.program,h),e.linkProgram(this.program);const m=e.getProgramInfoLog(this.program);m&&console.warn("program log:",m);const c=e.getShaderInfoLog(a);c&&console.warn("vs log:",c);const f=e.getShaderInfoLog(h);f&&console.warn("fs log:",f),e.deleteShader(a),e.deleteShader(h);const{name:s}=e.getActiveUniform(this.program,0),g=e.getUniformLocation(this.program,s),{name:E}=e.getActiveUniform(this.program,1),d=e.getUniformLocation(this.program,E),{name:u}=e.getActiveUniform(this.program,2),o=e.getUniformLocation(this.program,u),{name:r}=e.getActiveUniform(this.program,3),i=e.getUniformLocation(this.program,r),{name:v}=e.getActiveUniform(this.program,4),n=e.getUniformLocation(this.program,v),{name:T}=e.getActiveUniform(this.program,5),R=e.getUniformLocation(this.program,T);e.useProgram(this.program),e.uniformMatrix4fv(d,!1,new Float32Array([.0026385225355625153,0,0,0,0,-.010416666977107525,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1])),e.uniformMatrix4fv(g,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1,1])),e.uniformMatrix3fv(o,!1,new Float32Array([1,0,0,0,1,0,0,0,1])),e.uniform3f(i,1,1,1),e.uniform1f(n,1),e.uniform1i(R,0),this.texture=e.createTexture(),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,this.texture),e.pixelStorei(37440,!0),e.pixelStorei(37441,!1),e.pixelStorei(e.UNPACK_ALIGNMENT,4),e.pixelStorei(37443,0),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.disable(e.CULL_FACE),e.depthMask(!0),e.colorMask(!0,!0,!0,!0),e.disable(e.STENCIL_TEST),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_ALPHA_TO_COVERAGE),this.pos=e.createBuffer(),this.uv=e.createBuffer(),this.ib=e.createBuffer();const A=e.getAttribLocation(this.program,"position"),_=e.getAttribLocation(this.program,"uv");e.enableVertexAttribArray(A),e.bindBuffer(e.ARRAY_BUFFER,this.pos),e.vertexAttribPointer(A,3,e.FLOAT,!1,0,0),e.enableVertexAttribArray(_),e.bindBuffer(e.ARRAY_BUFFER,this.uv),e.vertexAttribPointer(_,2,e.FLOAT,!1,0,0)}updateMaterial({width:t=null}={}){if(!this.context)return;const e=this.context;if(this.sourceElem.naturalWidth!==this.width||this.sourceElem.naturalHeight!==this.height){Number.isFinite(t)?this.width=t:this.width=Math.round(this.height*this.sourceElem.naturalWidth/this.sourceElem.naturalHeight),this.canvas.width=this.width,this.canvas.height=this.height,e.viewport(0,0,this.width,this.height);const a=e.getUniformLocation(this.program,"projectionMatrix");e.uniformMatrix4fv(a,!1,new Float32Array([2/this.width,0,0,0,0,-2/this.height,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1]))}e.bindTexture(e.TEXTURE_2D,this.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA8,e.RGBA,e.UNSIGNED_BYTE,this.sourceElem),e.generateMipmap(e.TEXTURE_2D)}updateGeometry(t=null){if(!this.context)return;const{naturalWidth:e,naturalHeight:a}=this.gaugeElem,m=new OffscreenCanvas(e,a).getContext("2d");m.drawImage(this.gaugeElem,0,0);const{data:c}=m.getImageData(0,0,e,a),f=this.width/e;t=Math.round(Number.isFinite(t)?t:a/2),t=Math.max(0,Math.min(a-1,t));const s=Array(a).fill(null).map((r,i)=>Array(e).fill(null).map((v,n)=>({uv:[(n+.5)/e,1-(i+.5)/a],position:[(n-e/2)*f,(c[(i*e+n)*4]+c[(i*e+n)*4+2]/256-128)/f,0]})));for(let r=t;r>0;--r)for(let i=0;ir.uv)),E=l(l(s).map(r=>r.position)),d=Array(a-1).fill(null).map((r,i)=>Array(e-1).fill(null).map((v,n)=>[i*e+n,i*e+n+1,(i+1)*e+n,(i+1)*e+n,(i+1)*e+n+1,i*e+n+1])),u=l(l(d)),o=this.context;o.bindBuffer(o.ARRAY_BUFFER,this.pos),o.bufferData(o.ARRAY_BUFFER,new Float32Array(E),o.STATIC_DRAW),o.bindBuffer(o.ARRAY_BUFFER,this.uv),o.bufferData(o.ARRAY_BUFFER,new Float32Array(g),o.STATIC_DRAW),o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,this.ib),o.bufferData(o.ELEMENT_ARRAY_BUFFER,new Uint32Array(u),o.STATIC_DRAW),this.primitiveCount=u.length}render(){if(!this.context)return"";const t=this.context;return t.clearColor(1,1,1,0),t.clear(t.COLOR_BUFFER_BIT),t.drawElements(t.TRIANGLES,this.primitiveCount,t.UNSIGNED_INT,0),this.canvas.toDataURL()}getBlob(){return new Promise(t=>this.canvas.toBlob(t,"image/png"))}}export{S as G}; diff --git a/dist/assets/gaugeRendererGL-9dc55e03.js b/dist/assets/gaugeRendererGL-9dc55e03.js deleted file mode 100644 index 4e794a9cc805379dc2682757b20d7645ae9ffa14..0000000000000000000000000000000000000000 --- a/dist/assets/gaugeRendererGL-9dc55e03.js +++ /dev/null @@ -1,82 +0,0 @@ -const U=`//#version 300 es -//#define attribute in -//#define varying out -//#define texture2D texture - -precision highp float; -precision highp int; - -#define HIGH_PRECISION -#define SHADER_NAME MeshBasicMaterial -#define VERTEX_TEXTURES -#define USE_MAP -#define USE_UV -#define BONE_TEXTURE -#define DOUBLE_SIDED -uniform mat4 modelViewMatrix; -uniform mat4 projectionMatrix; -uniform vec3 cameraPosition; - -attribute vec3 position; -attribute vec3 normal; -attribute vec2 uv; - -#ifdef USE_UV - varying vec2 vUv; - uniform mat3 uvTransform; -#endif - -void main() { -#ifdef USE_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; -#endif - - vec3 transformed = vec3( position ); - - vec4 mvPosition = vec4( transformed, 1.0 ); - mvPosition = modelViewMatrix * mvPosition; - gl_Position = projectionMatrix * mvPosition; -} -`,S=`//#version 300 es -//#define varying in -//out highp vec4 pc_fragColor; -//#define gl_FragColor pc_fragColor -//#define texture2D texture - -precision highp float; -precision highp int; - -#define HIGH_PRECISION -#define SHADER_NAME MeshBasicMaterial -#define USE_MAP -#define USE_UV -#define DOUBLE_SIDED -uniform vec3 cameraPosition; - -vec4 LinearToLinear( in vec4 value ) { - return value; -} -vec4 mapTexelToLinear( vec4 value ) { return LinearToLinear( value ); } - -uniform vec3 diffuse; -uniform float opacity; - -#if defined( USE_UV ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - uniform sampler2D map; -#endif - - -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); -#ifdef USE_MAP - vec4 texelColor = texture2D( map, vUv ); - texelColor = mapTexelToLinear( texelColor ); - diffuseColor *= texelColor; -#endif - - gl_FragColor = diffuseColor; -} -`,m=p=>p.flat(1);class x{sourceElem;gaugeElem;canvas;context;program;texture;pos;uv;ib;primitiveCount;width=256;height=192;constructor(t){this.sourceElem=t.source,this.gaugeElem=t.gauge,this.canvas=t.canvas,Number.isFinite(t.height)&&(this.height=t.height),this.context=this.canvas.getContext("webgl2",{antialias:!0,depth:!1});const e=this.context;window.gl=e,e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_FLOAT),e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT),this.program=e.createProgram();const a=e.createShader(e.VERTEX_SHADER);e.shaderSource(a,U),e.compileShader(a);const h=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(h,S),e.compileShader(h),e.attachShader(this.program,a),e.attachShader(this.program,h),e.linkProgram(this.program);const l=e.getProgramInfoLog(this.program);l&&console.warn("program log:",l);const c=e.getShaderInfoLog(a);c&&console.warn("vs log:",c);const f=e.getShaderInfoLog(h);f&&console.warn("fs log:",f),e.deleteShader(a),e.deleteShader(h);const{name:s}=e.getActiveUniform(this.program,0),g=e.getUniformLocation(this.program,s),{name:E}=e.getActiveUniform(this.program,1),d=e.getUniformLocation(this.program,E),{name:u}=e.getActiveUniform(this.program,2),o=e.getUniformLocation(this.program,u),{name:r}=e.getActiveUniform(this.program,3),i=e.getUniformLocation(this.program,r),{name:v}=e.getActiveUniform(this.program,4),n=e.getUniformLocation(this.program,v),{name:T}=e.getActiveUniform(this.program,5),R=e.getUniformLocation(this.program,T);e.useProgram(this.program),e.uniformMatrix4fv(d,!1,new Float32Array([.0026385225355625153,0,0,0,0,-.010416666977107525,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1])),e.uniformMatrix4fv(g,!1,new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1,1])),e.uniformMatrix3fv(o,!1,new Float32Array([1,0,0,0,1,0,0,0,1])),e.uniform3f(i,1,1,1),e.uniform1f(n,1),e.uniform1i(R,0),this.texture=e.createTexture(),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,this.texture),e.pixelStorei(37440,!0),e.pixelStorei(37441,!1),e.pixelStorei(e.UNPACK_ALIGNMENT,4),e.pixelStorei(37443,0),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.disable(e.CULL_FACE),e.depthMask(!0),e.colorMask(!0,!0,!0,!0),e.disable(e.STENCIL_TEST),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_ALPHA_TO_COVERAGE),this.pos=e.createBuffer(),this.uv=e.createBuffer(),this.ib=e.createBuffer();const A=e.getAttribLocation(this.program,"position"),_=e.getAttribLocation(this.program,"uv");e.enableVertexAttribArray(A),e.bindBuffer(e.ARRAY_BUFFER,this.pos),e.vertexAttribPointer(A,3,e.FLOAT,!1,0,0),e.enableVertexAttribArray(_),e.bindBuffer(e.ARRAY_BUFFER,this.uv),e.vertexAttribPointer(_,2,e.FLOAT,!1,0,0)}updateMaterial({width:t=null}={}){const e=this.context;if(this.sourceElem.naturalWidth!==this.width||this.sourceElem.naturalHeight!==this.height){Number.isFinite(t)?this.width=t:this.width=Math.round(this.height*this.sourceElem.naturalWidth/this.sourceElem.naturalHeight),this.canvas.width=this.width,this.canvas.height=this.height,e.viewport(0,0,this.width,this.height);const a=e.getUniformLocation(this.program,"projectionMatrix");e.uniformMatrix4fv(a,!1,new Float32Array([2/this.width,0,0,0,0,-2/this.height,0,0,0,0,-.20202019810676575,0,0,0,-1.0202020406723022,1]))}e.bindTexture(e.TEXTURE_2D,this.texture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA8,e.RGBA,e.UNSIGNED_BYTE,this.sourceElem),e.generateMipmap(e.TEXTURE_2D)}updateGeometry(t=null){const{naturalWidth:e,naturalHeight:a}=this.gaugeElem,l=new OffscreenCanvas(e,a).getContext("2d");l.drawImage(this.gaugeElem,0,0);const{data:c}=l.getImageData(0,0,e,a),f=this.width/e;t=Math.round(Number.isFinite(t)?t:a/2),t=Math.max(0,Math.min(a-1,t));const s=Array(a).fill(null).map((r,i)=>Array(e).fill(null).map((v,n)=>({uv:[(n+.5)/e,1-(i+.5)/a],position:[(n-e/2)*f,(c[(i*e+n)*4]+c[(i*e+n)*4+2]/256-128)/f,0]})));for(let r=t;r>0;--r)for(let i=0;ir.uv)),E=m(m(s).map(r=>r.position)),d=Array(a-1).fill(null).map((r,i)=>Array(e-1).fill(null).map((v,n)=>[i*e+n,i*e+n+1,(i+1)*e+n,(i+1)*e+n,(i+1)*e+n+1,i*e+n+1])),u=m(m(d)),o=this.context;o.bindBuffer(o.ARRAY_BUFFER,this.pos),o.bufferData(o.ARRAY_BUFFER,new Float32Array(E),o.STATIC_DRAW),o.bindBuffer(o.ARRAY_BUFFER,this.uv),o.bufferData(o.ARRAY_BUFFER,new Float32Array(g),o.STATIC_DRAW),o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,this.ib),o.bufferData(o.ELEMENT_ARRAY_BUFFER,new Uint32Array(u),o.STATIC_DRAW),this.primitiveCount=u.length}render(){const t=this.context;return t.clearColor(1,1,1,0),t.clear(t.COLOR_BUFFER_BIT),t.drawElements(t.TRIANGLES,this.primitiveCount,t.UNSIGNED_INT,0),this.canvas.toDataURL()}getBlob(){return new Promise(t=>this.canvas.toBlob(t,"image/png"))}}export{x as G}; diff --git a/dist/assets/index-03b8481a.js b/dist/assets/index-03b8481a.js new file mode 100644 index 0000000000000000000000000000000000000000..51ffd251ae6c6436836f54a31074afa35965fc7c --- /dev/null +++ b/dist/assets/index-03b8481a.js @@ -0,0 +1 @@ +import{r as i,_ as P,j as v}from"./umi-6680b95f.js";import{p as pe,m as B}from"./parser-287f5adf.js";import{S as be}from"./scheduler-a7fa9c3c.js";import{S as Ce}from"./schedulePool-cc4538c2.js";import{A as ke}from"./index-8e2c24ae.js";import{B as fe}from"./button-8d21fb6b.js";import{A as Ne,f as de,c as M,b as C,C as U,o as Q,_ as Ee,j as we,k as ye,S as Pe,m as Se}from"./_setToString-64803aa4.js";import{T as je,a as Oe}from"./index-e2aeedec.js";import{S as ve,C as Te}from"./TextArea-268b64d7.js";import{S as $e}from"./index-b794056b.js";import{I as Me,U as he,a as ze}from"./index-0f8e140e.js";import{J as Le}from"./jszip.min-a6cfb3d9.js";import{S as _e}from"./index-3d0ba768.js";import{S as Ae}from"./index-aed7031e.js";import{a as Re,P as Ie}from"./PlaySquareOutlined-02fec6b0.js";import"./Dropdown-ff3ebc45.js";import"./progress-ab875831.js";import"./DeleteOutlined-60e63eb1.js";import"./DownloadOutlined-fad249b6.js";var Be={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"dot-chart",theme:"outlined"};const Fe=Be;var De=function(t,r){return i.createElement(Ne,de(de({},t),{},{ref:r,icon:Fe}))},Ue=i.forwardRef(De);const qe=Ue;var Ye=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.size,l=t.shape,n=M(C(C({},"".concat(r,"-lg"),o==="large"),"".concat(r,"-sm"),o==="small")),c=M(C(C(C({},"".concat(r,"-circle"),l==="circle"),"".concat(r,"-square"),l==="square"),"".concat(r,"-round"),l==="round")),u=i.useMemo(function(){return typeof o=="number"?{width:o,height:o,lineHeight:"".concat(o,"px")}:{}},[o]);return i.createElement("span",{className:M(r,n,c,a),style:P(P({},u),s)})};const ee=Ye;var Ke=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.shape,l=o===void 0?"circle":o,n=t.size,c=n===void 0?"default":n,u=i.useContext(U),m=u.getPrefixCls,d=m("skeleton",r),b=Q(t,["prefixCls","className"]),k=M(d,"".concat(d,"-element"),C({},"".concat(d,"-active"),s),a);return i.createElement("div",{className:k},i.createElement(ee,P({prefixCls:"".concat(d,"-avatar"),shape:l,size:c},b)))};const We=Ke;var Ge=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.block,l=o===void 0?!1:o,n=t.size,c=n===void 0?"default":n,u=i.useContext(U),m=u.getPrefixCls,d=m("skeleton",r),b=Q(t,["prefixCls"]),k=M(d,"".concat(d,"-element"),C(C({},"".concat(d,"-active"),s),"".concat(d,"-block"),l),a);return i.createElement("div",{className:k},i.createElement(ee,P({prefixCls:"".concat(d,"-button"),size:c},b)))};const Je=Ge;var Xe=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.active,l=t.children,n=i.useContext(U),c=n.getPrefixCls,u=c("skeleton",r),m=M(u,"".concat(u,"-element"),C({},"".concat(u,"-active"),o),a),d=l??i.createElement(qe,null);return i.createElement("div",{className:m},i.createElement("div",{className:M("".concat(u,"-image"),a),style:s},d))};const He=Xe;var Ze="M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z",Ve=function(t){var r=t.prefixCls,a=t.className,s=t.style,o=t.active,l=i.useContext(U),n=l.getPrefixCls,c=n("skeleton",r),u=M(c,"".concat(c,"-element"),C({},"".concat(c,"-active"),o),a);return i.createElement("div",{className:u},i.createElement("div",{className:M("".concat(c,"-image"),a),style:s},i.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:"".concat(c,"-image-svg")},i.createElement("path",{d:Ze,className:"".concat(c,"-image-path")}))))};const Qe=Ve;var et=function(t){var r=t.prefixCls,a=t.className,s=t.active,o=t.block,l=t.size,n=l===void 0?"default":l,c=i.useContext(U),u=c.getPrefixCls,m=u("skeleton",r),d=Q(t,["prefixCls"]),b=M(m,"".concat(m,"-element"),C(C({},"".concat(m,"-active"),s),"".concat(m,"-block"),o),a);return i.createElement("div",{className:b},i.createElement(ee,P({prefixCls:"".concat(m,"-input"),size:n},d)))};const tt=et;var at=function(t){var r=function(u){var m=t.width,d=t.rows,b=d===void 0?2:d;if(Array.isArray(m))return m[u];if(b-1===u)return m},a=t.prefixCls,s=t.className,o=t.style,l=t.rows,n=Ee(Array(l)).map(function(c,u){return i.createElement("li",{key:u,style:{width:r(u)}})});return i.createElement("ul",{className:M(a,s),style:o},n)};const rt=at;var st=function(t){var r=t.prefixCls,a=t.className,s=t.width,o=t.style;return i.createElement("h3",{className:M(r,a),style:P({width:s},o)})};const nt=st;function ce(e){return e&&we(e)==="object"?e:{}}function it(e,t){return e&&!t?{size:"large",shape:"square"}:{size:"large",shape:"circle"}}function ct(e,t){return!e&&t?{width:"38%"}:e&&t?{width:"50%"}:{}}function ot(e,t){var r={};return(!e||!t)&&(r.width="61%"),!e&&t?r.rows=3:r.rows=2,r}var W=function(t){var r=t.prefixCls,a=t.loading,s=t.className,o=t.style,l=t.children,n=t.avatar,c=n===void 0?!1:n,u=t.title,m=u===void 0?!0:u,d=t.paragraph,b=d===void 0?!0:d,k=t.active,T=t.round,_=i.useContext(U),R=_.getPrefixCls,I=_.direction,S=R("skeleton",r);if(a||!("loading"in t)){var h=!!c,y=!!m,N=!!b,j;if(h){var O=P(P({prefixCls:"".concat(S,"-avatar")},it(y,N)),ce(c));j=i.createElement("div",{className:"".concat(S,"-header")},i.createElement(ee,P({},O)))}var E;if(y||N){var z;if(y){var A=P(P({prefixCls:"".concat(S,"-title")},ct(h,N)),ce(m));z=i.createElement(nt,P({},A))}var $;if(N){var F=P(P({prefixCls:"".concat(S,"-paragraph")},ot(h,y)),ce(b));$=i.createElement(rt,P({},F))}E=i.createElement("div",{className:"".concat(S,"-content")},z,$)}var q=M(S,C(C(C(C({},"".concat(S,"-with-avatar"),h),"".concat(S,"-active"),k),"".concat(S,"-rtl"),I==="rtl"),"".concat(S,"-round"),T),s);return i.createElement("div",{className:q,style:o},j,E)}return typeof l<"u"?l:null};W.Button=Je;W.Avatar=We;W.Input=tt;W.Image=Qe;W.Node=He;const lt=W;var ut=globalThis&&globalThis.__rest||function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(r[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,a=Object.getOwnPropertySymbols(e);s((e==null?void 0:e.pages.slice(0,t).reduce((a,s)=>a+s.systems.length,0))||0)+r,Ct=e=>{const t=e.source;if(!(t!=null&&t.w)||!(t!=null&&t.h))return"";const r=t.interval||1,a=t.matrix||[1,0,0,1,0,0];return`translate(${e.w/2} ${e.h/2}) matrix(${a.join(" ")}) scale(${1/r}) translate(${-t.w/2} ${-t.h/2})`},kt=e=>[...e.pages.map(t=>{var r;return(r=t.source)==null?void 0:r.url}),...e.pages.flatMap(t=>t.systems.flatMap(r=>r.staves.map(a=>{var s;return(s=a.image)==null?void 0:s.url})))].filter(Boolean),oe=e=>{if((e==null?void 0:e.format)!=="LiveScore"||(e==null?void 0:e.version)!==1||!Array.isArray(e==null?void 0:e.pages))throw new Error("Invalid LiveScore file.");return e},Nt=async(e,t)=>{const r=[];return await Promise.all(kt(e).map(async a=>{if(!a||/^\w+:/.test(a)||a.startsWith("/"))return;const s=t.files[a];if(!s)throw new Error(`Missing asset: ${a}`);const o=await s.async("blob"),l=URL.createObjectURL(o);r.push(l),e.pages.forEach(n=>{var c;((c=n.source)==null?void 0:c.url)===a&&(n.source.url=l),n.systems.forEach(u=>{u.staves.forEach(m=>{var d;((d=m.image)==null?void 0:d.url)===a&&(m.image.url=l)})})})})),r},Et=async e=>{if(/\.json$/i.test(e.name)||e.type==="application/json")return{liveScore:oe(JSON.parse(await e.text())),objectUrls:[]};const t=await Le.loadAsync(e),r=t.files["index.json"];if(!r)throw new Error("No index.json found in LiveScore package.");const a=oe(JSON.parse(await r.async("text"))),s=await Nt(a,t);return{liveScore:a,objectUrls:s}},wt=(e,t)=>{var a;const r=JSON.parse(JSON.stringify(t));(a=r.pages)==null||a.forEach(s=>{var o,l;(l=(o=s.source)==null?void 0:o.url)!=null&&l.startsWith("blob:")&&(s.source.url=""),s.systems.forEach(n=>{n.staves.forEach(c=>{var u,m;(m=(u=c.image)==null?void 0:u.url)!=null&&m.startsWith("blob:")&&(c.image.url="")})})}),sessionStorage.setItem(ue,JSON.stringify({fileName:e,liveScore:r}))},Pt=()=>{const e=sessionStorage.getItem(ue);if(!e)return null;const t=JSON.parse(e);return{fileName:t.fileName||"Restored LiveScore",liveScore:oe(t.liveScore)}},St=e=>{switch(e){case"program":return"programChange";case"note-on":return"noteOn";case"note-off":return"noteOff";case"control":return"controller";case"pitch-bend":return"pitchBend";case"aftertouch":return"channelAftertouch";default:return e}},jt=e=>{var s,o,l;if(!((s=e==null?void 0:e.events)!=null&&s.length))return null;const t=Math.max(1,...e.events.map(n=>Number.isFinite(n.track)?n.track+1:1)),r=Array(t).fill(null).map(()=>[]);e.events.forEach(n=>{var u;const c=Number.isFinite(n.track)?n.track:0;r[c].push({ticks:n.tick,type:"channel",subtype:St(n.type),...Number.isFinite(n.channel)?{channel:n.channel}:{},...Number.isFinite(n.note)?{noteNumber:n.note}:{},...Number.isFinite(n.velocity)?{velocity:n.velocity}:{},...Number.isFinite(n.program)?{programNumber:n.program}:{},...Number.isFinite(n.controller)?{controllerType:n.controller}:{},...Number.isFinite(n.value)?{value:n.value}:{},...(u=n.ids)!=null&&u.length?{ids:n.ids.map(String)}:{}})}),(o=e.tempos)==null||o.forEach(n=>{r[0].push({ticks:n.tick,type:"meta",subtype:"setTempo",microsecondsPerBeat:n.tempo})}),r.forEach(n=>{n.sort((u,m)=>u.ticks-m.ticks||(u.subtype==="noteOff"?-1:0));let c=0;n.forEach(u=>{u.deltaTime=Math.max(u.ticks-c,0),c=u.ticks}),n.push({deltaTime:Math.max((e.endTick||c)-c,0),type:"meta",subtype:"endOfTrack"})});const a=B.MusicNotation.Notation.parseMidi({header:{formatType:1,ticksPerBeat:e.ticksPerBeat||480},tracks:r});return a.measures=(l=e.measures)==null?void 0:l.map(n=>({index:n.i,startTick:n.t1,endTick:n.t2})),a},Ot=e=>{const t=new Map;return e==null||e.pages.forEach((r,a)=>{r.systems.forEach((s,o)=>{const l=me(e,a,o);s.staves.forEach(n=>{var c;(c=n.measures)==null||c.forEach((u,m)=>{var b,k;const d=((b=s.bars)==null?void 0:b[m])??s.w;(k=u.tokens)==null||k.forEach(T=>{T.id!==void 0&&t.set(String(T.id),{system:l,measure:m,x:T.x,endX:d})})})})})}),t},Tt=e=>{var r;const t=(r=e==null?void 0:e.playback)==null?void 0:r.positions;return t!=null&&t.length?new Map(t.map(a=>[String(a.id),{system:a.system,measure:a.measure,x:a.x,endX:a.endX}])):Ot(e)},$t=e=>{var a,s;const t=Tt(e),r={};return(s=(a=e==null?void 0:e.playback)==null?void 0:a.events)==null||s.forEach(o=>{var n;if(o.type!=="note-on"||!((n=o.ids)!=null&&n.length))return;const l=o.ids.map(c=>t.get(String(c))).filter(Boolean);l.length&&(r[o.tick]=r[o.tick]||[],r[o.tick].push(...l))}),Object.keys(r).length?be.createFromTokenTable(r,e.playback.endTick):null},Mt=(e,t)=>{if(!e)return 0;let r=0;for(let a=0;a=r&&t{var r;if(!e)return null;for(let a=0;an.x1<=t.x&&n.x2>=t.x);return!l||!Number.isFinite(l.t1)||!Number.isFinite(l.t2)||l.x2===l.x1?null:l.t1+(t.x-l.x1)*(l.t2-l.t1)/(l.x2-l.x1)}}return null},Lt=(e,t,r)=>{const a=e==null?void 0:e.lookupTick(r);if(Number.isFinite(a))return{position:e.lookupPosition(a),tick:a};const o=((e==null?void 0:e.tickTable.filter(n=>n.system===r.system))||[]).flatMap(n=>[n.x,n.endX]).filter(Number.isFinite);if(o.length){const n=o.reduce((m,d)=>Math.abs(d-r.x){var n;return v.jsxs("svg",{className:"live-score-page",viewBox:`0 0 ${t.w} ${t.h}`,children:[v.jsx(_e,{}),a&&((n=t.source)==null?void 0:n.url)&&v.jsx("image",{href:t.source.url,width:t.source.w,height:t.source.h,transform:Ct(t),opacity:.35,preserveAspectRatio:"none"}),t.systems.map((c,u)=>{var S;const m=me(e,r,u),d=c.staves[0],b=c.staves.at(-1),k=((d==null?void 0:d.y)??0)+((d==null?void 0:d.staffY)??0)-2,T=((b==null?void 0:b.y)??0)+((b==null?void 0:b.staffY)??0)+2,_=c.staves.map(h=>({y:h.y+h.staffY,radius:2})),R=s&&c.staffMask!==void 0?s.mask(c.staffMask):null,I=h=>{const y=h.currentTarget,N=y.getBoundingClientRect(),j=y.getBBox(),O=(h.clientX-N.left)/N.width*j.width;l({system:m,x:O})};return v.jsxs("g",{className:"live-score-system",transform:`translate(${c.x}, ${c.y})`,children:[c.staves.map((h,y)=>{var N,j,O;return v.jsxs("g",{className:"live-score-staff",transform:`translate(0, ${h.y})`,children:[!a&&((N=h.image)==null?void 0:N.url)&&v.jsx("image",{className:"background",href:h.image.url,x:h.image.x,y:h.image.y,width:h.image.width,height:h.image.height}),[-2,-1,0,1,2].map(E=>v.jsx("line",{x1:"0",x2:c.w,y1:h.staffY+E,y2:h.staffY+E},E)),(j=h.additionalLines)==null?void 0:j.map((E,z)=>v.jsx("line",{x1:E.left,x2:E.right,y1:h.staffY+E.n,y2:h.staffY+E.n},z)),(O=h.measures)==null?void 0:O.map((E,z)=>{var A;return v.jsx("g",{children:(A=E.tokens)==null?void 0:A.map(($,F)=>v.jsx("use",{id:$.id!==void 0?String($.id):void 0,href:`#score-token-def-${$.t}`,x:$.x,y:h.staffY+$.y},F))},z)})]},y)}),!a&&((S=c.bars)==null?void 0:S.flatMap((h,y)=>[...c.staves.map((N,j)=>v.jsx("line",{className:"bar",x1:h,x2:h,y1:N.y+N.staffY-2,y2:N.y+N.staffY+2},`${y}-staff-${j}`)),...((R==null?void 0:R.conjunctions)||[]).map((N,j)=>{const O=c.staves[j],E=c.staves[j+1];return!O||!E?null:v.jsx("line",{className:`bar staff-layout-measure-bar${N===1?" dashed":""}${N===0?" blank":""}`,x1:h,x2:h,y1:O.y+O.staffY+2,y2:E.y+E.staffY-2},`${y}-conjunction-${j}`)})])),!a&&s&&c.staffMask!==void 0&&v.jsxs(v.Fragment,{children:[c.staves.length>=2&&v.jsx("line",{className:"connection",x1:0,x2:0,y1:k,y2:T}),v.jsx(Ae,{layout:s.mask(c.staffMask),positions:_})]}),(o==null?void 0:o.system)===m&&v.jsx("line",{className:"cursor",x1:o.x,x2:o.x,y1:k,y2:T}),v.jsx("rect",{className:"live-score-system-hit",x:0,y:k,width:c.w,height:T-k,onClick:I})]},u)})]})},At=()=>{const[e,t]=i.useState(),[r,a]=i.useState(""),[s,o]=i.useState([]),[l,n]=i.useState(!0),[c,u]=i.useState(!1),[m,d]=i.useState(!1),[b,k]=i.useState(!1),[T,_]=i.useState(!1),[R,I]=i.useState(0),[S,h]=i.useState(null),y=i.useRef(null),N=i.useRef(null),j=i.useRef(new Ce(performance)),O=i.useRef([]),E=i.useRef(null),z=i.useRef(0),A=i.useMemo(()=>jt(e==null?void 0:e.playback),[e]),$=i.useMemo(()=>$t(e),[e]),F=i.useMemo(()=>e!=null&&e.staffLayout?pe(e.staffLayout):null,[e==null?void 0:e.staffLayout]),q=!!(e!=null&&e.pages.some(f=>{var p;return(p=f.source)==null?void 0:p.url})),te=!!(e!=null&&e.pages.some(f=>f.systems.some(p=>p.staves.some(x=>{var g;return(g=x.image)==null?void 0:g.url})))),G=(S==null?void 0:S.tick)===R?S:($==null?void 0:$.lookupPosition(R))||null,w=G?Mt(e,G.system):null;i.useEffect(()=>{N.current=$},[$]),i.useEffect(()=>{var f;w===null||w===E.current||(E.current=w,(f=O.current[w])==null||f.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"}))},[w]),i.useEffect(()=>{try{const f=Pt();if(!f)return;t(f.liveScore),a(f.fileName)}catch{sessionStorage.removeItem(ue)}},[]),i.useEffect(()=>{B.MidiAudio.WebAudio.empty()?B.MidiAudio.loadPlugin({soundfontUrl:"/soundfont/",api:"webaudio"}).then(()=>_(!0)):_(!0)},[]),i.useEffect(()=>()=>s.forEach(f=>URL.revokeObjectURL(f)),[s]),i.useEffect(()=>{var p,x;if(!A)return;const f=((p=y.current)==null?void 0:p.progressTicks)||0;return(x=y.current)==null||x.dispose(),y.current=new B.MidiPlayer(A,{cacheSpan:200,onMidi:(g,L)=>{let Y;g.subtype==="noteOn"?(B.MidiAudio.noteOn(g.channel,g.noteNumber,g.velocity,L),Y=()=>{var D;return(D=g.ids)==null?void 0:D.forEach(K=>{var X;return(X=document.getElementById(K))==null?void 0:X.classList.add("notePlayOn")})}):g.subtype==="noteOff"&&(B.MidiAudio.noteOff(g.channel,g.noteNumber,L),Y=()=>{var D;return(D=g.ids)==null?void 0:D.forEach(K=>{var X;return(X=document.getElementById(K))==null?void 0:X.classList.remove("notePlayOn")})}),Y&&j.current.appendTask(L,Y)},onPlayFinish:()=>{k(!1),h(null),I(0),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn"))}}),y.current.progressTicks=f,()=>{var g;return(g=y.current)==null?void 0:g.dispose()}},[A]);const ae=async f=>(await Z(f),he.LIST_IGNORE),H=async f=>{const p=Lt(N.current,e,f);if(!p||!y.current)return;const x=y.current.isPlaying;x&&(y.current.pause(),await new Promise(g=>setTimeout(g,0))),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn")),y.current.progressTicks=p.tick,h({...p.position,tick:p.tick}),I(p.tick),x&&J()},Z=async f=>{var p;u(!0);try{const x=await Et(f);s.forEach(g=>URL.revokeObjectURL(g)),(p=y.current)==null||p.pause(),document.querySelectorAll(".notePlayOn").forEach(g=>g.classList.remove("notePlayOn")),o(x.objectUrls),t(x.liveScore),a(f.name),wt(f.name,x.liveScore),E.current=null,k(!1),h(null),I(0)}catch(x){Se.error((x==null?void 0:x.message)||"Failed to load LiveScore.")}finally{u(!1)}},J=async()=>{var f,p,x,g,L;(f=y.current)!=null&&f.isPlaying?(y.current.pause(),k(!1)):((x=(p=B.MidiAudio.WebAudio).needsWarmup)!=null&&x.call(p)&&await((L=(g=B.MidiAudio.WebAudio).awaitWarmup)==null?void 0:L.call(g)),y.current.play({nextFrame:()=>new Promise(Y=>requestAnimationFrame(()=>{var K;const D=((K=y.current)==null?void 0:K.progressTicks)||0;h(null),I(D),Y()}))}),k(!0))},V=f=>f.dataTransfer.types.includes("Files"),re=f=>{f.preventDefault(),V(f)&&(z.current+=1,d(!0))},se=f=>{f.preventDefault()},ne=f=>{f.preventDefault(),z.current=Math.max(z.current-1,0),z.current===0&&d(!1)},ie=async f=>{var x;f.preventDefault(),z.current=0,d(!1);const p=(x=f.dataTransfer.files)==null?void 0:x[0];p&&await Z(p)};return v.jsxs("div",{className:"live-score-viewer",onDragEnter:re,onDragOver:se,onDragLeave:ne,onDrop:ie,children:[m&&v.jsxs("div",{className:"live-score-drop-mask",children:[v.jsx(Me,{}),v.jsx("div",{children:"Drop LiveScore ZIP/JSON to open"})]}),v.jsx(ge,{className:"live-score-controls",children:v.jsxs(ve,{direction:"vertical",size:"middle",style:{width:"100%"},children:[v.jsxs(ve,{wrap:!0,align:"center",children:[v.jsx(bt,{level:4,style:{margin:0},children:"LiveScore"}),v.jsx(he,{accept:".livescore.zip,.zip,.json,application/json,application/zip",showUploadList:!1,beforeUpload:ae,multiple:!1,children:v.jsx(fe,{icon:v.jsx(ze,{}),children:"Open file"})}),v.jsx(fe,{icon:b?v.jsx(Re,{}):v.jsx(Ie,{}),onClick:J,disabled:!A||!T,children:b?"Pause":"Play"}),v.jsx(Te,{checked:l,onChange:f=>n(f.target.checked),disabled:!q&&!te,children:"Original image"}),v.jsx(pt,{type:"secondary",children:r||"Drop a LiveScore ZIP/JSON anywhere"})]}),e&&!A&&v.jsx(ke,{type:"info",showIcon:!0,message:"This LiveScore has no playback events."})]})}),v.jsx("div",{className:"live-score-stage-wrap",children:v.jsx($e,{spinning:c,wrapperClassName:"live-score-spin",children:v.jsx(ge,{className:"live-score-stage",children:e?v.jsx("div",{className:"live-score-pages",children:e.pages.map((f,p)=>v.jsx("div",{className:"live-score-page-frame",ref:x=>{x&&(O.current[p]=x)},children:v.jsx(_t,{liveScore:e,page:f,pageIndex:p,showSource:l,staffLayout:F,cursor:G,onSeekPosition:H})},p))}):v.jsx("div",{className:"live-score-empty",children:"Upload a LiveScore package to preview display and playback."})})})})]})},aa=i.memo(At);export{aa as default}; diff --git a/dist/assets/index-054c816b.js b/dist/assets/index-054c816b.js deleted file mode 100644 index eb43e0459c2d3fe512198204746cd2b5c11db1ce..0000000000000000000000000000000000000000 --- a/dist/assets/index-054c816b.js +++ /dev/null @@ -1 +0,0 @@ -import{r as i,R as ze,_ as C,e as Ge,j as w}from"./umi-2135699e.js";import{M as xt}from"./index-ca8300a2.js";import{S as bt}from"./index-abee73dc.js";import{I as K,u as St,m as Ct,P as Et}from"./tiny-invariant-23ba74ad.js";import{D as ot,A as Rt,r as kt}from"./confirm-345857b8.js";import{o as Ke,q as Pt,y as Mt,x as Ut,P as Ft,r as st,s as it,I as Lt,J as He,K as Dt}from"./index-22b5485d.js";import{A as Ue,f as se,a5 as jt,V as lt,a6 as ct,U as ut,_ as ye,T as dt,Z as $t,c as X,b as T,aJ as Ot,aK as De,O as ft,a as Me,C as Ve,d as pt,b2 as Tt,e as Je,N as Xe,L as Ze,aa as Nt,ab as At,af as Bt,m as zt,H as Ht,r as _t}from"./_setToString-038b76d7.js";import{J as Vt,z as qt,T as Wt,M as Yt,d as Gt,u as Kt,b as mt,R as Jt,C as Qe,L as Xt,S as et}from"./util-e99b60d9.js";import{B as je}from"./button-eb671c5b.js";import{P as Zt,D as Qt,S as en}from"./index-c4a8d365.js";import{D as tn}from"./DeleteOutlined-1f8a2958.js";import"./index-61307b6b.js";import"./jszip.min-f3ba6370.js";import"./index-eb226363.js";var nn={icon:function(e,a){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M534 352V136H232v752h560V394H576a42 42 0 01-42-42z",fill:a}},{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM602 137.8L790.2 326H602V137.8zM792 888H232V136h302v216a42 42 0 0042 42h216v494z",fill:e}}]}},name:"file",theme:"twotone"};const an=nn;var rn=function(e,a){return i.createElement(Ue,se(se({},e),{},{ref:a,icon:an}))},on=i.forwardRef(rn);const sn=on;var ln={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M885.2 446.3l-.2-.8-112.2-285.1c-5-16.1-19.9-27.2-36.8-27.2H281.2c-17 0-32.1 11.3-36.9 27.6L139.4 443l-.3.7-.2.8c-1.3 4.9-1.7 9.9-1 14.8-.1 1.6-.2 3.2-.2 4.8V830a60.9 60.9 0 0060.8 60.8h627.2c33.5 0 60.8-27.3 60.9-60.8V464.1c0-1.3 0-2.6-.1-3.7.4-4.9 0-9.6-1.3-14.1zm-295.8-43l-.3 15.7c-.8 44.9-31.8 75.1-77.1 75.1-22.1 0-41.1-7.1-54.8-20.6S436 441.2 435.6 419l-.3-15.7H229.5L309 210h399.2l81.7 193.3H589.4zm-375 76.8h157.3c24.3 57.1 76 90.8 140.4 90.8 33.7 0 65-9.4 90.3-27.2 22.2-15.6 39.5-37.4 50.7-63.6h156.5V814H214.4V480.1z"}}]},name:"inbox",theme:"outlined"};const cn=ln;var un=function(e,a){return i.createElement(Ue,se(se({},e),{},{ref:a,icon:cn}))},dn=i.forwardRef(un);const fn=dn;var pn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"}}]},name:"paper-clip",theme:"outlined"};const mn=pn;var vn=function(e,a){return i.createElement(Ue,se(se({},e),{},{ref:a,icon:mn}))},hn=i.forwardRef(vn);const gn=hn;var wn={icon:function(e,a){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 632H136v-39.9l138.5-164.3 150.1 178L658.1 489 888 761.6V792zm0-129.8L664.2 396.8c-3.2-3.8-9-3.8-12.2 0L424.6 666.4l-144-170.7c-3.2-3.8-9-3.8-12.2 0L136 652.7V232h752v430.2z",fill:e}},{tag:"path",attrs:{d:"M424.6 765.8l-150.1-178L136 752.1V792h752v-30.4L658.1 489z",fill:a}},{tag:"path",attrs:{d:"M136 652.7l132.4-157c3.2-3.8 9-3.8 12.2 0l144 170.7L652 396.8c3.2-3.8 9-3.8 12.2 0L888 662.2V232H136v420.7zM304 280a88 88 0 110 176 88 88 0 010-176z",fill:a}},{tag:"path",attrs:{d:"M276 368a28 28 0 1056 0 28 28 0 10-56 0z",fill:a}},{tag:"path",attrs:{d:"M304 456a88 88 0 100-176 88 88 0 000 176zm0-116c15.5 0 28 12.5 28 28s-12.5 28-28 28-28-12.5-28-28 12.5-28 28-28z",fill:e}}]}},name:"picture",theme:"twotone"};const yn=wn;var In=function(e,a){return i.createElement(Ue,se(se({},e),{},{ref:a,icon:yn}))},xn=i.forwardRef(In);const bn=xn;var Sn={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"};const Cn=Sn;var En=function(e,a){return i.createElement(Ue,se(se({},e),{},{ref:a,icon:Cn}))},Rn=i.forwardRef(En);const kn=Rn;function Pn(t,e){var a="cannot ".concat(t.method," ").concat(t.action," ").concat(e.status,"'"),n=new Error(a);return n.status=e.status,n.method=t.method,n.url=t.action,n}function tt(t){var e=t.responseText||t.response;if(!e)return e;try{return JSON.parse(e)}catch{return e}}function Mn(t){var e=new XMLHttpRequest;t.onProgress&&e.upload&&(e.upload.onprogress=function(l){l.total>0&&(l.percent=l.loaded/l.total*100),t.onProgress(l)});var a=new FormData;t.data&&Object.keys(t.data).forEach(function(o){var l=t.data[o];if(Array.isArray(l)){l.forEach(function(s){a.append("".concat(o,"[]"),s)});return}a.append(o,l)}),t.file instanceof Blob?a.append(t.filename,t.file,t.file.name):a.append(t.filename,t.file),e.onerror=function(l){t.onError(l)},e.onload=function(){return e.status<200||e.status>=300?t.onError(Pn(t,e),tt(e)):t.onSuccess(tt(e),e)},e.open(t.method,t.action,!0),t.withCredentials&&"withCredentials"in e&&(e.withCredentials=!0);var n=t.headers||{};return n["X-Requested-With"]!==null&&e.setRequestHeader("X-Requested-With","XMLHttpRequest"),Object.keys(n).forEach(function(o){n[o]!==null&&e.setRequestHeader(o,n[o])}),e.send(a),{abort:function(){e.abort()}}}var Un=+new Date,Fn=0;function Te(){return"rc-upload-".concat(Un,"-").concat(++Fn)}const Ne=function(t,e){if(t&&e){var a=Array.isArray(e)?e:e.split(","),n=t.name||"",o=t.type||"",l=o.replace(/\/.*$/,"");return a.some(function(s){var r=s.trim();if(/^\*(\/\*)?$/.test(s))return!0;if(r.charAt(0)==="."){var p=n.toLowerCase(),c=r.toLowerCase(),d=[c];return(c===".jpg"||c===".jpeg")&&(d=[".jpg",".jpeg"]),d.some(function(f){return p.endsWith(f)})}return/\/\*$/.test(r)?l===r.replace(/\/.*$/,""):o===r?!0:/^\w+$/.test(r)?(jt(!1,"Upload takes an invalidate 'accept' type '".concat(r,"'.Skip for check.")),!0):!1})}return!0};function Ln(t,e){var a=t.createReader(),n=[];function o(){a.readEntries(function(l){var s=Array.prototype.slice.apply(l);n=n.concat(s);var r=!s.length;r?e(n):o()})}o()}var Dn=function(e,a,n){var o=function l(s,r){s&&(s.path=r||"",s.isFile?s.file(function(p){n(p)&&(s.fullPath&&!p.webkitRelativePath&&(Object.defineProperties(p,{webkitRelativePath:{writable:!0}}),p.webkitRelativePath=s.fullPath.replace(/^\//,""),Object.defineProperties(p,{webkitRelativePath:{writable:!1}})),a([p]))}):s.isDirectory&&Ln(s,function(p){p.forEach(function(c){l(c,"".concat(r).concat(s.name,"/"))})}))};e.forEach(function(l){o(l.webkitGetAsEntry())})},jn=["component","prefixCls","className","disabled","id","style","multiple","accept","capture","children","directory","openFileDialogOnClick","onMouseEnter","onMouseLeave"],$n=function(t){lt(a,t);var e=ct(a);function a(){var n;ut(this,a);for(var o=arguments.length,l=new Array(o),s=0;s0&&arguments[0]!==void 0?arguments[0]:"",a=e.split("/"),n=a[a.length-1],o=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(o)||[""])[0]},vt=function(e){return e.indexOf("image/")===0},Nn=function(e){if(e.type&&!e.thumbUrl)return vt(e.type);var a=e.thumbUrl||e.url||"",n=Tn(a);return/^data:image\//.test(a)||/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico|heic|heif)$/i.test(n)?!0:!(/^data:/.test(a)||n)},ve=200;function An(t){return new Promise(function(e){if(!t.type||!vt(t.type)){e("");return}var a=document.createElement("canvas");a.width=ve,a.height=ve,a.style.cssText="position: fixed; left: 0; top: 0; width: ".concat(ve,"px; height: ").concat(ve,"px; z-index: 9999; display: none;"),document.body.appendChild(a);var n=a.getContext("2d"),o=new Image;if(o.onload=function(){var r=o.width,p=o.height,c=ve,d=ve,f=0,u=0;r>p?(d=p*(ve/r),u=-(d-c)/2):(c=r*(ve/p),f=-(c-d)/2),n.drawImage(o,f,u,c,d);var v=a.toDataURL();document.body.removeChild(a),window.URL.revokeObjectURL(o.src),e(v)},o.crossOrigin="anonymous",t.type.startsWith("image/svg+xml")){var l=new FileReader;l.onload=function(){l.result&&(o.src=l.result)},l.readAsDataURL(t)}else if(t.type.startsWith("image/gif")){var s=new FileReader;s.onload=function(){s.result&&e(s.result)},s.readAsDataURL(t)}else o.src=window.URL.createObjectURL(t)})}var Bn=i.forwardRef(function(t,e){var a=t.prefixCls,n=t.className,o=t.style,l=t.locale,s=t.listType,r=t.file,p=t.items,c=t.progress,d=t.iconRender,f=t.actionIconRender,u=t.itemRender,v=t.isImgUrl,h=t.showPreviewIcon,y=t.showRemoveIcon,R=t.showDownloadIcon,U=t.previewIcon,D=t.removeIcon,$=t.downloadIcon,P=t.onPreview,m=t.onDownload,A=t.onClose,M,_,Q=r.status,ie=i.useState(Q),ee=Me(ie,2),b=ee[0],B=ee[1];i.useEffect(function(){Q!=="removed"&&B(Q)},[Q]);var O=i.useState(!1),Z=Me(O,2),te=Z[0],le=Z[1],V=i.useRef(null);i.useEffect(function(){return V.current=setTimeout(function(){le(!0)},300),function(){V.current&&clearTimeout(V.current)}},[]);var ce="".concat(a,"-span"),S=d(r),J=i.createElement("div",{className:"".concat(a,"-text-icon")},S);if(s==="picture"||s==="picture-card")if(b==="uploading"||!r.thumbUrl&&!r.url){var Ie=X(T(T({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),b!=="uploading"));J=i.createElement("div",{className:Ie},S)}else{var ne=v!=null&&v(r)?i.createElement("img",{src:r.thumbUrl||r.url,alt:r.name,className:"".concat(a,"-list-item-image"),crossOrigin:r.crossOrigin}):S,Ee=X(T(T({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),v&&!v(r)));J=i.createElement("a",{className:Ee,onClick:function(k){return P(r,k)},href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer"},ne)}var xe=X(T(T(T({},"".concat(a,"-list-item"),!0),"".concat(a,"-list-item-").concat(b),!0),"".concat(a,"-list-item-list-type-").concat(s),!0)),z=typeof r.linkProps=="string"?JSON.parse(r.linkProps):r.linkProps,he=y?f((typeof D=="function"?D(r):D)||i.createElement(tn,null),function(){return A(r)},a,l.removeFile):null,be=R&&b==="done"?f((typeof $=="function"?$(r):$)||i.createElement(ot,null),function(){return m(r)},a,l.downloadFile):null,ge=s!=="picture-card"&&i.createElement("span",{key:"download-delete",className:X("".concat(a,"-list-item-card-actions"),{picture:s==="picture"})},be,he),oe=X("".concat(a,"-list-item-name")),Re=r.url?[i.createElement("a",C({key:"view",target:"_blank",rel:"noopener noreferrer",className:oe,title:r.name},z,{href:r.url,onClick:function(k){return P(r,k)}}),r.name),ge]:[i.createElement("span",{key:"view",className:oe,onClick:function(k){return P(r,k)},title:r.name},r.name),ge],pe={pointerEvents:"none",opacity:.5},ue=h?i.createElement("a",{href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer",style:r.url||r.thumbUrl?void 0:pe,onClick:function(k){return P(r,k)},title:l.previewFile},typeof U=="function"?U(r):U||i.createElement(qt,null)):null,me=s==="picture-card"&&b!=="uploading"&&i.createElement("span",{className:"".concat(a,"-list-item-actions")},ue,b==="done"&&be,he),E;r.response&&typeof r.response=="string"?E=r.response:E=((M=r.error)===null||M===void 0?void 0:M.statusText)||((_=r.error)===null||_===void 0?void 0:_.message)||l.uploadError;var x=i.createElement("span",{className:ce},J,Re),H=i.useContext(Ve),q=H.getPrefixCls,ae=q(),de=i.createElement("div",{className:xe},i.createElement("div",{className:"".concat(a,"-list-item-info")},x),me,te&&i.createElement(pt,{motionName:"".concat(ae,"-fade"),visible:b==="uploading",motionDeadline:2e3},function(re){var k=re.className,we="percent"in r?i.createElement(Zt,C({},c,{type:"line",percent:r.percent})):null;return i.createElement("div",{className:X("".concat(a,"-list-item-progress"),k)},we)})),Se=X("".concat(a,"-list-").concat(s,"-container"),n),Ce=b==="error"?i.createElement(Wt,{title:E,getPopupContainer:function(k){return k.parentNode}},de):de;return i.createElement("div",{className:Se,style:o,ref:e},u?u(Ce,r,p,{download:m.bind(null,r),preview:P.bind(null,r),remove:A.bind(null,r)}):Ce)});const zn=Bn;var $e=C({},Yt);delete $e.onAppearEnd;delete $e.onEnterEnd;delete $e.onLeaveEnd;var Hn=function(e,a){var n=e.listType,o=n===void 0?"text":n,l=e.previewFile,s=l===void 0?An:l,r=e.onPreview,p=e.onDownload,c=e.onRemove,d=e.locale,f=e.iconRender,u=e.isImageUrl,v=u===void 0?Nn:u,h=e.prefixCls,y=e.items,R=y===void 0?[]:y,U=e.showPreviewIcon,D=U===void 0?!0:U,$=e.showRemoveIcon,P=$===void 0?!0:$,m=e.showDownloadIcon,A=m===void 0?!1:m,M=e.removeIcon,_=e.previewIcon,Q=e.downloadIcon,ie=e.progress,ee=ie===void 0?{strokeWidth:2,showInfo:!1}:ie,b=e.appendAction,B=e.appendActionVisible,O=B===void 0?!0:B,Z=e.itemRender,te=e.disabled,le=Gt(),V=i.useState(!1),ce=Me(V,2),S=ce[0],J=ce[1];i.useEffect(function(){o!=="picture"&&o!=="picture-card"||(R||[]).forEach(function(E){typeof document>"u"||typeof window>"u"||!window.FileReader||!window.File||!(E.originFileObj instanceof File||E.originFileObj instanceof Blob)||E.thumbUrl!==void 0||(E.thumbUrl="",s&&s(E.originFileObj).then(function(x){E.thumbUrl=x||"",le()}))})},[o,R,s]),i.useEffect(function(){J(!0)},[]);var Ie=function(x,H){if(r)return H==null||H.preventDefault(),r(x)},ne=function(x){typeof p=="function"?p(x):x.url&&window.open(x.url)},Ee=function(x){c==null||c(x)},xe=function(x){if(f)return f(x,o);var H=x.status==="uploading",q=v&&v(x)?i.createElement(bn,null):i.createElement(sn,null),ae=H?i.createElement(Ze,null):i.createElement(gn,null);return o==="picture"?ae=H?i.createElement(Ze,null):q:o==="picture-card"&&(ae=H?d.uploading:q),ae},z=function(x,H,q,ae){var de={type:"text",size:"small",title:ae,disabled:te,onClick:function(re){H(),Xe(x)&&x.props.onClick&&x.props.onClick(re)},className:"".concat(q,"-list-item-card-actions-btn")};if(Xe(x)){var Se=Je(x,C(C({},x.props),{onClick:function(){}}));return i.createElement(je,C({},de,{icon:Se}))}return i.createElement(je,C({},de),i.createElement("span",null,x))};i.useImperativeHandle(a,function(){return{handlePreview:Ie,handleDownload:ne}});var he=i.useContext(Ve),be=he.getPrefixCls,ge=he.direction,oe=be("upload",h),Re=X(T(T(T({},"".concat(oe,"-list"),!0),"".concat(oe,"-list-").concat(o),!0),"".concat(oe,"-list-rtl"),ge==="rtl")),pe=ye(R.map(function(E){return{key:E.uid,file:E}})),ue=o==="picture-card"?"animate-inline":"animate",me={motionDeadline:2e3,motionName:"".concat(oe,"-").concat(ue),keys:pe,motionAppear:S};return o!=="picture-card"&&(me=C(C({},$e),me)),i.createElement("div",{className:Re},i.createElement(Tt,C({},me,{component:!1}),function(E){var x=E.key,H=E.file,q=E.className,ae=E.style;return i.createElement(zn,{key:x,locale:d,prefixCls:oe,className:q,style:ae,file:H,items:R,progress:ee,listType:o,isImgUrl:v,showPreviewIcon:D,showRemoveIcon:P,showDownloadIcon:A,removeIcon:M,previewIcon:_,downloadIcon:Q,iconRender:xe,actionIconRender:z,itemRender:Z,onPreview:Ie,onDownload:ne,onClose:Ee})}),b&&i.createElement(pt,C({},me,{visible:O,forceRender:!0}),function(E){var x=E.className,H=E.style;return Je(b,function(q){return{className:X(q.className,x),style:C(C(C({},H),{pointerEvents:x?"none":void 0}),q.style)}})}))},_n=i.forwardRef(Hn);const Vn=_n;var qn=globalThis&&globalThis.__awaiter||function(t,e,a,n){function o(l){return l instanceof a?l:new a(function(s){s(l)})}return new(a||(a=Promise))(function(l,s){function r(d){try{c(n.next(d))}catch(f){s(f)}}function p(d){try{c(n.throw(d))}catch(f){s(f)}}function c(d){d.done?l(d.value):o(d.value).then(r,p)}c((n=n.apply(t,e||[])).next())})},Pe="__LIST_IGNORE_".concat(Date.now(),"__"),Wn=function(e,a){var n=e.fileList,o=e.defaultFileList,l=e.onRemove,s=e.showUploadList,r=s===void 0?!0:s,p=e.listType,c=p===void 0?"text":p,d=e.onPreview,f=e.onDownload,u=e.onChange,v=e.onDrop,h=e.previewFile,y=e.disabled,R=e.locale,U=e.iconRender,D=e.isImageUrl,$=e.progress,P=e.prefixCls,m=e.className,A=e.type,M=A===void 0?"select":A,_=e.children,Q=e.style,ie=e.itemRender,ee=e.maxCount,b=e.data,B=b===void 0?{}:b,O=e.multiple,Z=O===void 0?!1:O,te=e.action,le=te===void 0?"":te,V=e.accept,ce=V===void 0?"":V,S=e.supportServerRender,J=S===void 0?!0:S,Ie=i.useContext(Nt),ne=y??Ie,Ee=Kt(o||[],{value:n,postState:function(I){return I??[]}}),xe=Me(Ee,2),z=xe[0],he=xe[1],be=i.useState("drop"),ge=Me(be,2),oe=ge[0],Re=ge[1],pe=i.useRef(null);i.useMemo(function(){var W=Date.now();(n||[]).forEach(function(I,L){!I.uid&&!Object.isFrozen(I)&&(I.uid="__AUTO__".concat(W,"_").concat(L,"__"))})},[n]);var ue=function(I,L,N){var g=ye(L);ee===1?g=g.slice(-1):ee&&(g=g.slice(0,ee)),Ge.flushSync(function(){he(g)});var F={file:I,fileList:g};N&&(F.event=N),Ge.flushSync(function(){u==null||u(F)})},me=function(I,L){return qn(void 0,void 0,void 0,De().mark(function N(){var g,F,Y,G;return De().wrap(function(j){for(;;)switch(j.prev=j.next){case 0:if(g=e.beforeUpload,F=e.transformFile,Y=I,!g){j.next=13;break}return j.next=5,g(I,L);case 5:if(G=j.sent,G!==!1){j.next=8;break}return j.abrupt("return",!1);case 8:if(delete I[Pe],G!==Pe){j.next=12;break}return Object.defineProperty(I,Pe,{value:!0,configurable:!0}),j.abrupt("return",!1);case 12:ft(G)==="object"&&G&&(Y=G);case 13:if(!F){j.next=17;break}return j.next=16,F(Y);case 16:Y=j.sent;case 17:return j.abrupt("return",Y);case 18:case"end":return j.stop()}},N)}))},E=function(I){var L=I.filter(function(F){return!F.file[Pe]});if(L.length){var N=L.map(function(F){return Fe(F.file)}),g=ye(z);N.forEach(function(F){g=Le(F,g)}),N.forEach(function(F,Y){var G=F;if(L[Y].parsedFile)F.status="uploading";else{var fe=F.originFileObj,j;try{j=new File([fe],fe.name,{type:fe.type})}catch{j=new Blob([fe],{type:fe.type}),j.name=fe.name,j.lastModifiedDate=new Date,j.lastModified=new Date().getTime()}j.uid=F.uid,G=j}ue(G,g)})}},x=function(I,L,N){try{typeof I=="string"&&(I=JSON.parse(I))}catch{}if(Be(L,z)){var g=Fe(L);g.status="done",g.percent=100,g.response=I,g.xhr=N;var F=Le(g,z);ue(g,F)}},H=function(I,L){if(Be(L,z)){var N=Fe(L);N.status="uploading",N.percent=I.percent;var g=Le(N,z);ue(N,g,I)}},q=function(I,L,N){if(Be(N,z)){var g=Fe(N);g.error=I,g.response=L,g.status="error";var F=Le(g,z);ue(g,F)}},ae=function(I){var L;Promise.resolve(typeof l=="function"?l(I):l).then(function(N){var g;if(N!==!1){var F=On(I,z);F&&(L=C(C({},I),{status:"removed"}),z==null||z.forEach(function(Y){var G=L.uid!==void 0?"uid":"name";Y[G]===L[G]&&!Object.isFrozen(Y)&&(Y.status="removed")}),(g=pe.current)===null||g===void 0||g.abort(L),ue(L,F))}})},de=function(I){Re(I.type),I.type==="drop"&&(v==null||v(I))};i.useImperativeHandle(a,function(){return{onBatchStart:E,onSuccess:x,onProgress:H,onError:q,fileList:z,upload:pe.current}});var Se=i.useContext(Ve),Ce=Se.getPrefixCls,re=Se.direction,k=Ce("upload",P),we=C(C({onBatchStart:E,onError:q,onProgress:H,onSuccess:x},e),{data:B,multiple:Z,action:le,accept:ce,supportServerRender:J,prefixCls:k,disabled:ne,beforeUpload:me,onChange:void 0});delete we.className,delete we.style,(!_||ne)&&delete we.id;var Oe=function(I,L){return r?i.createElement(At,{componentName:"Upload",defaultLocale:Bt.Upload},function(N){var g=typeof r=="boolean"?{}:r,F=g.showRemoveIcon,Y=g.showPreviewIcon,G=g.showDownloadIcon,fe=g.removeIcon,j=g.previewIcon,Ye=g.downloadIcon;return i.createElement(Vn,{prefixCls:k,listType:c,items:z,previewFile:h,onPreview:d,onDownload:f,onRemove:ae,showRemoveIcon:!ne&&F,showPreviewIcon:Y,showDownloadIcon:G,removeIcon:fe,previewIcon:j,downloadIcon:Ye,iconRender:U,locale:C(C({},N),R),isImageUrl:D,progress:$,appendAction:I,appendActionVisible:L,itemRender:ie,disabled:ne})}):I};if(M==="drag"){var wt=X(k,T(T(T(T(T({},"".concat(k,"-drag"),!0),"".concat(k,"-drag-uploading"),z.some(function(W){return W.status==="uploading"})),"".concat(k,"-drag-hover"),oe==="dragover"),"".concat(k,"-disabled"),ne),"".concat(k,"-rtl"),re==="rtl"),m);return i.createElement("span",null,i.createElement("div",{className:wt,onDrop:de,onDragOver:de,onDragLeave:de,style:Q},i.createElement(_e,C({},we,{ref:pe,className:"".concat(k,"-btn")}),i.createElement("div",{className:"".concat(k,"-drag-container")},_))),Oe())}var yt=X(k,T(T(T(T({},"".concat(k,"-select"),!0),"".concat(k,"-select-").concat(c),!0),"".concat(k,"-disabled"),ne),"".concat(k,"-rtl"),re==="rtl")),It=function(I){return i.createElement("div",{className:yt,style:I},i.createElement(_e,C({},we,{ref:pe})))},We=It(_?void 0:{display:"none"});return c==="picture-card"?i.createElement("span",{className:X("".concat(k,"-picture-card-wrapper"),m)},Oe(We,!!_)):i.createElement("span",{className:m},We,Oe())},Yn=i.forwardRef(Wn);const ht=Yn;var Gn=globalThis&&globalThis.__rest||function(t,e){var a={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(a[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);oo<0)||a>=1)return ke.error;try{if(t.hasIllEvent||a>.36)return ke.ill}catch{}return ke.normal}function ea(t){return t?Zn[t.status]??"":""}const ta=i.memo(({stand:t,spartito:e,issueMeasures:a,onMeasureClick:n,selectedMeasureIndex:o})=>{if(!t||t.systems.length===0)return null;const l=2,s=t.maxWidth+l*2,r=t.totalHeight+l*2,p=e==null?void 0:e.measures,c=i.useMemo(()=>{const d=new Map;if(a)for(const f of a)d.set(f.measureIndex,f);return d},[a]);return w.jsx("svg",{className:"spartito-stand",viewBox:`${-l} ${-l} ${s} ${r}`,style:{width:"100%",height:"auto"},children:t.systems.map(d=>{const f=d.staffImages.length>0?d.staffImages[0].position.y:0;return w.jsxs("g",{transform:`translate(0, ${d.y})`,children:[d.staffImages.map((u,v)=>w.jsx("image",{href:u.url,x:u.position.x,y:u.position.y,width:u.position.width,height:u.position.height,preserveAspectRatio:"none"},v)),d.measures.map(u=>{const v=u.measureIndex===o,h=p==null?void 0:p[u.measureIndex],y=c.get(u.measureIndex),R=Qn(h,y),U=h&&h.regulationHash!=h.regulationHash0,D=f-1;return w.jsxs("g",{onClick:()=>n(u.measureIndex),children:[w.jsx("rect",{className:`spartito-measure-rect ${v?"selected":""}`,x:u.left,y:0,width:u.right-u.left,height:d.height}),w.jsxs("text",{className:"spartito-measure-index",x:u.left+.5,y:D,fontSize:2.6,fontWeight:"bold",fill:R,children:[ea(y),u.measureIndex+1,y!=null&&y.annotator?w.jsx("tspan",{dy:"-1",fontSize:"1.6px",fill:"DodgerBlue",children:"★"}):null,U?w.jsx("tspan",{y:D-.8,fontSize:"2px",children:"⚠"}):null]})]},u.measureIndex)})]},d.systemIndex)})})}),nt=5;function at(t){var l;const e=new Map;for(const s of t.measures){const r=s.position.systemIndex;e.has(r)||e.set(r,[]),e.get(r).push(s)}const a=[];let n=0;const o=Array.from(e.keys()).sort((s,r)=>s-r);for(const s of o){const r=e.get(s),p=r[0],c=p.backgroundImages||[];let d=0,f=0;if(c.length>0)f=Math.min(...c.map(y=>y.position.y)),d=Math.max(...c.map(y=>y.position.y+y.position.height))-f;else if((l=p.position.staffYs)!=null&&l.length){const h=p.position.staffYs;d=h[h.length-1]-h[0]+24}const u=c.map(h=>({...h,position:{...h.position,y:h.position.y-f}})),v=Math.max(...r.map(h=>h.position.right));a.push({systemIndex:s,y:n,height:d,width:v,staffImages:u,measures:r.map(h=>({measureIndex:h.measureIndex,left:h.position.left,right:h.position.right}))}),n+=d+nt}return{systems:a,totalHeight:n-(a.length>0?nt:0),maxWidth:Math.max(...a.map(s=>s.width),0)}}function na(t){var p;const e=new Map;for(const c of t.measures){const d=c.position.systemIndex;e.has(d)||e.set(d,[]),e.get(d).push(c)}const n=Array.from(e.keys()).sort((c,d)=>c-d).map(c=>{const d=e.get(c),f=d[0],u=f.backgroundImages||[],v=Math.max(...d.map(m=>m.position.right)),h=u.filter(m=>m.original!==!1),y=f.position.staffYs||[],R=y.length||t.stavesCount||0,U=d.map(m=>m.position.right);let D,$,P;return h.length>=R&&R>0?P=h.map(m=>new Ke({backgroundImage:m.url,imagePosition:m.position,top:0,height:m.position.height,staffY:m.position.y+m.position.height/2,maskImage:null,measureCount:d.length})):h.length>0&&R>h.length&&(D=h[0].url,$=h[0].position,y.length>=R&&(P=y.map((m,A)=>new Ke({top:m-10/2,height:10,staffY:10/2,maskImage:null,measureBars:U})))),new Pt({stavesCount:(P==null?void 0:P.length)||R||t.stavesCount,staves:(P==null?void 0:P.length)>0?P:void 0,backgroundImage:D,imagePosition:$,width:v,left:0,top:0,measureCount:d.length,measureBars:U,semantics:[],sidBlackList:[],sidWhiteList:[]})}),o=new Mt({width:794,height:1122,systems:n,semantics:[]}),l=new Ut({title:"Spartito",pages:[o],staffLayoutCode:((p=t.staffGroups)==null?void 0:p.map(c=>c.length>1?`{${c.map(()=>"-").join("")}}`:"-").join(","))||"",settings:{enabledGauge:!1,pageLayoutMethod:Ft.ByLines,semanticConfidenceThreshold:1}}),s=l.staffLayout,r=s.standaloneGroups.map(c=>c.map(d=>s.staffIds.indexOf(d)));return t.staffGroups=r,t.measures.forEach(c=>c.staffGroups=r),l.spartito=t,l.patches=[],l}const{Header:aa,Content:ra}=mt,{Dragger:oa}=gt,sa=async t=>{let e=null;try{const a=await Ht();e=a==null?void 0:a.omrDomain}catch{}for(const a of t.measures)if(a.backgroundImages)for(const n of a.backgroundImages)n.url.startsWith("md5:")&&(n.url=`/uploads/${n.url.replace("md5:","")}`)},rt=t=>{const e=[];for(const a of t.measures){if(!a.regulated)continue;const n=Lt(a);(!n||n.error||!n.fine)&&e.push({scoreId:null,status:n!=null&&n.error?K.Fatal:K.Issue,measureIndex:a.measureIndex,hash:a.regulationHash0,lastUpdate:null,measure:new He(a)})}return e},ia=async(t,e,a)=>{if(!a)return t;try{const n=await _t.get(`/api/scores/${a}/issueMeasures`,{params:{limit:1e3}}),o=n==null?void 0:n.rows;if(console.log("[spartito] fetchAndMerge: scoreId=%s, resp=%o, fetched=%d, localIssues=%d",a,n,(o==null?void 0:o.length)??0,t.length),!(o!=null&&o.length))return t;const l=new Map;for(const f of o)f.hash&&l.set(f.hash,f);const s=new Map;for(const[f,u]of l)u.measure&&s.set(f,st(u.measure,it));const r=(f,u)=>{var y;const v=s.get(f);if(!v)return;const h=(y=e.measures[u])==null?void 0:y.backgroundImages;e.measures[u]=new Dt(v),h&&(e.measures[u].backgroundImages=h)},p=new Set,c=t.map(f=>{const u=f.hash?l.get(f.hash):null;return u?(p.add(f.hash),r(f.hash,f.measureIndex),{...f,status:u.status,annotator:u.annotator,lastUpdate:u.lastUpdate,id:u.id,measure:new He(e.measures[f.measureIndex])}):f}),d=new Set(c.map(f=>f.measureIndex));for(const[f,u]of l)if(!p.has(f))for(const v of e.measures)v.regulationHash0===f&&!d.has(v.measureIndex)&&(r(f,v.measureIndex),c.push({scoreId:u.scoreId,status:u.status,measureIndex:v.measureIndex,hash:u.hash,lastUpdate:u.lastUpdate,measure:new He(e.measures[v.measureIndex]),annotator:u.annotator,id:u.id}),d.add(v.measureIndex));return console.log("[spartito] merged:",c.map(f=>`m${f.measureIndex}:status=${f.status},ann=${f.annotator||"-"}`)),c}catch(n){return console.warn("Failed to fetch annotations for score:",n),t}},ba=()=>{var _,Q,ie,ee;const[t,e]=i.useState(null),[a,n]=i.useState(null),[o,l]=i.useState(null),[s,r]=St(),[[p,c],[d,f],u]=Ct(),[v,h]=i.useState("mask"),y=i.useRef(!1),R=i.useMemo(()=>(o==null?void 0:o.replace(/\.spartito\.json$/i,"").replace(/\.json$/i,""))||null,[o]),U=i.useMemo(()=>({edit:!0,id:R}),[R]),D=i.useMemo(()=>new Rt,[]),$=i.useCallback(async b=>{try{const B=await b.text(),O=st(B,it);await sa(O);const Z=rt(O),te=b.name.replace(/\.spartito\.json$/i,"").replace(/\.json$/i,""),le=await ia(Z,O,te),V=na(O);await kt(V,{solutionStore:D,onlyFetchCache:!0}),y.current=!0,r(V),e(O),n(at(O)),c(le),f(null),l(b.name)}catch(B){console.error("Failed to load spartito:",B),zt.error(`Failed to load spartito: ${B.message}`)}return!1},[D]);i.useEffect(()=>{var b,B;if(y.current){y.current=!1;return}((B=(b=s==null?void 0:s.spartito)==null?void 0:b.measures)==null?void 0:B.length)>0&&o&&(e(s.spartito),n(at(s.spartito)),c(O=>{const Z=new Map,te=new Map;if(O)for(const S of O)S.hash&&!Z.has(S.hash)&&Z.set(S.hash,S),te.set(S.measureIndex,S);const le=rt(s.spartito),V=new Set,ce=le.map(S=>{V.add(S.measureIndex);const J=te.get(S.measureIndex)||(S.hash?Z.get(S.hash):null);return J?{...S,status:J.status,annotator:J.annotator,id:J.id,lastUpdate:J.lastUpdate}:S});if(O)for(const S of O)!V.has(S.measureIndex)&&(S.annotator||S.status===K.Solved||S.status===K.Discard||S.id)&&(ce.push(S),V.add(S.measureIndex));return ce}))},[s]);const P=i.useCallback(b=>{f(b)},[]),m=i.useCallback(()=>{f(null)},[]),A=i.useCallback(()=>{if(!(s!=null&&s.spartito))return;const b=JSON.stringify(s.spartito.toJSON(),null," "),B=new Blob([b],{type:"application/json"}),O=document.createElement("a");O.href=URL.createObjectURL(B),O.download=(o==null?void 0:o.replace(".json","-annotated.json"))||"annotated.spartito.json",O.click()},[s,o]),M=i.useMemo(()=>{if(!(p!=null&&p.length))return null;const b={issue:0,fatal:0,solved:0};for(const B of p)B.status===K.Issue?b.issue++:B.status===K.Fatal?b.fatal++:B.status===K.Solved&&b.solved++;return b},[p]);return w.jsxs(Et.Provider,{value:U,children:[w.jsx("svg",{width:"0",height:"0",style:{position:"absolute",visibility:"hidden"},children:w.jsx(bt,{})}),w.jsxs(mt,{className:"spartito-page",children:[w.jsx(aa,{className:"spartito-header",children:w.jsxs(Jt,{style:{width:"100%",display:"flex",justifyContent:"space-between"},gutter:16,children:[w.jsxs(Qe,{style:{display:"flex",alignItems:"center"},children:[w.jsx(Xt,{to:"/",className:"spartito-logo",children:"STARRY"}),w.jsx("span",{style:{fontSize:14,color:"#666"},children:o||"Spartito"})]}),t&&w.jsx(Qe,{style:{display:"flex",alignItems:"center"},children:w.jsxs(et,{size:16,children:[w.jsxs("span",{style:{fontSize:13,color:"#999"},children:[t.measures.length," measures",M&&M.issue>0&&` · ${M.issue} issue`,M&&M.fatal>0&&` · ${M.fatal} fatal`,M&&M.solved>0&&` · ${M.solved} solved`]}),w.jsx(je,{size:"small",icon:w.jsx(ot,{}),onClick:A,children:"Download"}),w.jsx(gt,{accept:".json",showUploadList:!1,beforeUpload:$,children:w.jsx(je,{size:"small",icon:w.jsx(kn,{}),children:"Re-upload"})})]})})]})}),w.jsx(ra,{className:"spartito-content",children:t?w.jsx(ta,{stand:a,spartito:t,issueMeasures:p,onMeasureClick:P,selectedMeasureIndex:d}):w.jsx("div",{style:{padding:48,maxWidth:600,margin:"80px auto 0"},children:w.jsxs(oa,{accept:".json",showUploadList:!1,beforeUpload:$,children:[w.jsx("p",{className:"ant-upload-drag-icon",children:w.jsx(fn,{})}),w.jsx("p",{className:"ant-upload-text",children:"Click or drag a .spartito.json file"})]})})}),((Q=(_=s.spartito)==null?void 0:_.measures)==null?void 0:Q.length)>0&&w.jsx(Qt,{title:u?w.jsxs(et,{size:20,children:[w.jsxs("div",{children:["Measure #",u.measureIndex+1]}),(ee=(ie=u.measure.basics)==null?void 0:ie[0])!=null&&ee.timeSignature?w.jsxs("div",{style:{display:"inline-flex",flexDirection:"column",alignItems:"center",lineHeight:1.1,fontWeight:"bold"},children:[w.jsx("span",{children:u.measure.basics[0].timeSignature.numerator}),w.jsx("span",{children:u.measure.basics[0].timeSignature.denominator})]}):null,w.jsx(en,{checked:v==="mask",onChange:()=>h(v==="mask"?"origin":"mask"),checkedChildren:"Background",unCheckedChildren:"Original"})]}):null,open:!!u,closable:!0,destroyOnClose:!0,footer:null,mask:!0,width:"98vw",onClose:m,children:u?w.jsx(xt,{bgMode:v,style:{width:"300px"},score:s,record:u,onClose:m}):null})]})]})};export{ba as default}; diff --git a/dist/assets/index-0f8e140e.js b/dist/assets/index-0f8e140e.js new file mode 100644 index 0000000000000000000000000000000000000000..94526c70bc19987a89085f0db6ee22e96c1d1b25 --- /dev/null +++ b/dist/assets/index-0f8e140e.js @@ -0,0 +1 @@ +import{A as Ue,f as X,z as it,q as Xe,B as Je,p as Ye,_ as ue,l as Ze,u as lt,c as _,b as P,ad as st,ae as Se,j as Qe,a as Fe,C as je,d as et,as as ct,e as _e,i as He,L as qe,D as ut,E as dt,I as pt}from"./_setToString-64803aa4.js";import{r as i,R as Me,_ as w,e as We}from"./umi-6680b95f.js";import{p as ft,E as vt,T as mt,k as ht,b as gt,u as wt}from"./TextArea-268b64d7.js";import{B as Ke}from"./button-8d21fb6b.js";import{D as yt}from"./DeleteOutlined-60e63eb1.js";import{D as bt}from"./DownloadOutlined-fad249b6.js";import{P as It}from"./progress-ab875831.js";var Ct={icon:function(e,a){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M534 352V136H232v752h560V394H576a42 42 0 01-42-42z",fill:a}},{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM602 137.8L790.2 326H602V137.8zM792 888H232V136h302v216a42 42 0 0042 42h216v494z",fill:e}}]}},name:"file",theme:"twotone"};const Et=Ct;var Rt=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Et}))},Pt=i.forwardRef(Rt);const Ft=Pt;var Ut={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M885.2 446.3l-.2-.8-112.2-285.1c-5-16.1-19.9-27.2-36.8-27.2H281.2c-17 0-32.1 11.3-36.9 27.6L139.4 443l-.3.7-.2.8c-1.3 4.9-1.7 9.9-1 14.8-.1 1.6-.2 3.2-.2 4.8V830a60.9 60.9 0 0060.8 60.8h627.2c33.5 0 60.8-27.3 60.9-60.8V464.1c0-1.3 0-2.6-.1-3.7.4-4.9 0-9.6-1.3-14.1zm-295.8-43l-.3 15.7c-.8 44.9-31.8 75.1-77.1 75.1-22.1 0-41.1-7.1-54.8-20.6S436 441.2 435.6 419l-.3-15.7H229.5L309 210h399.2l81.7 193.3H589.4zm-375 76.8h157.3c24.3 57.1 76 90.8 140.4 90.8 33.7 0 65-9.4 90.3-27.2 22.2-15.6 39.5-37.4 50.7-63.6h156.5V814H214.4V480.1z"}}]},name:"inbox",theme:"outlined"};const Dt=Ut;var kt=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Dt}))},St=i.forwardRef(kt);const Cn=St;var Lt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"}}]},name:"paper-clip",theme:"outlined"};const xt=Lt;var $t=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:xt}))},Nt=i.forwardRef($t);const Ot=Nt;var Tt={icon:function(e,a){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 632H136v-39.9l138.5-164.3 150.1 178L658.1 489 888 761.6V792zm0-129.8L664.2 396.8c-3.2-3.8-9-3.8-12.2 0L424.6 666.4l-144-170.7c-3.2-3.8-9-3.8-12.2 0L136 652.7V232h752v430.2z",fill:e}},{tag:"path",attrs:{d:"M424.6 765.8l-150.1-178L136 752.1V792h752v-30.4L658.1 489z",fill:a}},{tag:"path",attrs:{d:"M136 652.7l132.4-157c3.2-3.8 9-3.8 12.2 0l144 170.7L652 396.8c3.2-3.8 9-3.8 12.2 0L888 662.2V232H136v420.7zM304 280a88 88 0 110 176 88 88 0 010-176z",fill:a}},{tag:"path",attrs:{d:"M276 368a28 28 0 1056 0 28 28 0 10-56 0z",fill:a}},{tag:"path",attrs:{d:"M304 456a88 88 0 100-176 88 88 0 000 176zm0-116c15.5 0 28 12.5 28 28s-12.5 28-28 28-28-12.5-28-28 12.5-28 28-28z",fill:e}}]}},name:"picture",theme:"twotone"};const Mt=Tt;var At=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Mt}))},jt=i.forwardRef(At);const zt=jt;var Bt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"};const Vt=Bt;var _t=function(e,a){return i.createElement(Ue,X(X({},e),{},{ref:a,icon:Vt}))},Ht=i.forwardRef(_t);const En=Ht;function qt(t,e){var a="cannot ".concat(t.method," ").concat(t.action," ").concat(e.status,"'"),n=new Error(a);return n.status=e.status,n.method=t.method,n.url=t.action,n}function Ge(t){var e=t.responseText||t.response;if(!e)return e;try{return JSON.parse(e)}catch{return e}}function Wt(t){var e=new XMLHttpRequest;t.onProgress&&e.upload&&(e.upload.onprogress=function(l){l.total>0&&(l.percent=l.loaded/l.total*100),t.onProgress(l)});var a=new FormData;t.data&&Object.keys(t.data).forEach(function(o){var l=t.data[o];if(Array.isArray(l)){l.forEach(function(s){a.append("".concat(o,"[]"),s)});return}a.append(o,l)}),t.file instanceof Blob?a.append(t.filename,t.file,t.file.name):a.append(t.filename,t.file),e.onerror=function(l){t.onError(l)},e.onload=function(){return e.status<200||e.status>=300?t.onError(qt(t,e),Ge(e)):t.onSuccess(Ge(e),e)},e.open(t.method,t.action,!0),t.withCredentials&&"withCredentials"in e&&(e.withCredentials=!0);var n=t.headers||{};return n["X-Requested-With"]!==null&&e.setRequestHeader("X-Requested-With","XMLHttpRequest"),Object.keys(n).forEach(function(o){n[o]!==null&&e.setRequestHeader(o,n[o])}),e.send(a),{abort:function(){e.abort()}}}var Kt=+new Date,Gt=0;function $e(){return"rc-upload-".concat(Kt,"-").concat(++Gt)}const Ne=function(t,e){if(t&&e){var a=Array.isArray(e)?e:e.split(","),n=t.name||"",o=t.type||"",l=o.replace(/\/.*$/,"");return a.some(function(s){var r=s.trim();if(/^\*(\/\*)?$/.test(s))return!0;if(r.charAt(0)==="."){var d=n.toLowerCase(),c=r.toLowerCase(),u=[c];return(c===".jpg"||c===".jpeg")&&(u=[".jpg",".jpeg"]),u.some(function(h){return d.endsWith(h)})}return/\/\*$/.test(r)?l===r.replace(/\/.*$/,""):o===r?!0:/^\w+$/.test(r)?(it(!1,"Upload takes an invalidate 'accept' type '".concat(r,"'.Skip for check.")),!0):!1})}return!0};function Xt(t,e){var a=t.createReader(),n=[];function o(){a.readEntries(function(l){var s=Array.prototype.slice.apply(l);n=n.concat(s);var r=!s.length;r?e(n):o()})}o()}var Jt=function(e,a,n){var o=function l(s,r){s&&(s.path=r||"",s.isFile?s.file(function(d){n(d)&&(s.fullPath&&!d.webkitRelativePath&&(Object.defineProperties(d,{webkitRelativePath:{writable:!0}}),d.webkitRelativePath=s.fullPath.replace(/^\//,""),Object.defineProperties(d,{webkitRelativePath:{writable:!1}})),a([d]))}):s.isDirectory&&Xt(s,function(d){d.forEach(function(c){l(c,"".concat(r).concat(s.name,"/"))})}))};e.forEach(function(l){o(l.webkitGetAsEntry())})},Yt=["component","prefixCls","className","disabled","id","style","multiple","accept","capture","children","directory","openFileDialogOnClick","onMouseEnter","onMouseLeave"],Zt=function(t){Xe(a,t);var e=Je(a);function a(){var n;Ye(this,a);for(var o=arguments.length,l=new Array(o),s=0;s0&&arguments[0]!==void 0?arguments[0]:"",a=e.split("/"),n=a[a.length-1],o=n.split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(o)||[""])[0]},tt=function(e){return e.indexOf("image/")===0},tn=function(e){if(e.type&&!e.thumbUrl)return tt(e.type);var a=e.thumbUrl||e.url||"",n=en(a);return/^data:image\//.test(a)||/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico|heic|heif)$/i.test(n)?!0:!(/^data:/.test(a)||n)},oe=200;function nn(t){return new Promise(function(e){if(!t.type||!tt(t.type)){e("");return}var a=document.createElement("canvas");a.width=oe,a.height=oe,a.style.cssText="position: fixed; left: 0; top: 0; width: ".concat(oe,"px; height: ").concat(oe,"px; z-index: 9999; display: none;"),document.body.appendChild(a);var n=a.getContext("2d"),o=new Image;if(o.onload=function(){var r=o.width,d=o.height,c=oe,u=oe,h=0,m=0;r>d?(u=d*(oe/r),m=-(u-c)/2):(c=r*(oe/d),h=-(c-u)/2),n.drawImage(o,h,m,c,u);var y=a.toDataURL();document.body.removeChild(a),window.URL.revokeObjectURL(o.src),e(y)},o.crossOrigin="anonymous",t.type.startsWith("image/svg+xml")){var l=new FileReader;l.onload=function(){l.result&&(o.src=l.result)},l.readAsDataURL(t)}else if(t.type.startsWith("image/gif")){var s=new FileReader;s.onload=function(){s.result&&e(s.result)},s.readAsDataURL(t)}else o.src=window.URL.createObjectURL(t)})}var rn=i.forwardRef(function(t,e){var a=t.prefixCls,n=t.className,o=t.style,l=t.locale,s=t.listType,r=t.file,d=t.items,c=t.progress,u=t.iconRender,h=t.actionIconRender,m=t.itemRender,y=t.isImgUrl,O=t.showPreviewIcon,S=t.showRemoveIcon,L=t.showDownloadIcon,U=t.previewIcon,T=t.removeIcon,$=t.downloadIcon,M=t.onPreview,p=t.onDownload,x=t.onClose,N,H,Q=r.status,de=i.useState(Q),ee=Fe(de,2),A=ee[0],pe=ee[1];i.useEffect(function(){Q!=="removed"&&pe(Q)},[Q]);var fe=i.useState(!1),ve=Fe(fe,2),me=ve[0],Ce=ve[1],te=i.useRef(null);i.useEffect(function(){return te.current=setTimeout(function(){Ce(!0)},300),function(){te.current&&clearTimeout(te.current)}},[]);var he="".concat(a,"-span"),ne=u(r),ie=i.createElement("div",{className:"".concat(a,"-text-icon")},ne);if(s==="picture"||s==="picture-card")if(A==="uploading"||!r.thumbUrl&&!r.url){var ge=_(P(P({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),A!=="uploading"));ie=i.createElement("div",{className:ge},ne)}else{var q=y!=null&&y(r)?i.createElement("img",{src:r.thumbUrl||r.url,alt:r.name,className:"".concat(a,"-list-item-image"),crossOrigin:r.crossOrigin}):ne,Ee=_(P(P({},"".concat(a,"-list-item-thumbnail"),!0),"".concat(a,"-list-item-file"),y&&!y(r)));ie=i.createElement("a",{className:Ee,onClick:function(I){return M(r,I)},href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer"},q)}var we=_(P(P(P({},"".concat(a,"-list-item"),!0),"".concat(a,"-list-item-").concat(A),!0),"".concat(a,"-list-item-list-type-").concat(s),!0)),D=typeof r.linkProps=="string"?JSON.parse(r.linkProps):r.linkProps,le=S?h((typeof T=="function"?T(r):T)||i.createElement(yt,null),function(){return x(r)},a,l.removeFile):null,ye=L&&A==="done"?h((typeof $=="function"?$(r):$)||i.createElement(bt,null),function(){return p(r)},a,l.downloadFile):null,se=s!=="picture-card"&&i.createElement("span",{key:"download-delete",className:_("".concat(a,"-list-item-card-actions"),{picture:s==="picture"})},ye,le),G=_("".concat(a,"-list-item-name")),Re=r.url?[i.createElement("a",w({key:"view",target:"_blank",rel:"noopener noreferrer",className:G,title:r.name},D,{href:r.url,onClick:function(I){return M(r,I)}}),r.name),se]:[i.createElement("span",{key:"view",className:G,onClick:function(I){return M(r,I)},title:r.name},r.name),se],re={pointerEvents:"none",opacity:.5},J=O?i.createElement("a",{href:r.url||r.thumbUrl,target:"_blank",rel:"noopener noreferrer",style:r.url||r.thumbUrl?void 0:re,onClick:function(I){return M(r,I)},title:l.previewFile},typeof U=="function"?U(r):U||i.createElement(vt,null)):null,ae=s==="picture-card"&&A!=="uploading"&&i.createElement("span",{className:"".concat(a,"-list-item-actions")},J,A==="done"&&ye,le),b;r.response&&typeof r.response=="string"?b=r.response:b=((N=r.error)===null||N===void 0?void 0:N.statusText)||((H=r.error)===null||H===void 0?void 0:H.message)||l.uploadError;var g=i.createElement("span",{className:he},ie,Re),k=i.useContext(je),j=k.getPrefixCls,W=j(),Y=i.createElement("div",{className:we},i.createElement("div",{className:"".concat(a,"-list-item-info")},g),ae,me&&i.createElement(et,{motionName:"".concat(W,"-fade"),visible:A==="uploading",motionDeadline:2e3},function(K){var I=K.className,ce="percent"in r?i.createElement(It,w({},c,{type:"line",percent:r.percent})):null;return i.createElement("div",{className:_("".concat(a,"-list-item-progress"),I)},ce)})),be=_("".concat(a,"-list-").concat(s,"-container"),n),Ie=A==="error"?i.createElement(mt,{title:b,getPopupContainer:function(I){return I.parentNode}},Y):Y;return i.createElement("div",{className:be,style:o,ref:e},m?m(Ie,r,d,{download:p.bind(null,r),preview:M.bind(null,r),remove:x.bind(null,r)}):Ie)});const an=rn;var Le=w({},ht);delete Le.onAppearEnd;delete Le.onEnterEnd;delete Le.onLeaveEnd;var on=function(e,a){var n=e.listType,o=n===void 0?"text":n,l=e.previewFile,s=l===void 0?nn:l,r=e.onPreview,d=e.onDownload,c=e.onRemove,u=e.locale,h=e.iconRender,m=e.isImageUrl,y=m===void 0?tn:m,O=e.prefixCls,S=e.items,L=S===void 0?[]:S,U=e.showPreviewIcon,T=U===void 0?!0:U,$=e.showRemoveIcon,M=$===void 0?!0:$,p=e.showDownloadIcon,x=p===void 0?!1:p,N=e.removeIcon,H=e.previewIcon,Q=e.downloadIcon,de=e.progress,ee=de===void 0?{strokeWidth:2,showInfo:!1}:de,A=e.appendAction,pe=e.appendActionVisible,fe=pe===void 0?!0:pe,ve=e.itemRender,me=e.disabled,Ce=gt(),te=i.useState(!1),he=Fe(te,2),ne=he[0],ie=he[1];i.useEffect(function(){o!=="picture"&&o!=="picture-card"||(L||[]).forEach(function(b){typeof document>"u"||typeof window>"u"||!window.FileReader||!window.File||!(b.originFileObj instanceof File||b.originFileObj instanceof Blob)||b.thumbUrl!==void 0||(b.thumbUrl="",s&&s(b.originFileObj).then(function(g){b.thumbUrl=g||"",Ce()}))})},[o,L,s]),i.useEffect(function(){ie(!0)},[]);var ge=function(g,k){if(r)return k==null||k.preventDefault(),r(g)},q=function(g){typeof d=="function"?d(g):g.url&&window.open(g.url)},Ee=function(g){c==null||c(g)},we=function(g){if(h)return h(g,o);var k=g.status==="uploading",j=y&&y(g)?i.createElement(zt,null):i.createElement(Ft,null),W=k?i.createElement(qe,null):i.createElement(Ot,null);return o==="picture"?W=k?i.createElement(qe,null):j:o==="picture-card"&&(W=k?u.uploading:j),W},D=function(g,k,j,W){var Y={type:"text",size:"small",title:W,disabled:me,onClick:function(K){k(),He(g)&&g.props.onClick&&g.props.onClick(K)},className:"".concat(j,"-list-item-card-actions-btn")};if(He(g)){var be=_e(g,w(w({},g.props),{onClick:function(){}}));return i.createElement(Ke,w({},Y,{icon:be}))}return i.createElement(Ke,w({},Y),i.createElement("span",null,g))};i.useImperativeHandle(a,function(){return{handlePreview:ge,handleDownload:q}});var le=i.useContext(je),ye=le.getPrefixCls,se=le.direction,G=ye("upload",O),Re=_(P(P(P({},"".concat(G,"-list"),!0),"".concat(G,"-list-").concat(o),!0),"".concat(G,"-list-rtl"),se==="rtl")),re=ue(L.map(function(b){return{key:b.uid,file:b}})),J=o==="picture-card"?"animate-inline":"animate",ae={motionDeadline:2e3,motionName:"".concat(G,"-").concat(J),keys:re,motionAppear:ne};return o!=="picture-card"&&(ae=w(w({},Le),ae)),i.createElement("div",{className:Re},i.createElement(ct,w({},ae,{component:!1}),function(b){var g=b.key,k=b.file,j=b.className,W=b.style;return i.createElement(an,{key:g,locale:u,prefixCls:G,className:j,style:W,file:k,items:L,progress:ee,listType:o,isImgUrl:y,showPreviewIcon:T,showRemoveIcon:M,showDownloadIcon:x,removeIcon:N,previewIcon:H,downloadIcon:Q,iconRender:we,actionIconRender:D,itemRender:ve,onPreview:ge,onDownload:q,onClose:Ee})}),A&&i.createElement(et,w({},ae,{visible:fe,forceRender:!0}),function(b){var g=b.className,k=b.style;return _e(A,function(j){return{className:_(j.className,g),style:w(w(w({},k),{pointerEvents:g?"none":void 0}),j.style)}})}))},ln=i.forwardRef(on);const sn=ln;var cn=globalThis&&globalThis.__awaiter||function(t,e,a,n){function o(l){return l instanceof a?l:new a(function(s){s(l)})}return new(a||(a=Promise))(function(l,s){function r(u){try{c(n.next(u))}catch(h){s(h)}}function d(u){try{c(n.throw(u))}catch(h){s(h)}}function c(u){u.done?l(u.value):o(u.value).then(r,d)}c((n=n.apply(t,e||[])).next())})},Pe="__LIST_IGNORE_".concat(Date.now(),"__"),un=function(e,a){var n=e.fileList,o=e.defaultFileList,l=e.onRemove,s=e.showUploadList,r=s===void 0?!0:s,d=e.listType,c=d===void 0?"text":d,u=e.onPreview,h=e.onDownload,m=e.onChange,y=e.onDrop,O=e.previewFile,S=e.disabled,L=e.locale,U=e.iconRender,T=e.isImageUrl,$=e.progress,M=e.prefixCls,p=e.className,x=e.type,N=x===void 0?"select":x,H=e.children,Q=e.style,de=e.itemRender,ee=e.maxCount,A=e.data,pe=A===void 0?{}:A,fe=e.multiple,ve=fe===void 0?!1:fe,me=e.action,Ce=me===void 0?"":me,te=e.accept,he=te===void 0?"":te,ne=e.supportServerRender,ie=ne===void 0?!0:ne,ge=i.useContext(ut),q=S??ge,Ee=wt(o||[],{value:n,postState:function(v){return v??[]}}),we=Fe(Ee,2),D=we[0],le=we[1],ye=i.useState("drop"),se=Fe(ye,2),G=se[0],Re=se[1],re=i.useRef(null);i.useMemo(function(){var z=Date.now();(n||[]).forEach(function(v,E){!v.uid&&!Object.isFrozen(v)&&(v.uid="__AUTO__".concat(z,"_").concat(E,"__"))})},[n]);var J=function(v,E,F){var f=ue(E);ee===1?f=f.slice(-1):ee&&(f=f.slice(0,ee)),We.flushSync(function(){le(f)});var C={file:v,fileList:f};F&&(C.event=F),We.flushSync(function(){m==null||m(C)})},ae=function(v,E){return cn(void 0,void 0,void 0,Se().mark(function F(){var f,C,B,V;return Se().wrap(function(R){for(;;)switch(R.prev=R.next){case 0:if(f=e.beforeUpload,C=e.transformFile,B=v,!f){R.next=13;break}return R.next=5,f(v,E);case 5:if(V=R.sent,V!==!1){R.next=8;break}return R.abrupt("return",!1);case 8:if(delete v[Pe],V!==Pe){R.next=12;break}return Object.defineProperty(v,Pe,{value:!0,configurable:!0}),R.abrupt("return",!1);case 12:Qe(V)==="object"&&V&&(B=V);case 13:if(!C){R.next=17;break}return R.next=16,C(B);case 16:B=R.sent;case 17:return R.abrupt("return",B);case 18:case"end":return R.stop()}},F)}))},b=function(v){var E=v.filter(function(C){return!C.file[Pe]});if(E.length){var F=E.map(function(C){return De(C.file)}),f=ue(D);F.forEach(function(C){f=ke(C,f)}),F.forEach(function(C,B){var V=C;if(E[B].parsedFile)C.status="uploading";else{var Z=C.originFileObj,R;try{R=new File([Z],Z.name,{type:Z.type})}catch{R=new Blob([Z],{type:Z.type}),R.name=Z.name,R.lastModifiedDate=new Date,R.lastModified=new Date().getTime()}R.uid=C.uid,V=R}J(V,f)})}},g=function(v,E,F){try{typeof v=="string"&&(v=JSON.parse(v))}catch{}if(Te(E,D)){var f=De(E);f.status="done",f.percent=100,f.response=v,f.xhr=F;var C=ke(f,D);J(f,C)}},k=function(v,E){if(Te(E,D)){var F=De(E);F.status="uploading",F.percent=v.percent;var f=ke(F,D);J(F,f,v)}},j=function(v,E,F){if(Te(F,D)){var f=De(F);f.error=v,f.response=E,f.status="error";var C=ke(f,D);J(f,C)}},W=function(v){var E;Promise.resolve(typeof l=="function"?l(v):l).then(function(F){var f;if(F!==!1){var C=Qt(v,D);C&&(E=w(w({},v),{status:"removed"}),D==null||D.forEach(function(B){var V=E.uid!==void 0?"uid":"name";B[V]===E[V]&&!Object.isFrozen(B)&&(B.status="removed")}),(f=re.current)===null||f===void 0||f.abort(E),J(E,C))}})},Y=function(v){Re(v.type),v.type==="drop"&&(y==null||y(v))};i.useImperativeHandle(a,function(){return{onBatchStart:b,onSuccess:g,onProgress:k,onError:j,fileList:D,upload:re.current}});var be=i.useContext(je),Ie=be.getPrefixCls,K=be.direction,I=Ie("upload",M),ce=w(w({onBatchStart:b,onError:j,onProgress:k,onSuccess:g},e),{data:pe,multiple:ve,action:Ce,accept:he,supportServerRender:ie,prefixCls:I,disabled:q,beforeUpload:ae,onChange:void 0});delete ce.className,delete ce.style,(!H||q)&&delete ce.id;var xe=function(v,E){return r?i.createElement(dt,{componentName:"Upload",defaultLocale:pt.Upload},function(F){var f=typeof r=="boolean"?{}:r,C=f.showRemoveIcon,B=f.showPreviewIcon,V=f.showDownloadIcon,Z=f.removeIcon,R=f.previewIcon,Ve=f.downloadIcon;return i.createElement(sn,{prefixCls:I,listType:c,items:D,previewFile:O,onPreview:u,onDownload:h,onRemove:W,showRemoveIcon:!q&&C,showPreviewIcon:B,showDownloadIcon:V,removeIcon:Z,previewIcon:R,downloadIcon:Ve,iconRender:U,locale:w(w({},F),L),isImageUrl:T,progress:$,appendAction:v,appendActionVisible:E,itemRender:de,disabled:q})}):v};if(N==="drag"){var rt=_(I,P(P(P(P(P({},"".concat(I,"-drag"),!0),"".concat(I,"-drag-uploading"),D.some(function(z){return z.status==="uploading"})),"".concat(I,"-drag-hover"),G==="dragover"),"".concat(I,"-disabled"),q),"".concat(I,"-rtl"),K==="rtl"),p);return i.createElement("span",null,i.createElement("div",{className:rt,onDrop:Y,onDragOver:Y,onDragLeave:Y,style:Q},i.createElement(Ae,w({},ce,{ref:re,className:"".concat(I,"-btn")}),i.createElement("div",{className:"".concat(I,"-drag-container")},H))),xe())}var at=_(I,P(P(P(P({},"".concat(I,"-select"),!0),"".concat(I,"-select-").concat(c),!0),"".concat(I,"-disabled"),q),"".concat(I,"-rtl"),K==="rtl")),ot=function(v){return i.createElement("div",{className:at,style:v},i.createElement(Ae,w({},ce,{ref:re})))},Be=ot(H?void 0:{display:"none"});return c==="picture-card"?i.createElement("span",{className:_("".concat(I,"-picture-card-wrapper"),p)},xe(Be,!!H)):i.createElement("span",{className:p},Be,xe())},dn=i.forwardRef(un);const nt=dn;var pn=globalThis&&globalThis.__rest||function(t,e){var a={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(a[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(t);o0&&i(d)?n>1?baseFlatten$1(d,n-1,i,r,a):arrayPush(a,d):r||(a[a.length]=d)}return a}var _baseFlatten=baseFlatten$1,baseFlatten=_baseFlatten;function flatten$1(s){var n=s==null?0:s.length;return n?baseFlatten(s,1):[]}var flatten_1=flatten$1,flatten=flatten_1,overRest=_overRest,setToString=_setToString;function flatRest$1(s){return setToString(overRest(s,void 0,flatten),s+"")}var _flatRest=flatRest$1,basePick=_basePick,flatRest=_flatRest,pick=flatRest(function(s,n){return s==null?{}:basePick(s,n)}),pick_1=pick;const pick$1=getDefaultExportFromCjs(pick_1);var musicWidgetsBrowser_umd={exports:{}};(function(s,n){(function(r,a){s.exports=a()})(typeof self<"u"?self:commonjsGlobal,function(){return function(i){var r={};function a(c){if(r[c])return r[c].exports;var l=r[c]={i:c,l:!1,exports:{}};return i[c].call(l.exports,l,l.exports,a),l.l=!0,l.exports}return a.m=i,a.c=r,a.d=function(c,l,d){a.o(c,l)||Object.defineProperty(c,l,{enumerable:!0,get:d})},a.r=function(c){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})},a.t=function(c,l){if(l&1&&(c=a(c)),l&8||l&4&&typeof c=="object"&&c&&c.__esModule)return c;var d=Object.create(null);if(a.r(d),Object.defineProperty(d,"default",{enumerable:!0,value:c}),l&2&&typeof c!="string")for(var u in c)a.d(d,u,function(p){return c[p]}.bind(null,u));return d},a.n=function(c){var l=c&&c.__esModule?function(){return c.default}:function(){return c};return a.d(l,"a",l),l},a.o=function(c,l){return Object.prototype.hasOwnProperty.call(c,l)},a.p="",a(a.s="fae3")}({"0241":function(i,r,a){const c=a("b37a"),l=a("33e9"),u=800*.24,p=m=>Math.tanh(m/u),f=function(m,T,{softIndexFactor:S=1}={}){T=Number(T);const M=m[T];if(T>0){const C=m[T-1];console.assert(M.start!=null,"note.start is null",M),console.assert(C.start!=null,"lastNote.start is null",C),M.deltaSi=p((M.start-C.start)*S),M.softIndex=C.softIndex+M.deltaSi,console.assert(!Number.isNaN(M.deltaSi),"note.deltaSi is NaN.",M.start,C.start)}else M.softIndex=0,M.deltaSi=0},g=function(m,T,S=c.zero()){m.matches=[];const M=T.pitchMap[m.pitch];if(M)for(const C of M){const k=new c(m,C);S&&k.evaluatePrev(S),m.matches.push(k)}},y=function(m,{softIndexFactor:T=1}={}){for(let S=0;Snew Promise(u=>requestAnimationFrame(u));class d{constructor(p,{cacheSpan:f=600,onMidi:g,onPlayFinish:y,onTurnCursor:x}={}){this.cacheSpan=f,this.onMidi=g,this.onPlayFinish=y,this.onTurnCursor=x;let m;p.notes&&Number.isFinite(p.endTime)?m=p:m=c.parseMidi(p),this.notation=m,this.events=m.events,this.isPlaying=!1,this.progressTime=0,this.startTime=performance.now(),this.duration=m.endTime,this.cursorTurnDelta=0,console.assert(m.tempos&&m.tempos.length,"[MidiPlayer] invalid notation, tempos is empty.")}dispose(){this.isPlaying=!1,this.progressTime=0}get progressTicks(){return this.notation.timeToTicks(this.progressTime)}set progressTicks(p){this.progressTime=this.notation.ticksToTime(p),this.onTurnCursor&&this.onTurnCursor(this.progressTime)}async play({nextFrame:p=l}={}){this.progressTime>=this.duration&&(this.progressTime=0);let f=performance.now();this.startTime=f-this.progressTime,this.isPlaying=!0;let g=this.events.findIndex(y=>y.time>=f-this.startTime);for(;this.isPlaying;){for(;gthis.progressTime+this.cacheSpan)break;y.data.type==="channel"&&this.startTime+y.time>=f&&this.onMidi&&this.onMidi(y.data,this.startTime+y.time)}if(await p(),!this.isPlaying)break;if(this.cursorTurnDelta!==0){const y=this.cursorTurnDelta<0;if(this.startTime-=this.cursorTurnDelta,this.cursorTurnDelta=0,y)for(;g>0;--g){const x=this.events[g].time;if(this.startTime+xthis.duration&&(this.isPlaying=!1,this.onPlayFinish&&this.onPlayFinish())}}pause(){this.isPlaying=!1}turnCursor(p){this.isPlaying?this.cursorTurnDelta+=p-this.progressTime:this.progressTime=p,this.onTurnCursor&&this.onTurnCursor(p)}}i.exports=d},"2ef0":function(i,r,a){(function(c,l){var d;/** -* @license -* Lodash -* Copyright OpenJS Foundation and other contributors -* Released under MIT license -* Based on Underscore.js 1.8.3 -* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -*/(function(){var u,p="4.17.21",f=200,g="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",y="Expected a function",x="Invalid `variable` option passed into `_.template`",m="__lodash_hash_undefined__",T=500,S="__lodash_placeholder__",M=1,C=2,k=4,w=1,_=2,b=1,N=2,L=4,R=8,q=16,H=32,Z=64,Y=128,nt=256,z=512,ot=30,G="...",B=800,O=16,U=1,j=2,X=3,rt=1/0,lt=9007199254740991,Tt=17976931348623157e292,Q=0/0,ct=4294967295,it=ct-1,at=ct>>>1,pt=[["ary",Y],["bind",b],["bindKey",N],["curry",R],["curryRight",q],["flip",z],["partial",H],["partialRight",Z],["rearg",nt]],dt="[object Arguments]",ft="[object Array]",Dt="[object AsyncFunction]",It="[object Boolean]",Gt="[object Date]",Kt="[object DOMException]",le="[object Error]",se="[object Function]",Ki="[object GeneratorFunction]",ve="[object Map]",gn="[object Number]",Ao="[object Null]",Ne="[object Object]",$i="[object Promise]",Mo="[object Proxy]",yn="[object RegExp]",xe="[object Set]",Sn="[object String]",Fn="[object Symbol]",No="[object Undefined]",vn="[object WeakMap]",wo="[object WeakSet]",xn="[object ArrayBuffer]",en="[object DataView]",Ms="[object Float32Array]",Ns="[object Float64Array]",ws="[object Int8Array]",Is="[object Int16Array]",Cs="[object Int32Array]",Os="[object Uint8Array]",Rs="[object Uint8ClampedArray]",Ds="[object Uint16Array]",Bs="[object Uint32Array]",Io=/\b__p \+= '';/g,Co=/\b(__p \+=) '' \+/g,Oo=/(__e\(.*?\)|\b__t\)) \+\n'';/g,zi=/&(?:amp|lt|gt|quot|#39);/g,Ji=/[&<>"']/g,Ro=RegExp(zi.source),Do=RegExp(Ji.source),Bo=/<%-([\s\S]+?)%>/g,Po=/<%([\s\S]+?)%>/g,Zi=/<%=([\s\S]+?)%>/g,Fo=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Lo=/^\w*$/,Ho=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ps=/[\\^$.*+?()[\]{}|]/g,Wo=RegExp(Ps.source),Fs=/^\s+/,Uo=/\s/,qo=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Go=/\{\n\/\* \[wrapped with (.+)\] \*/,Vo=/,? & /,Yo=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Xo=/[()=,{}\[\]\/\s]/,Ko=/\\(\\)?/g,$o=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ji=/\w*$/,zo=/^[-+]0x[0-9a-f]+$/i,Jo=/^0b[01]+$/i,Zo=/^\[object .+?Constructor\]$/,jo=/^0o[0-7]+$/i,Qo=/^(?:0|[1-9]\d*)$/,tc=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ln=/($^)/,ec=/['\n\r\u2028\u2029\\]/g,Hn="\\ud800-\\udfff",nc="\\u0300-\\u036f",sc="\\ufe20-\\ufe2f",ic="\\u20d0-\\u20ff",Qi=nc+sc+ic,tr="\\u2700-\\u27bf",er="a-z\\xdf-\\xf6\\xf8-\\xff",rc="\\xac\\xb1\\xd7\\xf7",ac="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",oc="\\u2000-\\u206f",cc=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",nr="A-Z\\xc0-\\xd6\\xd8-\\xde",sr="\\ufe0e\\ufe0f",ir=rc+ac+oc+cc,Ls="['’]",uc="["+Hn+"]",rr="["+ir+"]",Wn="["+Qi+"]",ar="\\d+",lc="["+tr+"]",or="["+er+"]",cr="[^"+Hn+ir+ar+tr+er+nr+"]",Hs="\\ud83c[\\udffb-\\udfff]",fc="(?:"+Wn+"|"+Hs+")",ur="[^"+Hn+"]",Ws="(?:\\ud83c[\\udde6-\\uddff]){2}",Us="[\\ud800-\\udbff][\\udc00-\\udfff]",nn="["+nr+"]",lr="\\u200d",fr="(?:"+or+"|"+cr+")",hc="(?:"+nn+"|"+cr+")",hr="(?:"+Ls+"(?:d|ll|m|re|s|t|ve))?",dr="(?:"+Ls+"(?:D|LL|M|RE|S|T|VE))?",pr=fc+"?",mr="["+sr+"]?",dc="(?:"+lr+"(?:"+[ur,Ws,Us].join("|")+")"+mr+pr+")*",pc="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",mc="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",gr=mr+pr+dc,gc="(?:"+[lc,Ws,Us].join("|")+")"+gr,yc="(?:"+[ur+Wn+"?",Wn,Ws,Us,uc].join("|")+")",Sc=RegExp(Ls,"g"),vc=RegExp(Wn,"g"),qs=RegExp(Hs+"(?="+Hs+")|"+yc+gr,"g"),xc=RegExp([nn+"?"+or+"+"+hr+"(?="+[rr,nn,"$"].join("|")+")",hc+"+"+dr+"(?="+[rr,nn+fr,"$"].join("|")+")",nn+"?"+fr+"+"+hr,nn+"+"+dr,mc,pc,ar,gc].join("|"),"g"),Tc=RegExp("["+lr+Hn+Qi+sr+"]"),_c=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Ec=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],bc=-1,Bt={};Bt[Ms]=Bt[Ns]=Bt[ws]=Bt[Is]=Bt[Cs]=Bt[Os]=Bt[Rs]=Bt[Ds]=Bt[Bs]=!0,Bt[dt]=Bt[ft]=Bt[xn]=Bt[It]=Bt[en]=Bt[Gt]=Bt[le]=Bt[se]=Bt[ve]=Bt[gn]=Bt[Ne]=Bt[yn]=Bt[xe]=Bt[Sn]=Bt[vn]=!1;var Rt={};Rt[dt]=Rt[ft]=Rt[xn]=Rt[en]=Rt[It]=Rt[Gt]=Rt[Ms]=Rt[Ns]=Rt[ws]=Rt[Is]=Rt[Cs]=Rt[ve]=Rt[gn]=Rt[Ne]=Rt[yn]=Rt[xe]=Rt[Sn]=Rt[Fn]=Rt[Os]=Rt[Rs]=Rt[Ds]=Rt[Bs]=!0,Rt[le]=Rt[se]=Rt[vn]=!1;var kc={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ac={"&":"&","<":"<",">":">",'"':""","'":"'"},Mc={"&":"&","<":"<",">":">",""":'"',"'":"'"},Nc={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},wc=parseFloat,Ic=parseInt,yr=typeof c=="object"&&c&&c.Object===Object&&c,Cc=typeof self=="object"&&self&&self.Object===Object&&self,Yt=yr||Cc||Function("return this")(),Sr=r&&!r.nodeType&&r,Tn=Sr&&typeof l=="object"&&l&&!l.nodeType&&l,vr=Tn&&Tn.exports===Sr,Gs=vr&&yr.process,fe=function(){try{var P=Tn&&Tn.require&&Tn.require("util").types;return P||Gs&&Gs.binding&&Gs.binding("util")}catch{}}(),xr=fe&&fe.isArrayBuffer,Tr=fe&&fe.isDate,_r=fe&&fe.isMap,Er=fe&&fe.isRegExp,br=fe&&fe.isSet,kr=fe&&fe.isTypedArray;function ie(P,V,W){switch(W.length){case 0:return P.call(V);case 1:return P.call(V,W[0]);case 2:return P.call(V,W[0],W[1]);case 3:return P.call(V,W[0],W[1],W[2])}return P.apply(V,W)}function Oc(P,V,W,ht){for(var vt=-1,Nt=P==null?0:P.length;++vt-1}function Vs(P,V,W){for(var ht=-1,vt=P==null?0:P.length;++ht-1;);return W}function Rr(P,V){for(var W=P.length;W--&&sn(V,P[W],0)>-1;);return W}function Uc(P,V){for(var W=P.length,ht=0;W--;)P[W]===V&&++ht;return ht}var qc=$s(kc),Gc=$s(Ac);function Vc(P){return"\\"+Nc[P]}function Yc(P,V){return P==null?u:P[V]}function rn(P){return Tc.test(P)}function Xc(P){return _c.test(P)}function Kc(P){for(var V,W=[];!(V=P.next()).done;)W.push(V.value);return W}function js(P){var V=-1,W=Array(P.size);return P.forEach(function(ht,vt){W[++V]=[vt,ht]}),W}function Dr(P,V){return function(W){return P(V(W))}}function We(P,V){for(var W=-1,ht=P.length,vt=0,Nt=[];++W-1}function Du(t,e){var o=this.__data__,h=rs(o,t);return h<0?(++this.size,o.push([t,e])):o[h][1]=e,this}we.prototype.clear=Iu,we.prototype.delete=Cu,we.prototype.get=Ou,we.prototype.has=Ru,we.prototype.set=Du;function Ie(t){var e=-1,o=t==null?0:t.length;for(this.clear();++e=e?t:e)),t}function me(t,e,o,h,v,A){var I,D=e&M,F=e&C,K=e&k;if(o&&(I=v?o(t,h,v,A):o(t)),I!==u)return I;if(!Ft(t))return t;var $=xt(t);if($){if(I=Ll(t),!D)return Qt(t,I)}else{var J=zt(t),ut=J==se||J==Ki;if(Xe(t))return ga(t,D);if(J==Ne||J==dt||ut&&!v){if(I=F||ut?{}:Ba(t),!D)return F?Ml(t,Ju(I,t)):Al(t,Xr(I,t))}else{if(!Rt[J])return v?t:{};I=Hl(t,J,D)}}A||(A=new _e);var mt=A.get(t);if(mt)return mt;A.set(t,I),lo(t)?t.forEach(function(St){I.add(me(St,e,o,St,t,A))}):co(t)&&t.forEach(function(St,kt){I.set(kt,me(St,e,o,kt,t,A))});var yt=K?F?bi:Ei:F?ee:Vt,Et=$?u:yt(t);return he(Et||t,function(St,kt){Et&&(kt=St,St=t[kt]),Nn(I,kt,me(St,e,o,kt,t,A))}),I}function Zu(t){var e=Vt(t);return function(o){return Kr(o,t,e)}}function Kr(t,e,o){var h=o.length;if(t==null)return!h;for(t=Ot(t);h--;){var v=o[h],A=e[v],I=t[v];if(I===u&&!(v in t)||!A(I))return!1}return!0}function $r(t,e,o){if(typeof t!="function")throw new de(y);return Bn(function(){t.apply(u,o)},e)}function wn(t,e,o,h){var v=-1,A=Un,I=!0,D=t.length,F=[],K=e.length;if(!D)return F;o&&(e=Pt(e,re(o))),h?(A=Vs,I=!1):e.length>=f&&(A=_n,I=!1,e=new ze(e));t:for(;++vv?0:v+o),h=h===u||h>v?v:_t(h),h<0&&(h+=v),h=o>h?0:ho(h);o0&&o(D)?e>1?Xt(D,e-1,o,h,v):He(v,D):h||(v[v.length]=D)}return v}var ri=_a(),Zr=_a(!0);function ke(t,e){return t&&ri(t,e,Vt)}function ai(t,e){return t&&Zr(t,e,Vt)}function os(t,e){return Le(e,function(o){return Be(t[o])})}function Ze(t,e){e=Ve(e,t);for(var o=0,h=e.length;t!=null&&oe}function tl(t,e){return t!=null&&Ct.call(t,e)}function el(t,e){return t!=null&&e in Ot(t)}function nl(t,e,o){return t>=$t(e,o)&&t=120&&$.length>=120)?new ze(I&&$):u}$=t[0];var J=-1,ut=D[0];t:for(;++J-1;)D!==t&&jn.call(D,F,1),jn.call(t,F,1);return t}function ca(t,e){for(var o=t?e.length:0,h=o-1;o--;){var v=e[o];if(o==h||v!==A){var A=v;De(v)?jn.call(t,v,1):gi(t,v)}}return t}function di(t,e){return t+es(qr()*(e-t+1))}function ml(t,e,o,h){for(var v=-1,A=qt(ts((e-t)/(o||1)),0),I=W(A);A--;)I[h?A:++v]=t,t+=o;return I}function pi(t,e){var o="";if(!t||e<1||e>lt)return o;do e%2&&(o+=t),e=es(e/2),e&&(t+=t);while(e);return o}function bt(t,e){return Ci(La(t,e,ne),t+"")}function gl(t){return Yr(mn(t))}function yl(t,e){var o=mn(t);return Ss(o,Je(e,0,o.length))}function On(t,e,o,h){if(!Ft(t))return t;e=Ve(e,t);for(var v=-1,A=e.length,I=A-1,D=t;D!=null&&++vv?0:v+e),o=o>v?v:o,o<0&&(o+=v),v=e>o?0:o-e>>>0,e>>>=0;for(var A=W(v);++h>>1,I=t[A];I!==null&&!oe(I)&&(o?I<=e:I=f){var K=e?null:Cl(t);if(K)return Gn(K);I=!1,v=_n,F=new ze}else F=e?[]:D;t:for(;++h=h?t:ge(t,e,o)}var ma=cu||function(t){return Yt.clearTimeout(t)};function ga(t,e){if(e)return t.slice();var o=t.length,h=Fr?Fr(o):new t.constructor(o);return t.copy(h),h}function xi(t){var e=new t.constructor(t.byteLength);return new Jn(e).set(new Jn(t)),e}function _l(t,e){var o=e?xi(t.buffer):t.buffer;return new t.constructor(o,t.byteOffset,t.byteLength)}function El(t){var e=new t.constructor(t.source,ji.exec(t));return e.lastIndex=t.lastIndex,e}function bl(t){return Mn?Ot(Mn.call(t)):{}}function ya(t,e){var o=e?xi(t.buffer):t.buffer;return new t.constructor(o,t.byteOffset,t.length)}function Sa(t,e){if(t!==e){var o=t!==u,h=t===null,v=t===t,A=oe(t),I=e!==u,D=e===null,F=e===e,K=oe(e);if(!D&&!K&&!A&&t>e||A&&I&&F&&!D&&!K||h&&I&&F||!o&&F||!v)return 1;if(!h&&!A&&!K&&t=D)return F;var K=o[h];return F*(K=="desc"?-1:1)}}return t.index-e.index}function va(t,e,o,h){for(var v=-1,A=t.length,I=o.length,D=-1,F=e.length,K=qt(A-I,0),$=W(F+K),J=!h;++D1?o[v-1]:u,I=v>2?o[2]:u;for(A=t.length>3&&typeof A=="function"?(v--,A):u,I&&Zt(o[0],o[1],I)&&(A=v<3?u:A,v=1),e=Ot(e);++h-1?v[A?e[I]:I]:u}}function ka(t){return Re(function(e){var o=e.length,h=o,v=pe.prototype.thru;for(t&&e.reverse();h--;){var A=e[h];if(typeof A!="function")throw new de(y);if(v&&!I&&gs(A)=="wrapper")var I=new pe([],!0)}for(h=I?h:o;++h1&&Mt.reverse(),$&&FD))return!1;var K=A.get(t),$=A.get(e);if(K&&$)return K==e&&$==t;var J=-1,ut=!0,mt=o&_?new ze:u;for(A.set(t,e),A.set(e,t);++J1?"& ":"")+e[h],e=e.join(o>2?", ":" "),t.replace(qo,`{ -/* [wrapped with `+e+`] */ -`)}function Ul(t){return xt(t)||tn(t)||!!(Wr&&t&&t[Wr])}function De(t,e){var o=typeof t;return e=e??lt,!!e&&(o=="number"||o!="symbol"&&Qo.test(t))&&t>-1&&t%1==0&&t0){if(++e>=B)return arguments[0]}else e=0;return t.apply(u,arguments)}}function Ss(t,e){var o=-1,h=t.length,v=h-1;for(e=e===u?h:e;++o1?t[e-1]:u;return o=typeof o=="function"?(t.pop(),o):u,Ja(t,o)});function Za(t){var e=E(t);return e.__chain__=!0,e}function Qf(t,e){return e(t),t}function vs(t,e){return e(t)}var th=Re(function(t){var e=t.length,o=e?t[0]:0,h=this.__wrapped__,v=function(A){return ii(A,t)};return e>1||this.__actions__.length||!(h instanceof At)||!De(o)?this.thru(v):(h=h.slice(o,+o+(e?1:0)),h.__actions__.push({func:vs,args:[v],thisArg:u}),new pe(h,this.__chain__).thru(function(A){return e&&!A.length&&A.push(u),A}))});function eh(){return Za(this)}function nh(){return new pe(this.value(),this.__chain__)}function sh(){this.__values__===u&&(this.__values__=fo(this.value()));var t=this.__index__>=this.__values__.length,e=t?u:this.__values__[this.__index__++];return{done:t,value:e}}function ih(){return this}function rh(t){for(var e,o=this;o instanceof is;){var h=Va(o);h.__index__=0,h.__values__=u,e?v.__wrapped__=h:e=h;var v=h;o=o.__wrapped__}return v.__wrapped__=t,e}function ah(){var t=this.__wrapped__;if(t instanceof At){var e=t;return this.__actions__.length&&(e=new At(this)),e=e.reverse(),e.__actions__.push({func:vs,args:[Oi],thisArg:u}),new pe(e,this.__chain__)}return this.thru(Oi)}function oh(){return da(this.__wrapped__,this.__actions__)}var ch=fs(function(t,e,o){Ct.call(t,o)?++t[o]:Ce(t,o,1)});function uh(t,e,o){var h=xt(t)?Ar:ju;return o&&Zt(t,e,o)&&(e=u),h(t,gt(e,3))}function lh(t,e){var o=xt(t)?Le:Jr;return o(t,gt(e,3))}var fh=ba(Ya),hh=ba(Xa);function dh(t,e){return Xt(xs(t,e),1)}function ph(t,e){return Xt(xs(t,e),rt)}function mh(t,e,o){return o=o===u?1:_t(o),Xt(xs(t,e),o)}function ja(t,e){var o=xt(t)?he:qe;return o(t,gt(e,3))}function Qa(t,e){var o=xt(t)?Rc:zr;return o(t,gt(e,3))}var gh=fs(function(t,e,o){Ct.call(t,o)?t[o].push(e):Ce(t,o,[e])});function yh(t,e,o,h){t=te(t)?t:mn(t),o=o&&!h?_t(o):0;var v=t.length;return o<0&&(o=qt(v+o,0)),ks(t)?o<=v&&t.indexOf(e,o)>-1:!!v&&sn(t,e,o)>-1}var Sh=bt(function(t,e,o){var h=-1,v=typeof e=="function",A=te(t)?W(t.length):[];return qe(t,function(I){A[++h]=v?ie(e,I,o):In(I,e,o)}),A}),vh=fs(function(t,e,o){Ce(t,o,e)});function xs(t,e){var o=xt(t)?Pt:na;return o(t,gt(e,3))}function xh(t,e,o,h){return t==null?[]:(xt(e)||(e=e==null?[]:[e]),o=h?u:o,xt(o)||(o=o==null?[]:[o]),aa(t,e,o))}var Th=fs(function(t,e,o){t[o?0:1].push(e)},function(){return[[],[]]});function _h(t,e,o){var h=xt(t)?Ys:Ir,v=arguments.length<3;return h(t,gt(e,4),o,v,qe)}function Eh(t,e,o){var h=xt(t)?Dc:Ir,v=arguments.length<3;return h(t,gt(e,4),o,v,zr)}function bh(t,e){var o=xt(t)?Le:Jr;return o(t,Es(gt(e,3)))}function kh(t){var e=xt(t)?Yr:gl;return e(t)}function Ah(t,e,o){(o?Zt(t,e,o):e===u)?e=1:e=_t(e);var h=xt(t)?Ku:yl;return h(t,e)}function Mh(t){var e=xt(t)?$u:vl;return e(t)}function Nh(t){if(t==null)return 0;if(te(t))return ks(t)?an(t):t.length;var e=zt(t);return e==ve||e==xe?t.size:li(t).length}function wh(t,e,o){var h=xt(t)?Xs:xl;return o&&Zt(t,e,o)&&(e=u),h(t,gt(e,3))}var Ih=bt(function(t,e){if(t==null)return[];var o=e.length;return o>1&&Zt(t,e[0],e[1])?e=[]:o>2&&Zt(e[0],e[1],e[2])&&(e=[e[0]]),aa(t,Xt(e,1),[])}),Ts=uu||function(){return Yt.Date.now()};function Ch(t,e){if(typeof e!="function")throw new de(y);return t=_t(t),function(){if(--t<1)return e.apply(this,arguments)}}function to(t,e,o){return e=o?u:e,e=t&&e==null?t.length:e,Oe(t,Y,u,u,u,u,e)}function eo(t,e){var o;if(typeof e!="function")throw new de(y);return t=_t(t),function(){return--t>0&&(o=e.apply(this,arguments)),t<=1&&(e=u),o}}var Di=bt(function(t,e,o){var h=b;if(o.length){var v=We(o,dn(Di));h|=H}return Oe(t,h,e,o,v)}),no=bt(function(t,e,o){var h=b|N;if(o.length){var v=We(o,dn(no));h|=H}return Oe(e,h,t,o,v)});function so(t,e,o){e=o?u:e;var h=Oe(t,R,u,u,u,u,u,e);return h.placeholder=so.placeholder,h}function io(t,e,o){e=o?u:e;var h=Oe(t,q,u,u,u,u,u,e);return h.placeholder=io.placeholder,h}function ro(t,e,o){var h,v,A,I,D,F,K=0,$=!1,J=!1,ut=!0;if(typeof t!="function")throw new de(y);e=Se(e)||0,Ft(o)&&($=!!o.leading,J="maxWait"in o,A=J?qt(Se(o.maxWait)||0,e):A,ut="trailing"in o?!!o.trailing:ut);function mt(Wt){var be=h,Fe=v;return h=v=u,K=Wt,I=t.apply(Fe,be),I}function yt(Wt){return K=Wt,D=Bn(kt,e),$?mt(Wt):I}function Et(Wt){var be=Wt-F,Fe=Wt-K,ko=e-be;return J?$t(ko,A-Fe):ko}function St(Wt){var be=Wt-F,Fe=Wt-K;return F===u||be>=e||be<0||J&&Fe>=A}function kt(){var Wt=Ts();if(St(Wt))return Mt(Wt);D=Bn(kt,Et(Wt))}function Mt(Wt){return D=u,ut&&h?mt(Wt):(h=v=u,I)}function ce(){D!==u&&ma(D),K=0,h=F=v=D=u}function jt(){return D===u?I:Mt(Ts())}function ue(){var Wt=Ts(),be=St(Wt);if(h=arguments,v=this,F=Wt,be){if(D===u)return yt(F);if(J)return ma(D),D=Bn(kt,e),mt(F)}return D===u&&(D=Bn(kt,e)),I}return ue.cancel=ce,ue.flush=jt,ue}var Oh=bt(function(t,e){return $r(t,1,e)}),Rh=bt(function(t,e,o){return $r(t,Se(e)||0,o)});function Dh(t){return Oe(t,z)}function _s(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new de(y);var o=function(){var h=arguments,v=e?e.apply(this,h):h[0],A=o.cache;if(A.has(v))return A.get(v);var I=t.apply(this,h);return o.cache=A.set(v,I)||A,I};return o.cache=new(_s.Cache||Ie),o}_s.Cache=Ie;function Es(t){if(typeof t!="function")throw new de(y);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Bh(t){return eo(2,t)}var Ph=Tl(function(t,e){e=e.length==1&&xt(e[0])?Pt(e[0],re(gt())):Pt(Xt(e,1),re(gt()));var o=e.length;return bt(function(h){for(var v=-1,A=$t(h.length,o);++v=e}),tn=Qr(function(){return arguments}())?Qr:function(t){return Lt(t)&&Ct.call(t,"callee")&&!Hr.call(t,"callee")},xt=W.isArray,Zh=xr?re(xr):il;function te(t){return t!=null&&bs(t.length)&&!Be(t)}function Ht(t){return Lt(t)&&te(t)}function jh(t){return t===!0||t===!1||Lt(t)&&Jt(t)==It}var Xe=fu||Xi,Qh=Tr?re(Tr):rl;function td(t){return Lt(t)&&t.nodeType===1&&!Pn(t)}function ed(t){if(t==null)return!0;if(te(t)&&(xt(t)||typeof t=="string"||typeof t.splice=="function"||Xe(t)||pn(t)||tn(t)))return!t.length;var e=zt(t);if(e==ve||e==xe)return!t.size;if(Dn(t))return!li(t).length;for(var o in t)if(Ct.call(t,o))return!1;return!0}function nd(t,e){return Cn(t,e)}function sd(t,e,o){o=typeof o=="function"?o:u;var h=o?o(t,e):u;return h===u?Cn(t,e,u,o):!!h}function Pi(t){if(!Lt(t))return!1;var e=Jt(t);return e==le||e==Kt||typeof t.message=="string"&&typeof t.name=="string"&&!Pn(t)}function id(t){return typeof t=="number"&&Ur(t)}function Be(t){if(!Ft(t))return!1;var e=Jt(t);return e==se||e==Ki||e==Dt||e==Mo}function oo(t){return typeof t=="number"&&t==_t(t)}function bs(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=lt}function Ft(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function Lt(t){return t!=null&&typeof t=="object"}var co=_r?re(_r):ol;function rd(t,e){return t===e||ui(t,e,Ai(e))}function ad(t,e,o){return o=typeof o=="function"?o:u,ui(t,e,Ai(e),o)}function od(t){return uo(t)&&t!=+t}function cd(t){if(Vl(t))throw new vt(g);return ta(t)}function ud(t){return t===null}function ld(t){return t==null}function uo(t){return typeof t=="number"||Lt(t)&&Jt(t)==gn}function Pn(t){if(!Lt(t)||Jt(t)!=Ne)return!1;var e=Zn(t);if(e===null)return!0;var o=Ct.call(e,"constructor")&&e.constructor;return typeof o=="function"&&o instanceof o&&Kn.call(o)==ru}var Fi=Er?re(Er):cl;function fd(t){return oo(t)&&t>=-lt&&t<=lt}var lo=br?re(br):ul;function ks(t){return typeof t=="string"||!xt(t)&&Lt(t)&&Jt(t)==Sn}function oe(t){return typeof t=="symbol"||Lt(t)&&Jt(t)==Fn}var pn=kr?re(kr):ll;function hd(t){return t===u}function dd(t){return Lt(t)&&zt(t)==vn}function pd(t){return Lt(t)&&Jt(t)==wo}var md=ms(fi),gd=ms(function(t,e){return t<=e});function fo(t){if(!t)return[];if(te(t))return ks(t)?Te(t):Qt(t);if(En&&t[En])return Kc(t[En]());var e=zt(t),o=e==ve?js:e==xe?Gn:mn;return o(t)}function Pe(t){if(!t)return t===0?t:0;if(t=Se(t),t===rt||t===-rt){var e=t<0?-1:1;return e*Tt}return t===t?t:0}function _t(t){var e=Pe(t),o=e%1;return e===e?o?e-o:e:0}function ho(t){return t?Je(_t(t),0,ct):0}function Se(t){if(typeof t=="number")return t;if(oe(t))return Q;if(Ft(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=Ft(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=Cr(t);var o=Jo.test(t);return o||jo.test(t)?Ic(t.slice(2),o?2:8):zo.test(t)?Q:+t}function po(t){return Ae(t,ee(t))}function yd(t){return t?Je(_t(t),-lt,lt):t===0?t:0}function wt(t){return t==null?"":ae(t)}var Sd=fn(function(t,e){if(Dn(e)||te(e)){Ae(e,Vt(e),t);return}for(var o in e)Ct.call(e,o)&&Nn(t,o,e[o])}),mo=fn(function(t,e){Ae(e,ee(e),t)}),As=fn(function(t,e,o,h){Ae(e,ee(e),t,h)}),vd=fn(function(t,e,o,h){Ae(e,Vt(e),t,h)}),xd=Re(ii);function Td(t,e){var o=ln(t);return e==null?o:Xr(o,e)}var _d=bt(function(t,e){t=Ot(t);var o=-1,h=e.length,v=h>2?e[2]:u;for(v&&Zt(e[0],e[1],v)&&(h=1);++o1),A}),Ae(t,bi(t),o),h&&(o=me(o,M|C|k,Ol));for(var v=e.length;v--;)gi(o,e[v]);return o});function Wd(t,e){return yo(t,Es(gt(e)))}var Ud=Re(function(t,e){return t==null?{}:dl(t,e)});function yo(t,e){if(t==null)return{};var o=Pt(bi(t),function(h){return[h]});return e=gt(e),oa(t,o,function(h,v){return e(h,v[0])})}function qd(t,e,o){e=Ve(e,t);var h=-1,v=e.length;for(v||(v=1,t=u);++he){var h=t;t=e,e=h}if(o||t%1||e%1){var v=qr();return $t(t+v*(e-t+wc("1e-"+((v+"").length-1))),e)}return di(t,e)}var Qd=hn(function(t,e,o){return e=e.toLowerCase(),t+(o?xo(e):e)});function xo(t){return Wi(wt(t).toLowerCase())}function To(t){return t=wt(t),t&&t.replace(tc,qc).replace(vc,"")}function tp(t,e,o){t=wt(t),e=ae(e);var h=t.length;o=o===u?h:Je(_t(o),0,h);var v=o;return o-=e.length,o>=0&&t.slice(o,v)==e}function ep(t){return t=wt(t),t&&Do.test(t)?t.replace(Ji,Gc):t}function np(t){return t=wt(t),t&&Wo.test(t)?t.replace(Ps,"\\$&"):t}var sp=hn(function(t,e,o){return t+(o?"-":"")+e.toLowerCase()}),ip=hn(function(t,e,o){return t+(o?" ":"")+e.toLowerCase()}),rp=Ea("toLowerCase");function ap(t,e,o){t=wt(t),e=_t(e);var h=e?an(t):0;if(!e||h>=e)return t;var v=(e-h)/2;return ps(es(v),o)+t+ps(ts(v),o)}function op(t,e,o){t=wt(t),e=_t(e);var h=e?an(t):0;return e&&h>>0,o?(t=wt(t),t&&(typeof e=="string"||e!=null&&!Fi(e))&&(e=ae(e),!e&&rn(t))?Ye(Te(t),0,o):t.split(e,o)):[]}var pp=hn(function(t,e,o){return t+(o?" ":"")+Wi(e)});function mp(t,e,o){return t=wt(t),o=o==null?0:Je(_t(o),0,t.length),e=ae(e),t.slice(o,o+e.length)==e}function gp(t,e,o){var h=E.templateSettings;o&&Zt(t,e,o)&&(e=u),t=wt(t),e=As({},e,h,Ia);var v=As({},e.imports,h.imports,Ia),A=Vt(v),I=Zs(v,A),D,F,K=0,$=e.interpolate||Ln,J="__p += '",ut=Qs((e.escape||Ln).source+"|"+$.source+"|"+($===Zi?$o:Ln).source+"|"+(e.evaluate||Ln).source+"|$","g"),mt="//# sourceURL="+(Ct.call(e,"sourceURL")?(e.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++bc+"]")+` -`;t.replace(ut,function(St,kt,Mt,ce,jt,ue){return Mt||(Mt=ce),J+=t.slice(K,ue).replace(ec,Vc),kt&&(D=!0,J+=`' + -__e(`+kt+`) + -'`),jt&&(F=!0,J+=`'; -`+jt+`; -__p += '`),Mt&&(J+=`' + -((__t = (`+Mt+`)) == null ? '' : __t) + -'`),K=ue+St.length,St}),J+=`'; -`;var yt=Ct.call(e,"variable")&&e.variable;if(!yt)J=`with (obj) { -`+J+` -} -`;else if(Xo.test(yt))throw new vt(x);J=(F?J.replace(Io,""):J).replace(Co,"$1").replace(Oo,"$1;"),J="function("+(yt||"obj")+`) { -`+(yt?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(D?", __e = _.escape":"")+(F?`, __j = Array.prototype.join; -function print() { __p += __j.call(arguments, '') } -`:`; -`)+J+`return __p -}`;var Et=Eo(function(){return Nt(A,mt+"return "+J).apply(u,I)});if(Et.source=J,Pi(Et))throw Et;return Et}function yp(t){return wt(t).toLowerCase()}function Sp(t){return wt(t).toUpperCase()}function vp(t,e,o){if(t=wt(t),t&&(o||e===u))return Cr(t);if(!t||!(e=ae(e)))return t;var h=Te(t),v=Te(e),A=Or(h,v),I=Rr(h,v)+1;return Ye(h,A,I).join("")}function xp(t,e,o){if(t=wt(t),t&&(o||e===u))return t.slice(0,Br(t)+1);if(!t||!(e=ae(e)))return t;var h=Te(t),v=Rr(h,Te(e))+1;return Ye(h,0,v).join("")}function Tp(t,e,o){if(t=wt(t),t&&(o||e===u))return t.replace(Fs,"");if(!t||!(e=ae(e)))return t;var h=Te(t),v=Or(h,Te(e));return Ye(h,v).join("")}function _p(t,e){var o=ot,h=G;if(Ft(e)){var v="separator"in e?e.separator:v;o="length"in e?_t(e.length):o,h="omission"in e?ae(e.omission):h}t=wt(t);var A=t.length;if(rn(t)){var I=Te(t);A=I.length}if(o>=A)return t;var D=o-an(h);if(D<1)return h;var F=I?Ye(I,0,D).join(""):t.slice(0,D);if(v===u)return F+h;if(I&&(D+=F.length-D),Fi(v)){if(t.slice(D).search(v)){var K,$=F;for(v.global||(v=Qs(v.source,wt(ji.exec(v))+"g")),v.lastIndex=0;K=v.exec($);)var J=K.index;F=F.slice(0,J===u?D:J)}}else if(t.indexOf(ae(v),D)!=D){var ut=F.lastIndexOf(v);ut>-1&&(F=F.slice(0,ut))}return F+h}function Ep(t){return t=wt(t),t&&Ro.test(t)?t.replace(zi,Zc):t}var bp=hn(function(t,e,o){return t+(o?" ":"")+e.toUpperCase()}),Wi=Ea("toUpperCase");function _o(t,e,o){return t=wt(t),e=o?u:e,e===u?Xc(t)?tu(t):Fc(t):t.match(e)||[]}var Eo=bt(function(t,e){try{return ie(t,u,e)}catch(o){return Pi(o)?o:new vt(o)}}),kp=Re(function(t,e){return he(e,function(o){o=Me(o),Ce(t,o,Di(t[o],t))}),t});function Ap(t){var e=t==null?0:t.length,o=gt();return t=e?Pt(t,function(h){if(typeof h[1]!="function")throw new de(y);return[o(h[0]),h[1]]}):[],bt(function(h){for(var v=-1;++vlt)return[];var o=ct,h=$t(t,ct);e=gt(e),t-=ct;for(var v=Js(h,e);++o0||e<0)?new At(o):(t<0?o=o.takeRight(-t):t&&(o=o.drop(t)),e!==u&&(e=_t(e),o=e<0?o.dropRight(-e):o.take(e-t)),o)},At.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},At.prototype.toArray=function(){return this.take(ct)},ke(At.prototype,function(t,e){var o=/^(?:filter|find|map|reject)|While$/.test(e),h=/^(?:head|last)$/.test(e),v=E[h?"take"+(e=="last"?"Right":""):e],A=h||/^find/.test(e);v&&(E.prototype[e]=function(){var I=this.__wrapped__,D=h?[1]:arguments,F=I instanceof At,K=D[0],$=F||xt(I),J=function(kt){var Mt=v.apply(E,He([kt],D));return h&&ut?Mt[0]:Mt};$&&o&&typeof K=="function"&&K.length!=1&&(F=$=!1);var ut=this.__chain__,mt=!!this.__actions__.length,yt=A&&!ut,Et=F&&!mt;if(!A&&$){I=Et?I:new At(this);var St=t.apply(I,D);return St.__actions__.push({func:vs,args:[J],thisArg:u}),new pe(St,ut)}return yt&&Et?t.apply(this,D):(St=this.thru(J),yt?h?St.value()[0]:St.value():St)})}),he(["pop","push","shift","sort","splice","unshift"],function(t){var e=Yn[t],o=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",h=/^(?:pop|shift)$/.test(t);E.prototype[t]=function(){var v=arguments;if(h&&!this.__chain__){var A=this.value();return e.apply(xt(A)?A:[],v)}return this[o](function(I){return e.apply(xt(I)?I:[],v)})}}),ke(At.prototype,function(t,e){var o=E[e];if(o){var h=o.name+"";Ct.call(un,h)||(un[h]=[]),un[h].push({name:e,func:o})}}),un[hs(u,N).name]=[{name:"wrapper",func:u}],At.prototype.clone=_u,At.prototype.reverse=Eu,At.prototype.value=bu,E.prototype.at=th,E.prototype.chain=eh,E.prototype.commit=nh,E.prototype.next=sh,E.prototype.plant=rh,E.prototype.reverse=ah,E.prototype.toJSON=E.prototype.valueOf=E.prototype.value=oh,E.prototype.first=E.prototype.head,En&&(E.prototype[En]=ih),E},Vn=eu();Yt._=Vn,d=function(){return Vn}.call(r,a,r,l),d!==u&&(l.exports=d)}).call(this)}).call(this,a("c8ba"),a("62e4")(i))},"33e9":function(i,r,a){const c=a("4620"),l=a("b37a");class d{constructor(p,f,g={}){this.criterion=p,this.sample=f,this.getCursorOffset=g.getCursorOffset||(()=>null),this.outOfPage=g.outOfPage,this.bestNode=null,this.fineCursor=null,this.breakingSI=f.notes.length-1,this.zeroNode=l.zero(),this.zeroNode.offset=this.getCursorOffset()||0,this.relocationThreshold=g.relocationThreshold||c.RelocationThreshold}step(p){const f=this.sample.notes[p];if(f.matches.length>0){f.matches.forEach(m=>{m.evaluatePrev(this.zeroNode);for(let T=p-1;T>=Math.max(this.breakingSI+1,p-c.SkipDeep);--T){const S=this.sample.notes[T];console.assert(S,"prevNote is null:",T,p,this.sample.notes),S.matches.forEach(M=>{const C=m.offset-M.offset;C<2/c.LagOffsetCost&&C>-2/c.LeadOffsetCost&&m.evaluatePrev(M)})}if(m.prior=m.totalCost>1.99?-1:m.priorByOffset(this.zeroNode.offset),m.prior>0&&this.outOfPage){const T=this.criterion.notes[m.ci].startTick;this.outOfPage(T)&&(m.prior-=.7)}}),f.matches.sort((m,T)=>T.prior-m.prior),this.cursors=f.matches;let g=null;const y=this.nullSteps(p),x=this.cursors[0];x&&x.totalCost<1&&(x.prior>0||x.totalCost<.4&&Math.log(Math.max(y*x.value,.001))>this.relocationThreshold)&&(this.zeroNode.offset=x.offset,g=x,(!this.bestNode||x.value>this.bestNode.value)&&(this.bestNode=x)),g?this.fineCursor=g:this.resetCursor(p,{breaking:!1})||(this.zeroNode.offset+=f.deltaSi*Math.tanh(y),console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",f.deltaSi,y))}else this.cursors=[]}path({fromIndex:p=0,toIndex:f=this.sample.notes.length-1}={}){const g=[];let y=null;for(let x=f;x>=p;){const m=this.sample.notes[x];if(!m.matches.length||m.matches[0].prior<-.01||m.matches[0].totalCost>=1){g[x]=-1,--x;continue}y!=null&&(m.matches.forEach(S=>S.backPrior=S.totalCost<1.99?S.priorByOffset(y):-1),m.matches.sort((S,M)=>M.backPrior-S.backPrior));const T=m.matches[0];T.path.forEach((S,M)=>g[M]=S),y=T.root.offset,x=T.rootSi-1}return console.assert(g.length==f+1,"path length error:",g,p,f+1,this.sample.notes.length,this.sample.notes.length?this.sample.notes[this.sample.notes.length-1].index:null),g}nullSteps(p){return p-(this.fineCursor?this.fineCursor.si:-1)-1}resetCursor(p,{breaking:f=!0}={}){f&&(this.breakingSI=p);const g=this.getCursorOffset();return g!=null?(this.zeroNode.offset=g,this.zeroNode.si=p,this.fineCursor=null,console.assert(!Number.isNaN(this.zeroNode.offset),"zeroNode.offset is NaN.",g),!0):!1}get relocationTendency(){const p=this.cursors&&this.cursors[0];if(!p)return null;const f=this.nullSteps(p.si);return f<=0?0:Math.log(Math.max(f*p.value,.001))/this.relocationThreshold}}i.exports=d},"3b0d":function(i,r){i.exports=class{constructor(){this.buffer=""}write(c){this.buffer+=c}writeInt32(c){this.buffer+=String.fromCharCode(c>>24&255)+String.fromCharCode(c>>16&255)+String.fromCharCode(c>>8&255)+String.fromCharCode(c&255)}writeInt16(c){this.buffer+=String.fromCharCode(c>>8&255)+String.fromCharCode(c&255)}writeInt8(c){this.buffer+=String.fromCharCode(c&255)}writeVarInt(c){if(c<0)throw new Error("OStream.writeVarInt minus number: "+c);const l=c&127;c>>=7;let d=String.fromCharCode(l);for(;c;){const u=c&127;c>>=7,d=String.fromCharCode(u|128)+d}this.buffer+=d}getBuffer(){return this.buffer}getArrayBuffer(){return Uint8Array.from(this.buffer.split("").map(c=>c.charCodeAt(0))).buffer}}},"3b97":function(i,r){const a=(d,{timeWarp:u=1}={})=>{const p=[];let f=120;const g=d.header.ticksPerBeat;for(let S=0;S0&&(M=x.ticksToEvent/g/(f/60)),x.event.type=="meta"&&x.event.subtype=="setTempo"&&(f=6e7/x.event.microsecondsPerBeat);const C=M*1e3*u||0;m.push([x,C]),x=y()}if(x=y())for(;x;)S()}return T(),m},c=d=>{const u=new Map;return d.filter(([{event:p,ticksToEvent:f}])=>{if(f>0&&u.clear(),p.type!=="channel")return!0;const g=`${p.subtype}|${p.channel}|${p.noteNumber}`;return u.get(g)?!1:(u.set(g,p),!0)})},l=d=>{const u=new Map,p=new Map,f=[];let g=-1;return d.forEach(([{event:y,ticksToEvent:x}],m)=>{if(x>0&&(g=m),y.type!=="channel")return;const T=`${y.channel}|${y.noteNumber}`;switch(y.subtype){case"noteOn":u.get(T)?p.set(T,g):u.set(T,g);break;case"noteOff":p.get(T)?(f.push([p.get(T),m]),p.delete(T)):u.delete(T);break}}),f.forEach((y,x)=>{for(let m=x-1;m>=0;--m){const T=f[m];if(T[1]T[0]&&++y[0]}}),f.forEach(([y,x])=>{if(x>=d.length-1||y<0)return;const m=d[x],T=d[x+1],S=d[y];if(!S[0].ticksToEvent){console.warn("invalid front index:",y,x,S);return}const M=S[1]/S[0].ticksToEvent;T[1]+=m[1],T[0].ticksToEvent+=m[0].ticksToEvent,m[0].ticksToEvent=S[0].ticksToEvent-1,S[0].ticksToEvent=1,m[1]=m[0].ticksToEvent*M,S[1]=S[0].ticksToEvent*M,d.splice(x,1),d.splice(y,0,m)}),d};i.exports={midiToSequence:a,trimSequence:c,fixOverlapNotes:l}},4620:function(i,r){i.exports={CostStepAttenuation:.6,SkipDeep:3,PriorDistanceSigmoidFactor:.1,PriorValueSigmoidFactor:.12,SkipCost:.5,LagOffsetCost:1,LeadOffsetCost:1.6,ZeroOffsetCost:.58,RelocationThreshold:6}},"4a2c":function(i,r,a){const c=a("3b0d");i.exports=function({header:d,tracks:u}){function p(x,m,T){console.assert(m.length===4,"chunk id must be 4 byte"),x.write(m),x.writeInt32(T.length),x.write(T)}function f(x,m){if(m.subtype!=="unknown")switch(x.writeVarInt(m.deltaTime),m.type){case"meta":switch(x.writeInt8(255),m.subtype){case"sequenceNumber":x.writeInt8(0),x.writeVarInt(2),x.writeInt16(m.number);break;case"text":x.writeInt8(1),x.writeVarInt(m.text.length),x.write(m.text);break;case"copyrightNotice":x.writeInt8(2),x.writeVarInt(m.text.length),x.write(m.text);break;case"trackName":x.writeInt8(3),x.writeVarInt(m.text.length),x.write(m.text);break;case"instrumentName":x.writeInt8(4),x.writeVarInt(m.text.length),x.write(m.text);break;case"lyrics":x.writeInt8(5),x.writeVarInt(m.text.length),x.write(m.text);break;case"marker":x.writeInt8(6),x.writeVarInt(m.text.length),x.write(m.text);break;case"cuePoint":x.writeInt8(7),x.writeVarInt(m.text.length),x.write(m.text);break;case"midiChannelPrefix":x.writeInt8(32),x.writeVarInt(1),x.writeInt8(m.channel);break;case"endOfTrack":x.writeInt8(47),x.writeVarInt(0);break;case"setTempo":x.writeInt8(81),x.writeVarInt(3),x.writeInt8(m.microsecondsPerBeat>>16&255),x.writeInt8(m.microsecondsPerBeat>>8&255),x.writeInt8(m.microsecondsPerBeat&255);break;case"smpteOffset":x.writeInt8(84),x.writeVarInt(5);var T={24:0,25:32,29:64,30:96}[m.frameRate];x.writeInt8(m.hour|T),x.writeInt8(m.min),x.writeInt8(m.sec),x.writeInt8(m.frame),x.writeInt8(m.subframe);break;case"timeSignature":x.writeInt8(88),x.writeVarInt(4),x.writeInt8(m.numerator),x.writeInt8(Math.log2(m.denominator)),x.writeInt8(m.metronome),x.writeInt8(m.thirtyseconds);break;case"keySignature":x.writeInt8(89),x.writeVarInt(2),x.writeInt8(m.key),x.writeInt8(m.scale);break;case"sequencerSpecific":x.writeInt8(127),x.writeVarInt(m.data.length),x.write(m.data);break;default:throw new Error("unhandled event subtype:"+m.subtype)}break;case"sysEx":x.writeInt8(240),x.writeVarInt(m.data.length),x.write(m.data);break;case"dividedSysEx":x.writeInt8(247),x.writeVarInt(m.data.length),x.write(m.data);break;case"channel":switch(m.subtype){case"noteOn":x.writeInt8(144|m.channel),x.writeInt8(m.noteNumber),x.writeInt8(m.velocity);break;case"noteOff":x.writeInt8(128|m.channel),x.writeInt8(m.noteNumber),x.writeInt8(m.velocity?m.velocity:0);break;case"noteAftertouch":x.writeInt8(160|m.channel),x.writeInt8(m.noteNumber),x.writeInt8(m.amount);break;case"controller":x.writeInt8(176|m.channel),x.writeInt8(m.controllerType),x.writeInt8(m.value);break;case"programChange":x.writeInt8(192|m.channel),x.writeInt8(m.programNumber);break;case"channelAftertouch":x.writeInt8(208|m.channel),x.writeInt8(m.amount);break;case"pitchBend":x.writeInt8(224|m.channel),x.writeInt8(m.value&255),x.writeInt8(m.value>>7&255);break;default:throw new Error("unhandled event subtype:"+m.subtype)}break;default:throw new Error("unhandled event type:"+m.type)}}const g=new c,y=new c;y.writeInt16(d.formatType),y.writeInt16(u.length),y.writeInt16(d.ticksPerBeat),p(g,"MThd",y.getBuffer());for(let x=0;x=this.array.length}read(c){const l=this.array.slice(this.position,this.position+c);return this.position+=c,l}readString(c){return Array.from(this.read(c)).map(d=>String.fromCharCode(d)).join("")}readInt32(){const c=(this.array[this.position]<<24)+(this.array[this.position+1]<<16)+(this.array[this.position+2]<<8)+this.array[this.position+3];return this.position+=4,c}readInt16(){const c=(this.array[this.position]<<8)+this.array[this.position+1];return this.position+=2,c}readInt8(c){let l=this.array[this.position];return c&&l>127&&(l-=256),this.position+=1,l}readVarInt(){let c=0;for(;;){const l=this.readInt8();if(l&128)c+=l&127,c<<=7;else return c+l}}}},"62e4":function(i,r){i.exports=function(a){return a.webpackPolyfill||(a.deprecate=function(){},a.paths=[],a.children||(a.children=[]),Object.defineProperty(a,"loaded",{enumerable:!0,get:function(){return a.l}}),Object.defineProperty(a,"id",{enumerable:!0,get:function(){return a.i}}),a.webpackPolyfill=1),a}},8875:function(i,r,a){var c,l,d;(function(u,p){l=[],c=p,d=typeof c=="function"?c.apply(r,l):c,d!==void 0&&(i.exports=d)})(typeof self<"u"?self:this,function(){function u(){if(document.currentScript)return document.currentScript;try{throw new Error}catch(w){var p=/.*at [^(]*\((.*):(.+):(.+)\)$/ig,f=/@([^@]*):(\d+):(\d+)\s*$/ig,g=p.exec(w.stack)||f.exec(w.stack),y=g&&g[1]||!1,x=g&&g[2]||!1,m=document.location.href.replace(document.location.hash,""),T,S,M,C=document.getElementsByTagName("script");y===m&&(T=document.documentElement.outerHTML,S=new RegExp("(?:[^\\n]+?\\n){0,"+(x-2)+"}[^<]* - +